Commit 07937c98 by Javier Piris

Creado nuevo proyecto de inutralia en una nueva rama del git

parents
inutralia/packages/
inutralia/inutralia.Abstract/obj/
inutralia/inutralia.Abstract/bin/
inutralia/inutralia.Models/obj/
inutralia/inutralia.Models/bin/
inutralia/inutralia.Utils/bin/
inutralia/inutralia.Utils/obj/
inutralia/inutralia.Abstract/obj/Debug/inutralia.Abstractions.csproj.FileListAbsolute.txt
inutralia/inutralia.Abstract/obj/
inutralia/inutralia.Droid/obj/
inutralia/inutralia.Droid/bin/
inutralia/inutralia/bin/
inutralia/inutralia/obj/
inutralia/inutralia.iOS/obj/
inutralia/inutralia.iOS/bin/
inutralia/.vs/
inutralia/inutralia.Droid/inutralia.Droid.csproj.user
inutralia/inutralia.iOS/inutralia.iOS.csproj.user
inutralia/inutralia.Models/inutralia.Models.csproj.user
inutralia/inutralia/inutralia.csproj.user
inutralia/inutralia.Droid/Resources/Resource.designer.cs
namespace inutralia.Abstractions
{
/// <summary>
/// A service that exposes whether or not certain device capabilities are available.
/// </summary>
public interface ICapabilityService
{
/// <summary>
/// Gets a bool representing whether or not the device can make calls.
/// </summary>
/// <value>A bool representing whether or not the device can make calls.</value>
bool CanMakeCalls { get; }
/// <summary>
/// Gets a bool representing whether or not the device can send messages.
/// </summary>
/// <value>A bool representing whether or not the device can send messages.</value>
bool CanSendMessages { get; }
/// <summary>
/// Gets a bool representing whether or not the device cansend email.
/// </summary>
/// <value>A bool representing whether or not the device cansend email.</value>
bool CanSendEmail { get; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.Abstract
{
public class ICredentialsService
{
string UserName { get; }
string Password { get; }
void SaveCredentials(string userName, string password);
void DeleteCredentials();
bool DoCredentialsExist();
}
}
using System.Collections.Generic;
using System.Threading.Tasks;
namespace inutralia.Abstractions
{
/// <summary>
/// Interfaz genérico de almacenamiento de entidades
/// </summary>
public interface IDataPersistenceService
{
/// <summary>
/// Recupera de forma asíncrona los datos de una entidad a partir de su
/// identificador
/// </summary>
/// <typeparam name="T">Tipo de dato de cada entidad</typeparam>
/// <param name="id">Identificador de la entidad</param>
/// <returns>Instancia de T correspondiente al identificador</returns>
Task<T> GetItemAsync<T>(int id) where T : IIdentifiableEntity;
/// <summary>
/// Obtiene de forma asíncrona una lista de entidades
/// </summary>
/// <typeparam name="T">Tipo de dato de cada entidad</typeparam>
/// <returns>Lista de elementos obtenidos</returns>
Task<List<T>> RefreshListAsync<T>() where T : IIdentifiableEntity;
/// <summary>
/// Recupera de forma asíncrona los datos de una entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <param name="item">La entidad a actualizar</param>
/// <returns>Si la operación se realizó correctamente</returns>
Task<bool> RefreshItemAsync<T>(T item) where T : IIdentifiableEntity;
/// <summary>
/// Actualiza de forma asíncrona los datos de una entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <param name="item">La entidad a actualizar</param>
/// <param name="isNew">Indica si hay que crear una entidad nueva o modificar una existente</param>
/// <returns>El ID de la entidad. Null en caso de error</returns>
Task<int?> UpdateItemAsync<T>(T item, bool isNew = false) where T : IIdentifiableEntity;
/// <summary>
/// Elimina de forma asíncrona una entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <param name="item">La entidad a eliminar</param>
/// <returns>Si la operación se realizó correctamente</returns>
Task<bool> DeleteItemAsync<T>(T item) where T : IIdentifiableEntity;
}
}
namespace inutralia.Abstractions
{
/// <summary>
/// A service that exposes some platform environment characteristics.
/// </summary>
public interface IEnvironmentService
{
/// <summary>
/// Gets a bool representing whether or not is the app is running on a simulator or device.
/// </summary>
/// <value>True if the device is real, false if a simulator/emulator.</value>
bool IsRealDevice { get; }
}
}
namespace inutralia.Abstractions
{
/// <summary>
/// Entidad que tiene un Id de tipo entero
/// </summary>
public interface IIdentifiableEntity
{
/// <summary>
/// Identificador de la entidad
/// </summary>
int Id { get; set; }
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("inutralia.Abstract")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SETI Consultyn SL")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("SETI Consultyn SL")]
[assembly: AssemblyTrademark("SETI Consultyn SL")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}</ProjectGuid>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<UseMSBuildEngine>true</UseMSBuildEngine>
<OutputType>Library</OutputType>
<RootNamespace>inutralia.Abstract</RootNamespace>
<AssemblyName>inutralia.Abstract</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile78</TargetFrameworkProfile>
<ReleaseVersion>1.5</ReleaseVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ICapabilityService.cs" />
<Compile Include="IDataPersistenceService.cs" />
<Compile Include="IEnvironmentService.cs" />
<Compile Include="IIdentifiableEntity.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
</Project>
\ No newline at end of file
Any raw assets you want to be deployed with your application can be placed in
this directory (and child directories) and given a Build Action of "AndroidAsset".
These files will be deployed with your package and will be accessible using Android's
AssetManager, like this:
public class ReadAsset : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
InputStream input = Assets.Open ("my_asset.txt");
}
}
Additionally, some Android functions will automatically load asset files:
Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
{"v":"4.5.9","fr":25,"ip":0,"op":37,"w":1236,"h":1080,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"G iso 4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-108.529],[-59.963,-108.529],[-59.963,-108.25],[-111.359,-108.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-58.529],[-59.963,-58.529],[-59.821,155.028],[-111.217,155.028]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":14,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-58.529],[-59.963,-58.529],[-59.821,155.028],[-111.217,155.028]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-78.529],[-59.963,-78.529],[-59.963,56.801],[-111.359,56.801]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-78.529],[-59.963,-78.529],[-59.963,56.801],[-111.359,56.801]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-67.529],[-59.963,-67.529],[-59.963,74.528],[-111.359,74.528]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":22,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-67.529],[-59.963,-67.529],[-59.963,74.528],[-111.359,74.528]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-68.529],[-59.963,-68.529],[-59.963,68.528],[-111.359,68.528]],"c":true}]},{"t":25}]},"nm":"Path 4","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"mn":"ADBE Vector Group"}],"ip":7,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"G iso 3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,102.793],[-110.86,102.793],[-110.86,154.189],[-111.359,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-106.359,102.793],[121.359,102.793],[121.359,154.189],[-106.359,154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-106.359,102.793],[121.359,102.793],[121.359,154.189],[-106.359,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-113.109,102.793],[107.109,102.793],[107.109,154.189],[-113.109,154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":23,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-113.109,102.793],[107.109,102.793],[107.109,154.189],[-113.109,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,102.793],[111.359,102.793],[111.359,154.189],[-111.359,154.189]],"c":true}]},{"t":26}]},"nm":"Path 3","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"mn":"ADBE Vector Group"}],"ip":13,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"G iso 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-59.986],[111.359,-59.962],[59.963,-59.962],[59.963,-59.986],[59.923,-59.986],[59.923,-60],[111.359,-60]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-164.202],[111.359,-164.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-164.202],[111.359,-164.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-146.702],[111.359,-146.689]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-146.702],[111.359,-146.689]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-151.702],[111.359,-151.689]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-151.702],[111.359,-151.689]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-127.359,-102.793],[-127.359,-154.189],[111.359,-154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-127.359,-102.793],[-127.359,-154.189],[111.359,-154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-107.359,-102.793],[-107.359,-154.189],[111.359,-154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-107.359,-102.793],[-107.359,-154.189],[111.359,-154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-111.359,-102.793],[-111.359,-154.189],[111.359,-154.189]],"c":true}]},{"t":18}]},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"G iso","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,103.552],[111.359,103.562],[59.904,103.562],[59.904,103.543],[59.963,103.543],[59.963,103.529],[111.359,103.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-30.698],[59.904,-30.689],[59.904,25.707],[59.963,25.698],[59.963,66.029],[111.359,66.029]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-30.698],[59.904,-30.689],[59.904,25.707],[59.963,25.698],[59.963,66.029],[111.359,66.029]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-35.698,-25.698],[-35.698,25.698],[59.963,25.698],[59.963,73.529],[111.359,73.529]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":29,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-35.698,-25.698],[-35.698,25.698],[59.963,25.698],[59.963,73.529],[111.359,73.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-20.698,-25.698],[-20.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":32,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-20.698,-25.698],[-20.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-25.698,-25.698],[-25.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}]},{"t":35}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":19,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"cuadrado magenta Outlines","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[274.364,274.364,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.171,0.171,0.171],"y":[0,0.171,0.171]},"n":["0p667_1_0p171_0","0p667_0p667_0p171_0p171","0p667_0p667_0p171_0p171"],"t":0,"s":[0,100,100],"e":[120,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_0p667_0p167_0p167","0p667_0p667_0p167_0p167"],"t":6,"s":[120,100,100],"e":[95,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0.333,0.333]},"n":["0p667_1_0p333_0","0p667_0p667_0p333_0p333","0p667_0p667_0p333_0p333"],"t":11,"s":[95,100,100],"e":[102,100,100]},{"i":{"x":[0.676,0.676,0.676],"y":[1,0.676,0.676]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p676_1_0p167_0p167","0p676_0p676_0p167_0p167","0p676_0p676_0p167_0p167"],"t":15,"s":[102,100,100],"e":[99,100,100]},{"i":{"x":[0.676,0.676,0.676],"y":[1,0.676,0.676]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p676_1_0p167_0p167","0p676_0p676_0p167_0p167","0p676_0p676_0p167_0p167"],"t":20,"s":[99,100,100],"e":[100,100,100]},{"t":24}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-274.114,-274.114],[274.114,-274.114],[274.114,274.114],[-274.114,274.114]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.855,0.071,0.373,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[274.364,274.364],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":99,"st":0,"bm":0,"sr":1}]}
\ No newline at end of file
diff a/Droid/UIkit.Droid.csproj b/Droid/UIkit.Droid.csproj (rejected hunks)
@@ -175,6 +175,7 @@
<AndroidResource Include="Resources\drawable-xxhdpi\dashboard_thumbnail_9.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\dashboard_thumbnail_10.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\dashboard_thumbnail_11.png" />
+ <AndroidResource Include="Resources\drawable\MasterDetailBg.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
<Import Project="..\packages\Xamarin.Forms.1.4.2.6359\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.1.4.2.6359\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
MegTe6XsLKoqV9y3DgM76kRW5np71Jl11PclHLQCxAK9spE2XOCFEt+9KdOusb8RJrBlHh8Bj7tBUHWjopm9ulBEvy4Q5/iagzCKAe0jd7CEkvk3xm0nJKabq13tUgBBDYykX/hlaDPHqs6re4FRiK8kTolSfzyg8ZNXlKbg5gOoiVy/huNfAgqRN7RXCojC0bYk5oKhemCAu5ShdlQsqETCvQSjEsn21fwbIZVQd7RQSn2OWg7iS1Qw1hXgzmU+pC24aY4J9yDfCN5JaeQq8X1k9l/21cz1ZG3EDE6kbXbUzpVVvx7o1uNMHafQ5/qdWFUYaAx75rEWO5oBkV3Kw0hLVX8BOGF9V+lzkGHa0Z3eUiJ0H/gzdg2qF1+FaF8LCdvXpMmmF2qpSuq3pVL9MPXCubAGV6hQ7xhW5HG+Y00dfSa3/RqFO3WNR/wvxqQvlgi/qQ0jUk+7FEuwc0dJMxAthWFMktwErILnCxNYZoPqNvmHDoPhABFlQn8+LCJ1PVhqqNVkh4gv3VgQkdw7tUP/OCg5tU7fiwiCDlUrO9iwfVu7rebNWpHgIofl86Vv#ddAMEG3NvqCcwSSwMwI7RVhxOTLX9sDU2BycamfjbgreRWjeD/1vsbiB6lhnzivr+wfIbpr5fM3JwkrpaIiE8cCoQRDpTyEsvF6G478wBMTOGkkybvkEV0TJpNBLvY6ahv68hWcCnVAmWrK4zanFtr20T7XaQmc+WD/cyG6G6to=
\ No newline at end of file
/*
// Helpers/Settings.cs This file was automatically added when you installed the Settings Plugin. If you are not using a PCL then comment this file back in to use it.
using Plugin.Settings;
using Plugin.Settings.Abstractions;
namespace inutralia.Helpers
{
/// <summary>
/// This is the Settings static class that can be used in your Core solution or in any
/// of your client applications. All settings are laid out the same exact way with getters
/// and setters.
/// </summary>
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
#region Setting Constants
private const string SettingsKey = "settings_key";
private static readonly string SettingsDefault = string.Empty;
#endregion
public static string GeneralSettings
{
get
{
return AppSettings.GetValueOrDefault<string>(SettingsKey, SettingsDefault);
}
set
{
AppSettings.AddOrUpdateValue<string>(SettingsKey, value);
}
}
}
}*/
\ No newline at end of file
using Android.App;
using Android.Content.PM;
using Android.Views;
using Android.OS;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;
using UXDivers.Artina.Shared;
using UXDivers.Artina.Shared.Droid;
using FFImageLoading.Forms.Droid;
namespace inutralia
{
//https://developer.android.com/guide/topics/manifest/activity-element.html
[Activity(
Label = "iNutralia",
Icon = "@drawable/icon",
Theme = "@style/Theme.Splash",
MainLauncher = true,
LaunchMode = LaunchMode.SingleTask,
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize,
ScreenOrientation = ScreenOrientation.Portrait
)
]
public class MainActivity : FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
// Changing to App's theme since we are OnCreate and we are ready to
// "hide" the splash
base.Window.RequestFeature(WindowFeatures.ActionBar);
base.SetTheme(Resource.Style.AppTheme);
FormsAppCompatActivity.ToolbarResource = Resource.Layout.Toolbar;
FormsAppCompatActivity.TabLayoutResource = Resource.Layout.Tabs;
base.OnCreate(bundle);
Window.AddFlags(WindowManagerFlags.Fullscreen);
//Initializing FFImageLoading
CachedImageRenderer.Init(true);
Forms.Init(this, bundle);
GrialKit.Init(this, "inutralia.GrialLicense");
FormsHelper.ForceLoadingAssemblyContainingType(typeof(UXDivers.Effects.Effects));
LoadApplication(new App());}
public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
DeviceOrientationLocator.NotifyOrientationChanged();
}
public override void OnBackPressed ()
{
var md = Xamarin.Forms.Application.Current.MainPage as MasterDetailPage;
if (md != null && !md.IsPresented &&
(
!(md.Detail is NavigationPage) || (((NavigationPage) md.Detail).Navigation.NavigationStack.Count == 1 && ((NavigationPage) md.Detail).Navigation.ModalStack.Count == 0)
))
MoveTaskToBack (true);
else
base.OnBackPressed ();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1010" android:installLocation="preferExternal" package="com.seti.inutralia.inutralia" android:versionName="1.2">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28" />
<application android:icon="@drawable/icon" android:largeHeap="@bool/largeheap" android:label="iNutralia"></application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
\ No newline at end of file
using System.Reflection;
using Xamarin.Forms;
using inutralia;
[assembly: AssemblyTitle (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit (Android)")]
[assembly: AssemblyConfiguration (AssemblyGlobal.Configuration)]
[assembly: AssemblyCompany (AssemblyGlobal.Company)]
[assembly: AssemblyProduct (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit (Android)")]
[assembly: AssemblyCopyright (AssemblyGlobal.Copyright)]
// Custom renderer definition.
[assembly: ExportRenderer(typeof(Entry), typeof(UXDivers.Artina.Shared.ArtinaEntryRenderer))]
[assembly: ExportRenderer(typeof(Editor), typeof(UXDivers.Artina.Shared.ArtinaEditorRenderer))]
[assembly: ExportRenderer(typeof(Label), typeof(inutralia.CustomFontLabelRenderer))]
[assembly: ExportRenderer(typeof(Switch), typeof(UXDivers.Artina.Shared.ArtinaSwitchRenderer))]
[assembly: ExportRenderer(typeof(ActivityIndicator), typeof(UXDivers.Artina.Shared.ArtinaActivityIndicatorRenderer))]
[assembly: ExportRenderer(typeof(ProgressBar), typeof(UXDivers.Artina.Shared.ArtinaProgressBarRenderer))]
[assembly: ExportRenderer(typeof(Slider), typeof(UXDivers.Artina.Shared.ArtinaSliderRenderer))]
[assembly: ExportRenderer(typeof(SwitchCell), typeof(UXDivers.Artina.Shared.ArtinaSwitchCellRenderer))]
[assembly: ExportRenderer(typeof(TextCell), typeof(UXDivers.Artina.Shared.ArtinaTextCellRenderer))]
[assembly: ExportRenderer(typeof(ImageCell), typeof(UXDivers.Artina.Shared.ArtinaImageCellRenderer))]
[assembly: ExportRenderer(typeof(ViewCell), typeof(UXDivers.Artina.Shared.ArtinaViewCellRenderer))]
[assembly: ExportRenderer(typeof(EntryCell), typeof(UXDivers.Artina.Shared.ArtinaEntryCellRenderer))]
[assembly: ExportRenderer(typeof(SearchBar), typeof(UXDivers.Artina.Shared.ArtinaSearchBarRenderer))]
[assembly: ExportRenderer(typeof(UXDivers.Artina.Shared.Button), typeof(UXDivers.Artina.Shared.ArtinaButtonRenderer))]
using System;
using UXDivers.Artina.Shared;
using Xamarin.Forms;
namespace inutralia
{
public class CustomFontLabelRenderer : ArtinaCustomFontLabelRenderer
{
private static readonly string[] CustomFontFamily = new []
{
"grialshapes",
"FontAwesome",
"Ionicons"
};
private static readonly Tuple<FontAttributes, string>[][] CustomFontFamilyData = new [] {
new [] {
new Tuple<FontAttributes, string>(FontAttributes.None, "grialshapes.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Bold, "grialshapes.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Italic, "grialshapes.ttf")
},
//*
new [] {
new Tuple<FontAttributes, string>(FontAttributes.None, "fontawesome-webfont.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Bold, "fontawesome-webfont.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Italic, "fontawesome-webfont.ttf")
},
//*/
//*
new [] {
new Tuple<FontAttributes, string>(FontAttributes.None, "ionicons.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Bold, "ionicons.ttf"),
new Tuple<FontAttributes, string>(FontAttributes.Italic, "ionicons.ttf")
}
//*/
};
protected override bool CheckIfCustomFont (string fontFamily, FontAttributes attributes, out string fontFileName)
{
for (int i = 0; i < CustomFontFamily.Length; i++) {
if (string.Equals(fontFamily, CustomFontFamily[i], StringComparison.InvariantCulture)){
var fontFamilyData = CustomFontFamilyData[i];
for (int j = 0; j < fontFamilyData.Length; j++) {
var data = fontFamilyData[j];
if (data.Item1 == attributes){
fontFileName = data.Item2;
return true;
}
}
break;
}
}
fontFileName = null;
return false;
}
}
}
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.
For example, a sample Android app that contains a user interface layout (main.axml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:
Resources/
drawable/
icon.png
layout/
main.axml
values/
strings.xml
In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called "R"
(this is an Android convention) that contains the tokens for each one of the resources
included. For example, for the above Resources layout, this is what the R class would expose:
public class R {
public class drawable {
public const int icon = 0x123;
}
public class layout {
public const int main = 0x456;
}
public class strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
to reference the layout/main.axml file, or R.strings.first_string to reference the first
string in the dictionary file values/strings.xml.
diff a/Droid/Resources/Resource.designer.cs b/Droid/Resources/Resource.designer.cs (rejected hunks)
@@ -47,115 +47,118 @@
{
// aapt resource value: 0x7f020000
- public const int avatar = 2130837504;
+ public const int ArticleImg = 2130837504;
// aapt resource value: 0x7f020001
- public const int background = 2130837505;
+ public const int avatar = 2130837505;
// aapt resource value: 0x7f020002
- public const int badge = 2130837506;
+ public const int background = 2130837506;
// aapt resource value: 0x7f020003
- public const int bokeh = 2130837507;
+ public const int badge = 2130837507;
// aapt resource value: 0x7f020004
- public const int building = 2130837508;
+ public const int bokeh = 2130837508;
// aapt resource value: 0x7f020005
- public const int chat = 2130837509;
+ public const int building = 2130837509;
// aapt resource value: 0x7f020006
- public const int dashboard_thumbnail_0 = 2130837510;
+ public const int chat = 2130837510;
// aapt resource value: 0x7f020007
- public const int dashboard_thumbnail_1 = 2130837511;
+ public const int dashboard_thumbnail_0 = 2130837511;
// aapt resource value: 0x7f020008
- public const int dashboard_thumbnail_2 = 2130837512;
+ public const int dashboard_thumbnail_1 = 2130837512;
// aapt resource value: 0x7f020009
- public const int dashboard_thumbnail_3 = 2130837513;
+ public const int dashboard_thumbnail_2 = 2130837513;
// aapt resource value: 0x7f02000a
- public const int dashboard_thumbnail_4 = 2130837514;
+ public const int dashboard_thumbnail_3 = 2130837514;
// aapt resource value: 0x7f02000b
- public const int dashboard_thumbnail_5 = 2130837515;
+ public const int dashboard_thumbnail_4 = 2130837515;
// aapt resource value: 0x7f02000c
- public const int dome = 2130837516;
+ public const int dashboard_thumbnail_5 = 2130837516;
// aapt resource value: 0x7f02000d
- public const int face = 2130837517;
+ public const int dome = 2130837517;
// aapt resource value: 0x7f02000e
- public const int friend_thumbnail_27 = 2130837518;
+ public const int face = 2130837518;
// aapt resource value: 0x7f02000f
- public const int friend_thumbnail_31 = 2130837519;
+ public const int friend_thumbnail_27 = 2130837519;
// aapt resource value: 0x7f020010
- public const int friend_thumbnail_34 = 2130837520;
+ public const int friend_thumbnail_31 = 2130837520;
// aapt resource value: 0x7f020011
- public const int friend_thumbnail_55 = 2130837521;
+ public const int friend_thumbnail_34 = 2130837521;
// aapt resource value: 0x7f020012
- public const int friend_thumbnail_71 = 2130837522;
+ public const int friend_thumbnail_55 = 2130837522;
// aapt resource value: 0x7f020013
- public const int friend_thumbnail_75 = 2130837523;
+ public const int friend_thumbnail_71 = 2130837523;
// aapt resource value: 0x7f020014
- public const int friend_thumbnail_93 = 2130837524;
+ public const int friend_thumbnail_75 = 2130837524;
// aapt resource value: 0x7f020015
- public const int generic_icon = 2130837525;
+ public const int friend_thumbnail_93 = 2130837525;
// aapt resource value: 0x7f020016
- public const int icon = 2130837526;
+ public const int generic_icon = 2130837526;
// aapt resource value: 0x7f020017
- public const int lighthouse = 2130837527;
+ public const int icon = 2130837527;
// aapt resource value: 0x7f020018
- public const int login_background = 2130837528;
+ public const int lighthouse = 2130837528;
// aapt resource value: 0x7f020019
- public const int monoandroidsplash = 2130837529;
+ public const int login_background = 2130837529;
// aapt resource value: 0x7f02001a
- public const int MountainBg = 2130837530;
+ public const int monoandroidsplash = 2130837530;
// aapt resource value: 0x7f02001b
- public const int pindrop = 2130837531;
+ public const int MountainBg = 2130837531;
// aapt resource value: 0x7f02001c
- public const int RoadBg = 2130837532;
+ public const int pindrop = 2130837532;
// aapt resource value: 0x7f02001d
- public const int southmountain = 2130837533;
+ public const int RoadBg = 2130837533;
// aapt resource value: 0x7f02001e
- public const int splash = 2130837534;
+ public const int southmountain = 2130837534;
// aapt resource value: 0x7f02001f
- public const int thumb_1 = 2130837535;
+ public const int splash = 2130837535;
// aapt resource value: 0x7f020020
- public const int thumbnail = 2130837536;
+ public const int thumb_1 = 2130837536;
// aapt resource value: 0x7f020021
- public const int walkthrough_0 = 2130837537;
+ public const int thumbnail = 2130837537;
// aapt resource value: 0x7f020022
- public const int walkthrough_1 = 2130837538;
+ public const int walkthrough_0 = 2130837538;
// aapt resource value: 0x7f020023
- public const int walkthrough_2 = 2130837539;
+ public const int walkthrough_1 = 2130837539;
// aapt resource value: 0x7f020024
- public const int white_mountains = 2130837540;
+ public const int walkthrough_2 = 2130837540;
+
+ // aapt resource value: 0x7f020025
+ public const int white_mountains = 2130837541;
static Drawable()
{
<?xml version="1.0" encoding="utf-8" ?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<padding
android:left="0dip"
android:top="0dip"
android:right="0dip"
android:bottom="0dip" />
</shape>
</item>
<item>
<bitmap android:src="@drawable/splash"
android:gravity="center" />
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
style="@style/Widget.AppTheme.TabLayout" />
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:elevation="4dp" />
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<bool name="largeheap">true</bool>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<color name="primary">@color/AccentColor</color>
<color name="primary_dark">@color/AccentColor</color>
<color name="actionbar_tab_indicator">@color/AccentColor</color>
<!-- Theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Set AppCompat’s color theming attrs -->
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/AccentColor</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">#000000</item>
<!-- colorAccent is used as the default value for colorControlActivated,
which is used to tint widgets -->
<item name="colorAccent">@color/AccentColor</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- Used on ListView selected items -->
<item name="android:color">@color/AccentColor</item>
<item name="android:colorPressedHighlight">@color/AccentColor</item>
<item name="android:colorLongPressedHighlight">@color/AccentColor</item>
<item name="android:colorFocusedHighlight">@color/AccentColor</item>
<item name="android:colorActivatedHighlight">@color/AccentColor</item>
<item name="android:activatedBackgroundIndicator">@color/AccentColor</item>
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="android:colorPrimary">@color/primary</item>
<!-- darker variant for the status bar and contextual app bars
<item name="android:colorPrimaryDark">@color/primary_dark</item>-->
<!-- theme UI controls like checkboxes and text fields -->
<item name="android:colorAccent">@color/AccentColor</item>
<!-- TimePicker dialog-->
<item name="android:dialogTheme">@style/AppTheme.Dialog</item>
<item name="android:timePickerDialogTheme">@style/AppTheme.Dialog</item>
<item name="android:datePickerDialogTheme">@style/AppTheme.Dialog</item>
<item name="alertDialogTheme">@style/AppTheme.AlertDialog</item>
<item name="drawerArrowStyle">@style/AppTheme.DrawerArrowStyle</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>
<!-- Adding animation to hamburguer icon, and overriding color to fix weird color change bug on app compat -->
<style name="AppTheme.DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">#FFFFFF</item>
</style>
<!-- DatePicker style -->
<style name="AppTheme.Dialog" parent="android:Theme.Material.Light.Dialog.Alert">
<item name="android:colorAccent">@color/AccentColor</item>
<item name="android:textColorPrimary">@color/AccentColor</item>
</style>
<style name="AppTheme.DialogTitleTextStyle">
<item name="android:textColor">@color/AccentColor</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
<style name="AppTheme.AlertDialog" parent="android:Theme.Material.Light.Dialog.Alert">
<item name="android:colorAccent">@color/AccentColor</item>
<item name="android:windowTitleStyle">@style/AppTheme.DialogTitleTextStyle</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="AccentColor">#FFA2C300</color>
<color name="ComplementColor">#FFD480D6</color>
<color name="BaseTextColor">#FF666666</color>
</resources>
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<!-- Splash styles -->
<style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_drawable</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
<!-- Theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Set AppCompat’s color theming attrs -->
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/AccentColor</item>
<!-- colorPrimaryDark is used for the status bar
<item name="colorPrimaryDark">@color/AccentColor</item>-->
<!-- colorAccent is used as the default value for colorControlActivated,
which is used to tint widgets -->
<item name="colorAccent">@color/AccentColor</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- Used on ListView selected items -->
<item name="android:color">@color/AccentColor</item>
<item name="android:colorPressedHighlight">@color/AccentColor</item>
<item name="android:colorLongPressedHighlight">@color/AccentColor</item>
<item name="android:colorFocusedHighlight">@color/AccentColor</item>
<item name="android:colorActivatedHighlight">@color/AccentColor</item>
<item name="android:activatedBackgroundIndicator">@color/AccentColor</item>
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="android:colorPrimary">@color/AccentColor</item>
<!-- darker variant for the status bar and contextual app bars
<item name="android:colorPrimaryDark">@color/primary_dark</item>-->
<!-- theme UI controls like checkboxes and text fields -->
<item name="android:colorAccent">@color/AccentColor</item>
<!-- Dialog attributes -->
<item name="dialogTheme">@style/AppTheme.Dialog</item>
<!-- AlertDialog attributes -->
<item name="alertDialogTheme">@style/AppTheme.Dialog</item>
<item name="drawerArrowStyle">@style/AppTheme.DrawerArrowStyle</item>
<item name="android:showDividers">none</item>
<item name="android:divider">@null</item>
<item name="android:datePickerStyle">@style/Widget.AppTheme.Picker</item>
</style>
<!-- Adding animation to hamburguer icon, and overriding color to fix weird color change bug on app compat -->
<style name="AppTheme.DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">#FFFFFF</item>
</style>
<style name="AppTheme.Dialog" parent="@style/Theme.AppCompat.Light.Dialog">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:textColorAlertDialogListItem">@color/AccentColor</item>
<item name="android:textColor">@color/AccentColor</item>
<item name="colorAccent">@color/AccentColor</item>
<item name="android:borderlessButtonStyle">@style/Widget.AppTheme.Button.Borderless</item>
</style>
<style name="Widget.AppTheme.Button.Borderless" parent="@style/Widget.AppCompat.Button.Borderless">
<item name="android:textColor">#FF00FF</item>
<item name="android:textAppearance">@style/TextAppearance.AppTheme.DialogButton</item>
</style>
<style name="Widget.AppTheme.TabLayout" parent="@style/Widget.Design.TabLayout">
<item name="tabSelectedTextColor">@color/AccentColor</item>
<item name="tabTextColor">@color/BaseTextColor</item>
</style>
<style name="Widget.AppTheme.Picker" parent="@style/Theme.AppCompat.Light.Dialog">
<item name="android:colorPrimary">@color/AccentColor</item>
<item name="android:colorPrimaryDark">@color/AccentColor</item>
<item name="android:colorAccent">@color/AccentColor</item>
<item name="android:textColor">@color/AccentColor</item>
</style>
<style name="TextAppearance.AppTheme.DialogButton" parent="@style/TextAppearance.AppCompat.Title">
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props')" />
<Import Project="..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.props" Condition="Exists('..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<ProjectGuid>{B6C3195C-0075-436E-826B-FEF49284DD32}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>inutralia</RootNamespace>
<AndroidApplication>True</AndroidApplication>
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
<AndroidResgenClass>Resource</AndroidResgenClass>
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkVersion>v9.0</TargetFrameworkVersion>
<AssemblyName>inutralia.Droid</AssemblyName>
<ReleaseVersion>1.5</ReleaseVersion>
<AndroidTlsProvider>
</AndroidTlsProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidLinkMode>None</AndroidLinkMode>
<AotAssemblies>false</AotAssemblies>
<EnableLLVM>false</EnableLLVM>
<BundleAssemblies>false</BundleAssemblies>
<AndroidEnableMultiDex>false</AndroidEnableMultiDex>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<AndroidSupportedAbis>armeabi;armeabi-v7a;x86;arm64-v8a;x86_64</AndroidSupportedAbis>
<AotAssemblies>false</AotAssemblies>
<EnableLLVM>false</EnableLLVM>
<BundleAssemblies>false</BundleAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'PlayerDebug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\PlayerDebug</OutputPath>
<DefineConstants>DEBUG; PLAYER</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidLinkMode>None</AndroidLinkMode>
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
</PropertyGroup>
<ItemGroup>
<Reference Include="FFImageLoading, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\MonoAndroid10\FFImageLoading.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.4.2.832\lib\MonoAndroid10\FFImageLoading.Forms.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms.Platform, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.4.2.832\lib\MonoAndroid10\FFImageLoading.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Platform, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\MonoAndroid10\FFImageLoading.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Transformations, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Transformations.2.4.2.832\lib\MonoAndroid10\FFImageLoading.Transformations.dll</HintPath>
</Reference>
<Reference Include="FormsViewGroup, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
</Reference>
<Reference Include="Java.Interop" />
<Reference Include="Lottie, Version=1.5.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Android.Lottie.2.5.1\lib\MonoAndroid41\Lottie.dll</HintPath>
</Reference>
<Reference Include="Lottie.Android, Version=2.5.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Android.Lottie.2.5.4\lib\monoandroid81\Lottie.Android.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms, Version=1.0.6647.21928, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.1\lib\MonoAndroid70\Lottie.Forms.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.1\lib\MonoAndroid70\Lottie.Forms.Droid.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\MonoAndroid10\Plugin.Settings.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings.Abstractions, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\MonoAndroid10\Plugin.Settings.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\MonoAndroid\Rg.Plugins.Popup.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\MonoAndroid\Rg.Plugins.Popup.Droid.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\MonoAndroid\Rg.Plugins.Popup.Platform.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Mono.Android" />
<Reference Include="mscorlib" />
<Reference Include="System.Xml.Linq" />
<Reference Include="UXDivers.Artina.Shared, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Base.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base.Droid, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Base.Droid.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Droid, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Droid.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects, Version=1.0.6558.30269, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\MonoAndroid10\UXDivers.Effects.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\MonoAndroid10\UXDivers.Effects.Droid.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Core.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\lib\MonoAndroid80\Xamarin.Android.Arch.Core.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Lifecycle.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Lifecycle.Runtime, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Animated.Vector.Drawable, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Annotations, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Annotations.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Compat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Compat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Core.UI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Core.UI.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Core.Utils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Core.Utils.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Design, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Design.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Design.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Exif, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Exif.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Exif.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Fragment, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Fragment.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Media.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Media.Compat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Transition, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Transition.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Transition.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v4, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v4.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v4.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.AppCompat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.CardView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.CardView.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.CardView.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.MediaRouter, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.MediaRouter.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.MediaRouter.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.Palette, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.Palette.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.Palette.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.RecyclerView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Vector.Drawable, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\lib\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\MonoAndroid10\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\MonoAndroid10\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform.Android, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Helpers\Settings.cs" />
<Compile Include="MainActivity.cs" />
<Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Renderers\CustomFontLabelRenderer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
<None Include="Resources\AboutResources.txt" />
<None Include="Properties\AndroidManifest.xml" />
<None Include="Assets\AboutAssets.txt" />
<None Include="Assets\fontawesome-webfont.ttf" />
<AndroidAsset Include="Assets\ionicons.ttf" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon.png" />
<AndroidResource Include="Resources\drawable\splash.png" />
<AndroidResource Include="Resources\drawable\hamburguer_icon.png" />
<AndroidResource Include="Resources\values\Colors.xml" />
<AndroidResource Include="Resources\drawable-hdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable-xhdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable\logo.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\logo.png" />
<AndroidResource Include="Resources\drawable-xhdpi\logo.png" />
<AndroidResource Include="Resources\drawable-hdpi\logo.png" />
<AndroidResource Include="Resources\values-v19\bools.xml" />
<AndroidResource Include="Resources\values\Style.xml" />
<AndroidResource Include="Resources\layout\Toolbar.axml" />
<AndroidResource Include="Resources\layout\Tabs.axml" />
<AndroidResource Include="Resources\values-v21\Style.xml" />
<AndroidResource Include="Resources\drawable\splash_drawable.xml" />
<AndroidResource Include="Resources\drawable-hdpi\splash.png" />
<AndroidResource Include="Resources\drawable-xhdpi\splash.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\splash.png" />
<AndroidResource Include="Resources\drawable-hdpi\icon.png" />
<AndroidResource Include="Resources\drawable-xhdpi\icon.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\icon.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<ItemGroup>
<AndroidAsset Include="Assets\grialshapes.ttf" />
<AndroidAsset Include="Assets\grial_animation.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia\inutralia.csproj">
<Project>{7041522B-6406-4AA7-8C6D-8AD1661DD392}</Project>
<Name>inutralia</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="GrialLicense" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img1.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img3.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img4.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon4.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\iconSalir.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon1.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon3.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\inutralia.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\logo_empresa.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\image_default_empresa.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon_info.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon_filter.png" />
</ItemGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets'))" />
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Annotations.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Annotations.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Compat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Compat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.UI.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.UI.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.Utils.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.Utils.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Exif.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Exif.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Exif.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Exif.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Fragment.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Fragment.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Media.Compat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Media.Compat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Transition.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Transition.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Transition.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Transition.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v4.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v4.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v4.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v4.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.CardView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.CardView.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.CardView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.CardView.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.Palette.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.Palette.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.Palette.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.Palette.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Design.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Design.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Design.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Design.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.MediaRouter.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.MediaRouter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.MediaRouter.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.MediaRouter.targets'))" />
</Target>
<Import Project="..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets" Condition="Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" />
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
<Import Project="..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.targets" Condition="Exists('..\packages\Xamarin.Build.Download.0.4.11\build\Xamarin.Build.Download.targets')" />
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Annotations.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Annotations.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Annotations.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Core.Common.1.0.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.3.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Compat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Compat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.UI.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Core.UI.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.UI.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.Utils.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Core.Utils.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Core.Utils.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Exif.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Exif.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Exif.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Exif.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Fragment.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Fragment.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Fragment.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Media.Compat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Media.Compat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Media.Compat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Transition.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Transition.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Transition.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Transition.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v4.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v4.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v4.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v4.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.CardView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.CardView.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.CardView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.CardView.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.Palette.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.Palette.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.Palette.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.Palette.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.RecyclerView.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.RecyclerView.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Vector.Drawable.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.AppCompat.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.AppCompat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Design.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Design.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Design.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.Design.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.MediaRouter.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.MediaRouter.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.MediaRouter.27.0.2.1\build\MonoAndroid81\Xamarin.Android.Support.v7.MediaRouter.targets')" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.props')" />
<Import Project="..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.props" Condition="Exists('..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<ProjectGuid>{B6C3195C-0075-436E-826B-FEF49284DD32}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>inutralia</RootNamespace>
<AndroidApplication>True</AndroidApplication>
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
<AndroidResgenClass>Resource</AndroidResgenClass>
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
<AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<AssemblyName>inutralia.Droid</AssemblyName>
<ReleaseVersion>1.5</ReleaseVersion>
<AndroidTlsProvider>
</AndroidTlsProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidLinkMode>None</AndroidLinkMode>
<AotAssemblies>false</AotAssemblies>
<EnableLLVM>false</EnableLLVM>
<BundleAssemblies>false</BundleAssemblies>
<AndroidEnableMultiDex>false</AndroidEnableMultiDex>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<AndroidSupportedAbis>armeabi;armeabi-v7a;x86;arm64-v8a;x86_64</AndroidSupportedAbis>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'PlayerDebug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\PlayerDebug</OutputPath>
<DefineConstants>DEBUG; PLAYER</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidLinkMode>None</AndroidLinkMode>
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
</PropertyGroup>
<ItemGroup>
<Reference Include="FFImageLoading, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.3.4\lib\MonoAndroid10\FFImageLoading.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\MonoAndroid10\FFImageLoading.Forms.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\MonoAndroid10\FFImageLoading.Forms.Droid.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.3.4\lib\MonoAndroid10\FFImageLoading.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Transformations, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Transformations.2.3.4\lib\MonoAndroid10\FFImageLoading.Transformations.dll</HintPath>
</Reference>
<Reference Include="FormsViewGroup, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.2.5.0.280555\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
</Reference>
<Reference Include="Lottie, Version=1.5.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Android.Lottie.2.5.1\lib\MonoAndroid41\Lottie.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms, Version=1.0.6647.21928, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.1\lib\MonoAndroid70\Lottie.Forms.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.1\lib\MonoAndroid70\Lottie.Forms.Droid.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\MonoAndroid10\Plugin.Settings.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings.Abstractions, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\MonoAndroid10\Plugin.Settings.Abstractions.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Mono.Android" />
<Reference Include="mscorlib" />
<Reference Include="System.Xml.Linq" />
<Reference Include="UXDivers.Artina.Shared, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Base.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base.Droid, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Base.Droid.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Droid, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\MonoAndroid10\UXDivers.Artina.Shared.Droid.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects, Version=1.0.6558.30269, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\MonoAndroid10\UXDivers.Effects.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects.Droid, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\MonoAndroid10\UXDivers.Effects.Droid.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Core.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\lib\MonoAndroid80\Xamarin.Android.Arch.Core.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Lifecycle.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Arch.Lifecycle.Runtime, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\lib\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Animated.Vector.Drawable, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Animated.Vector.Drawable.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Annotations, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Annotations.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Compat.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Compat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Core.UI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Core.UI.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Core.Utils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Core.Utils.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Design, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Design.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Design.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Exif, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Exif.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Exif.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Fragment, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Fragment.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Media.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Media.Compat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Transition, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Transition.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Transition.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v4, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v4.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v4.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.AppCompat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.AppCompat.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v7.AppCompat.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.CardView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.CardView.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v7.CardView.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.MediaRouter, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.MediaRouter.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v7.MediaRouter.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.Palette, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.Palette.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v7.Palette.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.v7.RecyclerView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.v7.RecyclerView.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.v7.RecyclerView.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Android.Support.Vector.Drawable, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Android.Support.Vector.Drawable.26.1.0.1\lib\MonoAndroid80\Xamarin.Android.Support.Vector.Drawable.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.2.5.0.280555\lib\MonoAndroid10\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.5.0.280555\lib\MonoAndroid10\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform.Android, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.2.5.0.280555\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.2.5.0.280555\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Helpers\Settings.cs" />
<Compile Include="MainActivity.cs" />
<Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Renderers\CustomFontLabelRenderer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
<None Include="Resources\AboutResources.txt" />
<None Include="Properties\AndroidManifest.xml" />
<None Include="Assets\AboutAssets.txt" />
<None Include="Assets\fontawesome-webfont.ttf" />
<AndroidAsset Include="Assets\ionicons.ttf" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon.png" />
<AndroidResource Include="Resources\drawable\splash.png" />
<AndroidResource Include="Resources\drawable\hamburguer_icon.png" />
<AndroidResource Include="Resources\values\Colors.xml" />
<AndroidResource Include="Resources\drawable\walkthrough_generic_phone_bg.png" />
<AndroidResource Include="Resources\drawable\welcome_bg.jpg" />
<AndroidResource Include="Resources\drawable\social_header_bg_0.jpg" />
<AndroidResource Include="Resources\drawable\social_header_bg_1.jpg" />
<AndroidResource Include="Resources\drawable\user_profile_1.jpg" />
<AndroidResource Include="Resources\drawable\user_profile_0.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\signup_bg.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\social_header_bg_1.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\user_profile_0.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\user_profile_1.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\welcome_bg.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\signup_bg.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\social_header_bg_1.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\user_profile_0.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\user_profile_1.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\welcome_bg.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\social_header_bg_0.jpg" />
<AndroidResource Include="Resources\drawable\signup_bg.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable-xhdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\hamburguer_icon.png" />
<AndroidResource Include="Resources\drawable-hdpi\walkthrough_generic_phone_bg.png" />
<AndroidResource Include="Resources\drawable-xhdpi\walkthrough_generic_phone_bg.png" />
<AndroidResource Include="Resources\drawable\logo.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\logo.png" />
<AndroidResource Include="Resources\drawable-xhdpi\logo.png" />
<AndroidResource Include="Resources\drawable-hdpi\logo.png" />
<AndroidResource Include="Resources\values-v19\bools.xml" />
<AndroidResource Include="Resources\values\Style.xml" />
<AndroidResource Include="Resources\layout\Toolbar.axml" />
<AndroidResource Include="Resources\layout\Tabs.axml" />
<AndroidResource Include="Resources\values-v21\Style.xml" />
<AndroidResource Include="Resources\drawable\welcome_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\welcome_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable\signup_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable\splash_drawable.xml" />
<AndroidResource Include="Resources\drawable-hdpi\splash.png" />
<AndroidResource Include="Resources\drawable-xhdpi\splash.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\splash.png" />
<AndroidResource Include="Resources\drawable-hdpi\icon.png" />
<AndroidResource Include="Resources\drawable-xhdpi\icon.png" />
<AndroidResource Include="Resources\drawable-xxhdpi\icon.png" />
<AndroidResource Include="Resources\drawable\pass_recovery_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable\pass_recovery_bg.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\welcome_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\pass_recovery_bg.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\pass_recovery_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\pass_recovery_bg.jpg" />
<AndroidResource Include="Resources\drawable\generic_bg_image.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\generic_bg_image.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\generic_bg_image.jpg" />
<AndroidResource Include="Resources\drawable-hdpi\signup_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable-xhdpi\signup_bg_tablet.jpg" />
<AndroidResource Include="Resources\drawable\logoalli.gif" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<ItemGroup>
<AndroidAsset Include="Assets\grialshapes.ttf" />
<AndroidAsset Include="Assets\grial_animation.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia\inutralia.csproj">
<Project>{7041522B-6406-4AA7-8C6D-8AD1661DD392}</Project>
<Name>inutralia</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="GrialLicense" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\login_bg.jpg" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\login_bg_tablet.jpg" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable-xhdpi\icon1.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable-xhdpi\icon2.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable-xhdpi\icon3.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable-xhdpi\icon4.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable-xhdpi\iconSalir.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img1.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img3.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\img4.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon4.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\iconSalir.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon1.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon2.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\icon3.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\inutralia.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\alli.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\logo_empresa.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\image_default_empresa.png" />
</ItemGroup>
<Import Project="..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets'))" />
<Error Condition="!Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Compat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Compat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.UI.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.UI.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.Utils.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.Utils.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Fragment.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Fragment.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Media.Compat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Media.Compat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Transition.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Transition.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Transition.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Transition.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v4.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v4.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v4.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v4.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.CardView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.CardView.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.CardView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.CardView.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.Palette.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.Palette.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.Palette.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.Palette.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.RecyclerView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.RecyclerView.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.RecyclerView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.RecyclerView.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Vector.Drawable.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Animated.Vector.Drawable.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.AppCompat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.AppCompat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.AppCompat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.AppCompat.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Design.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Design.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Design.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Design.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.v7.MediaRouter.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.MediaRouter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.v7.MediaRouter.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.MediaRouter.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Android.Support.Exif.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Exif.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Android.Support.Exif.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Exif.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.targets'))" />
</Target>
<Import Project="..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets" Condition="Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Annotations.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Core.Common.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Core.Common.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.0.1\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Common.targets')" />
<Import Project="..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets" Condition="Exists('..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.0.0\build\MonoAndroid80\Xamarin.Android.Arch.Lifecycle.Runtime.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Compat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Compat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.UI.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Core.UI.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.UI.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.Utils.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Core.Utils.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Core.Utils.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Fragment.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Fragment.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Fragment.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Media.Compat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Media.Compat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Media.Compat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Transition.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Transition.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Transition.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Transition.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v4.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v4.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v4.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v4.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.CardView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.CardView.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.CardView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.CardView.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.Palette.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.Palette.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.Palette.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.Palette.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.RecyclerView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.RecyclerView.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.RecyclerView.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.RecyclerView.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Vector.Drawable.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Animated.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.AppCompat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.AppCompat.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.AppCompat.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.AppCompat.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Design.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Design.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Design.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Design.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.v7.MediaRouter.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.MediaRouter.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.MediaRouter.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.v7.MediaRouter.targets')" />
<Import Project="..\packages\Xamarin.Android.Support.Exif.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Exif.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Exif.26.1.0.1\build\MonoAndroid80\Xamarin.Android.Support.Exif.targets')" />
<Import Project="..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.targets" Condition="Exists('..\packages\Xamarin.Build.Download.0.4.9\build\Xamarin.Build.Download.targets')" />
<Import Project="..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.5.0.280555\build\netstandard1.0\Xamarin.Forms.targets')" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Com.Airbnb.Android.Lottie" version="2.5.4" targetFramework="monoandroid81" />
<package id="Microsoft.CSharp" version="4.5.0" targetFramework="monoandroid81" />
<package id="Microsoft.NETCore.Platforms" version="2.1.0" targetFramework="monoandroid81" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="monoandroid81" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="monoandroid81" />
<package id="Rg.Plugins.Popup" version="1.0.4" targetFramework="monoandroid81" />
<package id="System.AppContext" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Collections" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.ComponentModel.TypeConverter" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Console" version="4.3.1" targetFramework="monoandroid81" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Globalization" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.IO" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Linq" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Net.Http" version="4.3.3" targetFramework="monoandroid80" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Reflection" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.Serialization.Formatters" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="monoandroid80" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="monoandroid80" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Threading" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="monoandroid80" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="monoandroid80" />
<package id="UXDivers.Artina.Shared" version="2.0.35" targetFramework="monoandroid80" />
<package id="UXDivers.Artina.Shared.Base" version="2.0.35" targetFramework="monoandroid80" />
<package id="UXDivers.Effects" version="0.6.3" targetFramework="monoandroid80" />
<package id="Xam.Plugins.Settings" version="2.5.8" targetFramework="monoandroid80" />
<package id="Xamarin.Android.Arch.Core.Common" version="1.0.0.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Arch.Lifecycle.Common" version="1.0.3.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Arch.Lifecycle.Runtime" version="1.0.3.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Annotations" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Compat" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Core.UI" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Core.Utils" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Design" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Exif" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Fragment" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Media.Compat" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Transition" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v4" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v7.CardView" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v7.Palette" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="27.0.2.1" targetFramework="monoandroid81" />
<package id="Xamarin.Build.Download" version="0.4.11" targetFramework="monoandroid81" />
<package id="Xamarin.FFImageLoading" version="2.4.2.832" targetFramework="monoandroid81" />
<package id="Xamarin.FFImageLoading.Forms" version="2.4.2.832" targetFramework="monoandroid81" />
<package id="Xamarin.FFImageLoading.Transformations" version="2.4.2.832" targetFramework="monoandroid81" />
<package id="Xamarin.Forms" version="3.0.0.561731" targetFramework="monoandroid81" />
</packages>
\ No newline at end of file
using Newtonsoft.Json;
using System;
using System.ComponentModel;
using System.Globalization;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("article")]
public class Article : ObservableEntityData
{
[JsonProperty("title", Required = Required.Always)]
public string Title { get; set; }
[JsonProperty("excerpt")]
public string Excerpt { get; set; }
[JsonProperty("body")]
public string Body { get; set; }
[JsonProperty("photo")]
public string Photo { get; set; }
[JsonProperty("published")]
public string Date { get; set; }
public string ExcerptCompress => Excerpt == null ? "..." : Excerpt.Substring(0, Math.Min(80, Excerpt.Length)).Length<80 ? Excerpt : Excerpt.Substring(0, Excerpt.Substring(0, 80).LastIndexOf(" ")) + ((Excerpt.Length>80) ? "..." : "" );
}
}
using System;
using Newtonsoft.Json;
namespace inutralia
{
public class BoolConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(((bool)value) ? 1 : 0);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return reader.Value.ToString() == "1";
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(bool);
}
}
}
using System;
namespace inutralia.Models
{
/// <summary>
/// Atributo para establecer la ruta de acceso a un tipo de datos. Si no se incluye
/// este atributo, se utilizará el nombre de la clase en minúsculas con una 's' al
/// final
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class DataPathAttribute : Attribute
{
public DataPathAttribute ( string path)
{
DataPath = path;
}
public string DataPath { get; private set; }
}
}

using Newtonsoft.Json;
using System.Collections.Generic;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
public class Day
{
[JsonProperty("ds", Required = Required.Always)]
public string Ds { get; set; }
[JsonProperty("lunchFirst", Required = Required.Always)]
public IList<Recipe> LunchFirst { get; set; }
[JsonProperty("lunchSecond", Required = Required.Always)]
public IList<Recipe> LunchSecond { get; set; }
[JsonProperty("dinnerFirst", Required = Required.Always)]
public IList<Recipe> DinnerFirst { get; set; }
[JsonProperty("dinnerSecond", Required = Required.Always)]
public IList<Recipe> DinnerSecond { get; set; }
public Day()
{
}
}
}
using Newtonsoft.Json;
using System.ComponentModel;
using System;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("generic")]
public class Generic : MenuBase
{
[JsonProperty("ds", Required = Required.Always)]
public string Ds
{ get; set; }
public override string Title
{
get
{
return Ds;
}
}
}
}

using Newtonsoft.Json;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("recipe")]
public class Ingredient : ObservableEntityData
{
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
[JsonProperty("cuantity")]
public string Cuantity { get; set; }
[JsonProperty("order")]
public int Order { get; set; }
public Ingredient()
{
}
}
}
using Newtonsoft.Json;
using System.ComponentModel;
using System;
namespace inutralia.Models
{
/// <summary>
/// Representa el menú personal guardado localmente
/// </summary>
[JsonObject (MemberSerialization.OptIn)]
[DataPath ("LocalMenu")]
public class LocalMenu : Menu
{
private static JsonSerializerSettings _jsonSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace, NullValueHandling = NullValueHandling.Ignore};
/// <summary>
/// Indice del plato seleccionado para un día
/// </summary>
public class MealSelections
{
[JsonProperty ("lf_idx", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue(-1)]
public int LunchFirstIndex = -1;
[JsonProperty ("ls_idx", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue (-1)]
public int LunchSecondIndex = -1;
[JsonProperty ("df_idx", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue (-1)]
public int DinnerFirstIndex = -1;
[JsonProperty ("ds_idx", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue (-1)]
public int DinnerSecondIndex = -1;
}
/// <summary>
/// Platos seleccionados para cada uno de los días
/// </summary>
[JsonProperty("day_selections")]
public MealSelections [] DaySelections;
/// <summary>
/// Identificador del último menú semanal recibido del servidor
/// </summary>
[JsonProperty("last_id")]
public int LastReceivedMenuId;
/// <summary>
/// Copia los datos del menú recibido del servidor
/// </summary>
/// <param name="menu">El recibido del servidor</param>
public void AssignFromMenu ( Menu menu)
{
// Usar el serializador Json para copiar los datos del menú
JsonConvert.PopulateObject (JsonConvert.SerializeObject (menu), this, _jsonSettings);
// Borrar la selección de los platos de cada día
DaySelections = new MealSelections [7];
for (int i = 0; i < 7; i++)
DaySelections[i] = new MealSelections ();
// Asignar último menú recibido
LastReceivedMenuId = menu.Id;
}
}
}
using Newtonsoft.Json;
using System.ComponentModel;
using System;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("menu")]
public class Menu : MenuBase
{
[JsonProperty("recomendation", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string Recomendation
{ get; set; }
[JsonProperty("intro", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string Intro
{ get; set; }
public override string Title
{
get
{
return "Mi menú personalizado";
}
}
public Menu()
{
}
}
}
using Newtonsoft.Json;
using System.Collections.Generic;
using System.ComponentModel;
namespace inutralia.Models
{
public abstract class MenuBase : ObservableEntityData
{
public abstract string Title { get; }
[JsonProperty("days")]
public IList<Day> Days
{ get; set; }
[JsonProperty("recBreakfastBase")]
[DefaultValue("")]
public string RecBreakfastBase
{ get; set; }
[JsonProperty("recBreakfastExt")]
[DefaultValue("")]
public string RecBreakfastExt
{ get; set; }
[JsonProperty("recMorningBase")]
[DefaultValue("")]
public string RecMorningBase
{ get; set; }
[JsonProperty("recMorningExt")]
[DefaultValue("")]
public string RecMorningExt
{ get; set; }
[JsonProperty("recAfternoonBase")]
[DefaultValue("")]
public string RecAfternoonBase
{ get; set; }
[JsonProperty("recAfternoonExt")]
[DefaultValue("")]
public string RecAfternoonExt
{ get; set; }
[JsonProperty("recGeneralBase")]
[DefaultValue("")]
public string RecGeneralBase
{ get; set; }
[JsonProperty("recGeneralExt")]
[DefaultValue("")]
public string RecGeneralExt
{ get; set; }
public string resume => "<br><div style='background-color:#62b9ae; overflow: auto; width:100%; text-align:center'><h3 style='color:#FFFFFF'> DESAYUNO </h3></div><br>" + RecBreakfastBase + "<br>" + RecBreakfastExt +
"<br><div style='background-color:#62b9ae; overflow: auto; width:100%; text-align:center'><h3 style='color:#FFFFFF'> MEDIA MAÑANA </h3></div><br>" + RecMorningBase + "<br>" + RecMorningExt +
"<br><div style='background-color:#62b9ae; overflow: auto; width:100%; text-align:center'><h3 style='color:#FFFFFF'> MERIENDA </h3></div><br>" + RecAfternoonBase + "<br>" + RecAfternoonExt +
"<br><div style='background-color:#62b9ae; overflow: auto; width:100%; text-align:center'><h3 style='color:#FFFFFF'> CONSEJOS GENERALES </h3></div><br>" + RecGeneralBase + "<br>" + RecGeneralExt ;
}
}
\ No newline at end of file
using inutralia.Abstractions;
using MvvmHelpers;
using Newtonsoft.Json;
namespace inutralia.Models
{
/// <summary>
/// A type that fulfills IIdentifiableEntity and is also observable
/// </summary>
public class ObservableEntityData : ObservableObject, IIdentifiableEntity
{
public ObservableEntityData ()
{
// Los identificadores negativos indican que la entidad es nueva y no
// existe por tanto en la base de datos
Id = -1;
}
[JsonProperty ("id", Required = Required.Always)]
public int Id { get; set; }
}
}
using Newtonsoft.Json;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("profile")]
public class Profile : ObservableEntityData
{
[JsonProperty("code")]
[DefaultValue("")]
public string Code { get; set; }
[JsonProperty("age")]
[DefaultValue(0)]
public int Age { get; set; }
[JsonProperty("gender")]
[DefaultValue('M')]
public char Gender { get; set; }
[JsonProperty("height")]
[DefaultValue(0)]
public int Height { get; set; }
[JsonProperty("weight")]
[DefaultValue(0)]
//public int _Weight;
//public int Weight { get { return _Weight;} set { SetProperty(ref _Weight,value);} }
public int Weight { get; set; }
[JsonProperty("physical")]
[DefaultValue(0)]
public int Physical { get; set; }
[JsonProperty("menopause")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Menopause { get; set; }
[JsonProperty("pregnancy")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Pregnancy { get; set; }
[JsonProperty("lactation")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Lactation { get; set; }
[JsonProperty("celiac")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Celiac { get; set; }
[JsonProperty("lactose")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Lactose { get; set; }
[JsonProperty("diabetes")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Diabetes { get; set; }
[JsonProperty("cholesterol")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Cholesterol { get; set; }
[JsonProperty("hypertension")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Hypertension { get; set; }
[JsonProperty("triglycerides")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Triglycerides { get; set; }
[JsonProperty("cv")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Cv { get; set; }
[JsonProperty("al_fish")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Al_fish { get; set; }
[JsonProperty("al_egg")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Al_egg { get; set; }
[JsonProperty("al_nuts")]
[JsonConverter(typeof(BoolConverter))]
[DefaultValue("0")]
public bool Al_nuts { get; set; }
[JsonProperty("preference")]
[DefaultValue(0)]
public int Preference { get; set; }
public Profile()
{
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("inutralia.Models")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SETI Consultyn SL")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("SETI Consultyn SL")]
[assembly: AssemblyTrademark("SETI Consultyn SL")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]

using Newtonsoft.Json;
using System.Collections.Generic;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("recipe")]
public class Recipe : ObservableEntityData
{
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
[JsonProperty("shortName")]
public string ShortName { get; set; }
[JsonProperty("excerpt")]
public string Excerpt { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("image")]
public string Image { get; set; }
[JsonProperty("time")]
public int Time { get; set; }
[JsonProperty("difficulty")]
public string Difficulty { get; set; }
[JsonProperty("energy")]
public string Energy { get; set; }
[JsonProperty("protein")]
public string Protein { get; set; }
[JsonProperty("carbohydrates")]
public string Carbohydrates { get; set; }
[JsonProperty("lipids")]
public string Lipids { get; set; }
[JsonProperty("fiber")]
public string Fiber { get; set; }
[JsonProperty("cholesterol")]
public string Cholesterol { get; set; }
[JsonProperty("ingredients")]
public IList<Ingredient> Ingredients { get; set; }
public string ExcerptQuotes => $"\"{Excerpt}\"";
public Recipe()
{
}
}
}
using Newtonsoft.Json;
namespace inutralia.Models
{
[JsonObject (MemberSerialization.OptIn)]
public class RecipeOption : ObservableEntityData
{
[JsonProperty ("name", Required = Required.Always)]
public string Name { get; set; }
public bool Selected { get; set; }
}
}
using Newtonsoft.Json;
using System.Collections.Generic;
namespace inutralia.Models
{
[JsonObject (MemberSerialization.OptIn)]
[DataPath ("options")]
public class RecipeOptionGroup : ObservableEntityData
{
private bool _isExpanded = false;
public bool IsExpanded
{
get
{
return _isExpanded;
}
set
{
_isExpanded = value;
OnPropertyChanged();
}
}
[JsonProperty ("name", Required = Required.Always)]
public string Name { get; set; }
[JsonProperty ("options")]
public IList<RecipeOption> Options { get; set; }
}
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("shoppingList")]
public class ShoppingList : ObservableEntityData
{
[JsonProperty("text", Required = Required.Always)]
public string Text { get; set; }
[JsonProperty("select", Required = Required.Always)]
public bool Select { get; set; }
[JsonProperty("fromMenus", Required = Required.Always)]
public bool FromMenus { get; set; }
}
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace inutralia.Models
{
[JsonObject (MemberSerialization.OptIn)]
[DataPath ("game")]
public class TrivialGame : ObservableEntityData
{
[JsonProperty ("start", Required = Required.Always)]
public string StartDate { get; protected set; }
[JsonProperty ("finish", Required = Required.Always )]
public string FinishDate { get; protected set; }
[JsonProperty ("questions", Required = Required.Always)]
public IList<TrivialQuestion> Questions;
[JsonProperty ("answers", Required = Required.Always)]
public IList<int> Answers;
public string Progress => $"{Answers.Count} / {Questions.Count}";
public string Score
{
get
{
// Si no está todo respondido, no hay puntuación
int n = Answers.Count;
if ( (n < Questions.Count) || (n < 1) )
return "";
// Calcular respuestas correctas
int correctas = 0;
for (int i = 0; i < n; i++)
if (Questions [i].ValidIndex == Answers [i])
correctas++;
// TODO: Otro mecanismo de score ?
int score = (100 * correctas) / n;
return score.ToString();
}
}
public static TrivialGame Create ( IList<TrivialQuestion> questions)
{
TrivialGame game = new TrivialGame ();
game.Questions = questions;
game.Answers = new List<int> ();
game.StartDate = DateTime.Now.ToString();
game.FinishDate = "";
return game;
}
public bool Answer ( int answer)
{
int n = Answers.Count;
if(n < Questions.Count)
{
Answers.Add (answer);
OnPropertyChanged ("Answers");
OnPropertyChanged ("Progress");
OnPropertyChanged ("Score");
return Questions [n].ValidIndex == answer;
} //endif
return false;
}
}
}
using Newtonsoft.Json;
using System.Collections.Generic;
using System.ComponentModel;
namespace inutralia.Models
{
[JsonObject (MemberSerialization.OptIn)]
[DataPath ("trivial")]
public class TrivialQuestion : ObservableEntityData
{
[JsonProperty ("image", DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string Image { get; set; }
[JsonProperty ("text", Required = Required.Always)]
public string Text { get; set; }
[JsonProperty ("options", Required = Required.Always)]
public IList<string> Options { get; set; }
[JsonProperty ("valid", Required = Required.Always)]
public int ValidIndex { get; set; }
}
}

using Newtonsoft.Json;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
namespace inutralia.Models
{
[JsonObject(MemberSerialization.OptIn)]
[DataPath("user")]
public class User : ObservableEntityData
{
public User()
{
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{60318098-AB20-44A8-8B0A-F8914C5D0ECD}</ProjectGuid>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<UseMSBuildEngine>true</UseMSBuildEngine>
<OutputType>Library</OutputType>
<RootNamespace>inutralia.Models</RootNamespace>
<AssemblyName>inutralia.Models</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile78</TargetFrameworkProfile>
<ReleaseVersion>1.5</ReleaseVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="BoolConverter.cs" />
<Compile Include="LocalMenu.cs" />
<Compile Include="MenuBase.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ObservableEntityData.cs" />
<Compile Include="Profile.cs" />
<Compile Include="Ingredient.cs" />
<Compile Include="Menu.cs" />
<Compile Include="Recipe.cs" />
<Compile Include="RecipeOption.cs" />
<Compile Include="RecipeOptionGroup.cs" />
<Compile Include="ShoppingList.cs" />
<Compile Include="TrivialGame.cs" />
<Compile Include="TrivialQuestion.cs" />
<Compile Include="User.cs" />
<Compile Include="Generic.cs" />
<Compile Include="Day.cs" />
<Compile Include="DataPathAttribute.cs" />
<Compile Include="Article.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia.Abstract\inutralia.Abstractions.csproj">
<Project>{ee196ae1-7332-479f-8c2e-b7b6caa873b0}</Project>
<Name>inutralia.Abstractions</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Reference Include="MvvmHelpers, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Refractored.MvvmHelpers.1.3.0\lib\netstandard1.0\MvvmHelpers.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\portable-net45+win8+wp8+wpa81\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="portable45-net45+win8+wp8" />
<package id="Refractored.MvvmHelpers" version="1.3.0" targetFramework="portable45-net45+win8+wp8" />
</packages>
\ No newline at end of file
using System;
using System.Globalization;
namespace inutralia.Utils
{
public static class DateUtilities
{
public static DateTime DateTimefromTimeStamp(int timestamp)
{
DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds(timestamp);
return dtDateTime;
}
public static string formatedDateFromTimeStamp(int timestamp, string format = "dd/MM/YYYY")
{
DateTime time = DateTimefromTimeStamp(timestamp);
string d1 = DateTime.UtcNow.ToString("dd/MM/yyyy");
string d2 = time.ToString("dd/MM/yyyy");
if (d1 == d2)
{
format = "HH:mm";
}
return time.ToString(format);
}
public static Int32 formatedDateToTimeStamp(string date, string format = "dd/mm/YYYY", CultureInfo CI = null)
{
if (CI == null)
{
CI = CultureInfo.CurrentCulture;
}
return formatedDateToTimeStamp(DateTime.ParseExact(date, format, CI));
}
public static Int32 formatedDateToTimeStamp(DateTime date)
{
return (Int32)(date.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("inutralia.Utils")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SETI Consultyn SL")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("SETI Consultyn SL")]
[assembly: AssemblyTrademark("SETI Consultyn SL")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
//[assembly: AssemblyKeyFile("")]
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}</ProjectGuid>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<UseMSBuildEngine>true</UseMSBuildEngine>
<OutputType>Library</OutputType>
<RootNamespace>inutralia.Utils</RootNamespace>
<AssemblyName>inutralia.Utils</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile78</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DateUtilities.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
</Project>
\ No newline at end of file
using System.Diagnostics;
using Foundation;
using UIKit;
using Xamarin.Forms;
using Lottie.Forms.iOS.Renderers;
using FFImageLoading.Forms.Touch;
using UXDivers.Artina.Shared;
namespace inutralia
{
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to application events from iOS.
[Register ("AppDelegate")]
public class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
Forms.Init ();
CachedImageRenderer.Init(); // Initializing FFImageLoading
AnimationViewRenderer.Init(); // Initializing Lottie
GrialKit.Init(new ThemeColors(), "inutralia.GrialLicense");
UIApplication.SharedApplication.SetStatusBarHidden(true, true);
var tint = UIColor.White;
UIButton.AppearanceWhenContainedIn( typeof(UINavigationBar) ).TintColor = tint;
app.SetStatusBarStyle(UIStatusBarStyle.LightContent, true);
//UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes{TextColor = UIColor.White});
UINavigationBar.Appearance.TintColor = UIColor.White;
// Code for starting up the Xamarin Test Cloud Agent
#if ENABLE_TEST_CLOUD
Xamarin.Calabash.Start();
#endif
FormsHelper.ForceLoadingAssemblyContainingType(typeof(UXDivers.Effects.Effects));
FormsHelper.ForceLoadingAssemblyContainingType<UXDivers.Effects.iOS.CircleEffect>();
LoadApplication (new App ());
return base.FinishedLaunching (app, options);
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
MegTe6XsLKoqV9y3DgM76kRW5np71Jl11PclHLQCxAK9spE2XOCFEt+9KdOusb8RJrBlHh8Bj7tBUHWjopm9ulBEvy4Q5/iagzCKAe0jd7CEkvk3xm0nJKabq13tUgBBDYykX/hlaDPHqs6re4FRiK8kTolSfzyg8ZNXlKbg5gOoiVy/huNfAgqRN7RXCojC0bYk5oKhemCAu5ShdlQsqETCvQSjEsn21fwbIZVQd7RQSn2OWg7iS1Qw1hXgzmU+pC24aY4J9yDfCN5JaeQq8X1k9l/21cz1ZG3EDE6kbXbUzpVVvx7o1uNMHafQ5/qdWFUYaAx75rEWO5oBkV3Kw0hLVX8BOGF9V+lzkGHa0Z3eUiJ0H/gzdg2qF1+FaF8LCdvXpMmmF2qpSuq3pVL9MPXCubAGV6hQ7xhW5HG+Y00dfSa3/RqFO3WNR/wvxqQvlgi/qQ0jUk+7FEuwc0dJMxAthWFMktwErILnCxNYZoPqNvmHDoPhABFlQn8+LCJ1PVhqqNVkh4gv3VgQkdw7tUP/OCg5tU7fiwiCDlUrO9iwfVu7rebNWpHgIofl86Vv#ddAMEG3NvqCcwSSwMwI7RVhxOTLX9sDU2BycamfjbgreRWjeD/1vsbiB6lhnzivr+wfIbpr5fM3JwkrpaIiE8cCoQRDpTyEsvF6G478wBMTOGkkybvkEV0TJpNBLvY6ahv68hWcCnVAmWrK4zanFtr20T7XaQmc+WD/cyG6G6to=
\ No newline at end of file
/*
// Helpers/Settings.cs This file was automatically added when you installed the Settings Plugin. If you are not using a PCL then comment this file back in to use it.
using Plugin.Settings;
using Plugin.Settings.Abstractions;
namespace inutralia.Helpers
{
/// <summary>
/// This is the Settings static class that can be used in your Core solution or in any
/// of your client applications. All settings are laid out the same exact way with getters
/// and setters.
/// </summary>
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
#region Setting Constants
private const string SettingsKey = "settings_key";
private static readonly string SettingsDefault = string.Empty;
#endregion
public static string GeneralSettings
{
get
{
return AppSettings.GetValueOrDefault<string>(SettingsKey, SettingsDefault);
}
set
{
AppSettings.AddOrUpdateValue<string>(SettingsKey, value);
}
}
}
}*/
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.seti.inutralia.inutralia</string>
<key>CFBundleShortVersionString</key>
<string>121</string>
<key>CFBundleVersion</key>
<string>1.2.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
<string>8.2</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>XSAppIconAssets</key>
<string>Resources/Images.xcassets/AppIcons.appiconset</string>
<key>UIAppFonts</key>
<array>
<string>ionicons.ttf</string>
<string>grialshapes.ttf</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>uxdivers.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>grialkit.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>Custom PropertyNSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>setisl.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
<key>grialkit.com</key>
<dict/>
</dict>
<key>UILaunchImages</key>
<array>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-667h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{375, 667}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-736h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{414, 736}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>7.0</string>
<key>UILaunchImageName</key>
<string>Default-568h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{320, 568}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>6.0</string>
<key>UILaunchImageName</key>
<string>Default</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{320, 480}</string>
</dict>
</array>
<key>UILaunchStoryboardName</key>
<string>Splash</string>
<key>UIStatusBarStyle</key>
<string>Default</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIRequiresFullScreen</key>
<true/>
<key>CFBundleName</key>
<string>iNutralia</string>
<key>UIStatusBarHidden</key>
<true/>
</dict>
</plist>
using UIKit;
namespace inutralia
{
public class Application
{
// This is the main entry point of the application.
static void Main (string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main (args, null, "AppDelegate");
}
}
}
using System.Reflection;
using Xamarin.Forms;
using inutralia;
[assembly: AssemblyTitle (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit (iOS)")]
[assembly: AssemblyConfiguration (AssemblyGlobal.Configuration)]
[assembly: AssemblyCompany (AssemblyGlobal.Company)]
[assembly: AssemblyProduct (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit (iOS)")]
[assembly: AssemblyCopyright (AssemblyGlobal.Copyright)]
// Custom renderer definition
[assembly: ExportRenderer(typeof(UXDivers.Artina.Shared.CircleImage), typeof(UXDivers.Artina.Shared.ImageCircleRenderer))]
[assembly: ExportRenderer(typeof(EntryCell), typeof(UXDivers.Artina.Shared.ArtinaEntryCellRenderer))]
[assembly: ExportRenderer(typeof(ImageCell), typeof(UXDivers.Artina.Shared.ArtinaImageCellRenderer))]
[assembly: ExportRenderer(typeof(SwitchCell), typeof(UXDivers.Artina.Shared.ArtinaSwitchCellRenderer))]
[assembly: ExportRenderer(typeof(TableView), typeof(UXDivers.Artina.Shared.ArtinaTableRenderer))]
[assembly: ExportRenderer(typeof(TextCell), typeof(UXDivers.Artina.Shared.ArtinaTextCellRenderer))]
[assembly: ExportRenderer(typeof(ViewCell), typeof(UXDivers.Artina.Shared.ArtinaViewCellRenderer))]
[assembly: ExportRenderer(typeof(Entry), typeof(UXDivers.Artina.Shared.ArtinaEntryRenderer))]
[assembly: ExportRenderer(typeof(Picker), typeof(UXDivers.Artina.Shared.ArtinaPickerRenderer))]
[assembly: ExportRenderer(typeof(DatePicker), typeof(UXDivers.Artina.Shared.ArtinaDatePickerRenderer))]
[assembly: ExportRenderer(typeof(TimePicker), typeof(UXDivers.Artina.Shared.ArtinaTimePickerRenderer))]
#pragma warning disable 219
internal static class WorkaroundLoadingCustomRenderersFromExternalAssemblies {
static WorkaroundLoadingCustomRenderersFromExternalAssemblies()
{
var a = new UXDivers.Artina.Shared.ArtinaEntryRenderer();
}
}
#pragma warning restore 219
using Xamarin.Forms;
using UXDivers.Artina.Shared;
namespace UXDivers.Artina.Grial
{
public sealed class LoginRenderer: ArtinaPageRenderer
{
protected override string GetTallImage(){
return "login_background-568h.jpg";
}
protected override string GetStandardImage(){
return "login_background.jpg";
}
}
}
\ No newline at end of file
{
"images": [
{
"filename": "Icon-Small-40.png",
"size": "20x20",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-60.png",
"size": "20x20",
"scale": "3x",
"idiom": "iphone"
},
{
"filename": "Icon-Small@2x.png",
"size": "29x29",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-Small@3x.png",
"size": "29x29",
"scale": "3x",
"idiom": "iphone"
},
{
"filename": "Icon-Small-40@2x.png",
"size": "40x40",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-Small-40@3x.png",
"size": "40x40",
"scale": "3x",
"idiom": "iphone"
},
{
"filename": "Icon-60@2x.png",
"size": "60x60",
"scale": "2x",
"idiom": "iphone"
},
{
"filename": "Icon-60@3x.png",
"size": "60x60",
"scale": "3x",
"idiom": "iphone"
},
{
"size": "20x20",
"scale": "1x",
"idiom": "ipad"
},
{
"filename": "Icon-Small-40.png",
"size": "20x20",
"scale": "2x",
"idiom": "ipad"
},
{
"filename": "Icon-Small.png",
"size": "29x29",
"scale": "1x",
"idiom": "ipad"
},
{
"filename": "Icon-Small@2x.png",
"size": "29x29",
"scale": "2x",
"idiom": "ipad"
},
{
"filename": "Icon-Small-40.png",
"size": "40x40",
"scale": "1x",
"idiom": "ipad"
},
{
"filename": "Icon-Small-40@2x.png",
"size": "40x40",
"scale": "2x",
"idiom": "ipad"
},
{
"filename": "icon-167.png",
"size": "83.5x83.5",
"scale": "2x",
"idiom": "ipad"
},
{
"filename": "Icon-76.png",
"size": "76x76",
"scale": "1x",
"idiom": "ipad"
},
{
"filename": "Icon-76@2x.png",
"size": "76x76",
"scale": "2x",
"idiom": "ipad"
},
{
"filename": "iTunesArtwork@2x.png",
"size": "1024x1024",
"scale": "1x",
"idiom": "ios-marketing"
},
{
"role": "notificationCenter",
"filename": "Icon-48.png",
"size": "24x24",
"subtype": "38mm",
"scale": "2x",
"idiom": "watch"
},
{
"role": "notificationCenter",
"filename": "Icon-55.png",
"size": "27.5x27.5",
"subtype": "42mm",
"scale": "2x",
"idiom": "watch"
},
{
"role": "companionSettings",
"filename": "Icon-58.png",
"size": "29x29",
"scale": "2x",
"idiom": "watch"
},
{
"role": "companionSettings",
"filename": "Icon-87.png",
"size": "29x29",
"scale": "3x",
"idiom": "watch"
},
{
"role": "appLauncher",
"filename": "Icon-80.png",
"size": "40x40",
"subtype": "38mm",
"scale": "2x",
"idiom": "watch"
},
{
"role": "longLook",
"size": "44x44",
"subtype": "42mm",
"scale": "2x",
"idiom": "watch"
},
{
"role": "quickLook",
"filename": "Icon-172.png",
"size": "86x86",
"subtype": "38mm",
"scale": "2x",
"idiom": "watch"
},
{
"role": "quickLook",
"filename": "Icon-196.png",
"size": "98x98",
"subtype": "42mm",
"scale": "2x",
"idiom": "watch"
},
{
"filename": "Icon-16.png",
"size": "16x16",
"scale": "1x",
"idiom": "mac"
},
{
"filename": "Icon-32.png",
"size": "16x16",
"scale": "2x",
"idiom": "mac"
},
{
"filename": "Icon-32.png",
"size": "32x32",
"scale": "1x",
"idiom": "mac"
},
{
"filename": "Icon-64.png",
"size": "32x32",
"scale": "2x",
"idiom": "mac"
},
{
"filename": "Icon-128.png",
"size": "128x128",
"scale": "1x",
"idiom": "mac"
},
{
"filename": "Icon-256.png",
"size": "128x128",
"scale": "2x",
"idiom": "mac"
},
{
"filename": "Icon-256.png",
"size": "256x256",
"scale": "1x",
"idiom": "mac"
},
{
"filename": "Icon-512.png",
"size": "256x256",
"scale": "2x",
"idiom": "mac"
},
{
"filename": "iTunesArtwork.png",
"size": "512x512",
"scale": "1x",
"idiom": "mac"
},
{
"filename": "iTunesArtwork@2x.png",
"size": "512x512",
"scale": "2x",
"idiom": "mac"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}
\ No newline at end of file
{
"images": [
{
"idiom": "universal"
},
{
"scale": "1x",
"idiom": "universal"
},
{
"scale": "2x",
"idiom": "universal"
},
{
"scale": "3x",
"idiom": "universal"
},
{
"idiom": "iphone"
},
{
"scale": "1x",
"idiom": "iphone"
},
{
"scale": "2x",
"idiom": "iphone"
},
{
"subtype": "retina4",
"scale": "2x",
"idiom": "iphone"
},
{
"scale": "3x",
"idiom": "iphone"
},
{
"idiom": "ipad"
},
{
"scale": "1x",
"idiom": "ipad"
},
{
"scale": "2x",
"idiom": "ipad"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}
\ No newline at end of file
{"v":"4.5.9","fr":25,"ip":0,"op":37,"w":1236,"h":1080,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"G iso 4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-108.529],[-59.963,-108.529],[-59.963,-108.25],[-111.359,-108.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-58.529],[-59.963,-58.529],[-59.821,155.028],[-111.217,155.028]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":14,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-58.529],[-59.963,-58.529],[-59.821,155.028],[-111.217,155.028]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-78.529],[-59.963,-78.529],[-59.963,56.801],[-111.359,56.801]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-78.529],[-59.963,-78.529],[-59.963,56.801],[-111.359,56.801]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-67.529],[-59.963,-67.529],[-59.963,74.528],[-111.359,74.528]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":22,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-67.529],[-59.963,-67.529],[-59.963,74.528],[-111.359,74.528]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,-68.529],[-59.963,-68.529],[-59.963,68.528],[-111.359,68.528]],"c":true}]},{"t":25}]},"nm":"Path 4","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"mn":"ADBE Vector Group"}],"ip":7,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"G iso 3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,102.793],[-110.86,102.793],[-110.86,154.189],[-111.359,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-106.359,102.793],[121.359,102.793],[121.359,154.189],[-106.359,154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-106.359,102.793],[121.359,102.793],[121.359,154.189],[-106.359,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-113.109,102.793],[107.109,102.793],[107.109,154.189],[-113.109,154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":23,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-113.109,102.793],[107.109,102.793],[107.109,154.189],[-113.109,154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-111.359,102.793],[111.359,102.793],[111.359,154.189],[-111.359,154.189]],"c":true}]},{"t":26}]},"nm":"Path 3","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"mn":"ADBE Vector Group"}],"ip":13,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"G iso 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-59.986],[111.359,-59.962],[59.963,-59.962],[59.963,-59.986],[59.923,-59.986],[59.923,-60],[111.359,-60]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-164.202],[111.359,-164.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-164.202],[111.359,-164.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-146.702],[111.359,-146.689]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-146.702],[111.359,-146.689]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-151.702],[111.359,-151.689]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[59.923,-102.806],[59.923,-151.702],[111.359,-151.689]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-127.359,-102.793],[-127.359,-154.189],[111.359,-154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-127.359,-102.793],[-127.359,-154.189],[111.359,-154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-107.359,-102.793],[-107.359,-154.189],[111.359,-154.189]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-107.359,-102.793],[-107.359,-154.189],[111.359,-154.189]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,-128.491],[111.359,-59.962],[59.963,-59.962],[59.963,-102.793],[-111.359,-102.793],[-111.359,-154.189],[111.359,-154.189]],"c":true}]},{"t":18}]},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"G iso","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[111.609,154.439,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,103.552],[111.359,103.562],[59.904,103.562],[59.904,103.543],[59.963,103.543],[59.963,103.529],[111.359,103.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-30.698],[59.904,-30.689],[59.904,25.707],[59.963,25.698],[59.963,66.029],[111.359,66.029]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-30.698],[59.904,-30.689],[59.904,25.707],[59.963,25.698],[59.963,66.029],[111.359,66.029]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-35.698,-25.698],[-35.698,25.698],[59.963,25.698],[59.963,73.529],[111.359,73.529]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":29,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-35.698,-25.698],[-35.698,25.698],[59.963,25.698],[59.963,73.529],[111.359,73.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-20.698,-25.698],[-20.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":32,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-20.698,-25.698],[-20.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[111.359,0],[111.359,-25.698],[-25.698,-25.698],[-25.698,25.698],[59.963,25.698],[59.963,68.529],[111.359,68.529]],"c":true}]},{"t":35}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[111.609,154.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":19,"op":99,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"cuadrado magenta Outlines","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[622.11,540,0]},"a":{"a":0,"k":[274.364,274.364,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.171,0.171,0.171],"y":[0,0.171,0.171]},"n":["0p667_1_0p171_0","0p667_0p667_0p171_0p171","0p667_0p667_0p171_0p171"],"t":0,"s":[0,100,100],"e":[120,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_0p667_0p167_0p167","0p667_0p667_0p167_0p167"],"t":6,"s":[120,100,100],"e":[95,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,0.667,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0.333,0.333]},"n":["0p667_1_0p333_0","0p667_0p667_0p333_0p333","0p667_0p667_0p333_0p333"],"t":11,"s":[95,100,100],"e":[102,100,100]},{"i":{"x":[0.676,0.676,0.676],"y":[1,0.676,0.676]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p676_1_0p167_0p167","0p676_0p676_0p167_0p167","0p676_0p676_0p167_0p167"],"t":15,"s":[102,100,100],"e":[99,100,100]},{"i":{"x":[0.676,0.676,0.676],"y":[1,0.676,0.676]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p676_1_0p167_0p167","0p676_0p676_0p167_0p167","0p676_0p676_0p167_0p167"],"t":20,"s":[99,100,100],"e":[100,100,100]},{"t":24}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-274.114,-274.114],[274.114,-274.114],[274.114,274.114],[-274.114,274.114]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.855,0.071,0.373,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[274.364,274.364],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":99,"st":0,"bm":0,"sr":1}]}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11762" systemVersion="16C68" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES" launchScreen="YES" useAutolayout="YES" useTraitCollections="YES" initialViewController="23">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<scene sceneID="22">
<objects>
<viewController id="23" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="20"/>
<viewControllerLayoutGuide type="bottom" id="21"/>
</layoutGuides>
<view key="view" contentMode="center" id="24">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" colorSpace="calibratedWhite" white="1" alpha="1"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="27" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES" image="image_default_empresa.png">
<rect key="frame" x="180" y="236" width="240" height="128"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinX="YES" flexibleMaxY="YES" flexibleMinY="YES"/>
</imageView>
</subviews>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="25" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="60" y="85"/>
</scene>
</scenes>
<resources>
<image name="splash.png" width="274" height="83"/>
<image name="walkthrough_generic_phone_bg.png" width="375" height="667"/>
<image name="signup_bg.jpg" width="371.5" height="661"/>
<image name="social_header_bg_1.jpg" width="371.5" height="362.5"/>
<image name="welcome_bg.jpg" width="375" height="667"/>
<image name="hamburguer_icon.png" width="18" height="12"/>
<image name="welcome_bg_tablet.jpg" width="1024" height="1024"/>
<image name="login_bg.jpg" width="375" height="667"/>
<image name="pass_recovery_bg.jpg" width="371.5" height="661"/>
<image name="user_profile_0.jpg" width="102" height="102"/>
<image name="user_profile_1.jpg" width="100" height="100"/>
<image name="social_header_bg_0.jpg" width="375" height="366"/>
<image name="generic_bg_image.jpg" width="375" height="667"/>
<image name="login_bg_tablet.jpg" width="1024" height="1024"/>
<image name="pass_recovery_bg_tablet.jpg" width="1024" height="1024"/>
<image name="logoalli.gif" width="432" height="288"/>
<image name="img1.png" width="286" height="241"/>
<image name="img2.png" width="286" height="241"/>
<image name="img3.png" width="286" height="241"/>
<image name="img4.png" width="286" height="241"/>
<image name="icon1.png" width="45" height="48"/>
<image name="icon2.png" width="45" height="48"/>
<image name="icon3.png" width="45" height="48"/>
<image name="icon4.png" width="45" height="48"/>
<image name="iconSalir.png" width="85" height="68"/>
<image name="img1_square.png" width="286" height="286"/>
<image name="img2_square.png" width="286" height="286"/>
<image name="img3_square.png" width="286" height="286"/>
<image name="img4_square.png" width="286" height="286"/>
<image name="inutralia.png" width="156" height="65"/>
<image name="alli.png" width="432" height="288"/>
<image name="image_default_empresa.png" width="289" height="192"/>
</resources>
</document>
\ No newline at end of file
using System.Collections.Generic;
using Xamarin.Forms;
using UXDivers.Artina.Shared;
namespace inutralia
{
internal class ThemeColors : ThemeColorsBase
{
private readonly static Dictionary<string, Color> _themeColors = new Dictionary<string, Color>
{
{ "AccentColor", Color.FromHex("#FFa2c300") },
{ "BaseTextColor", Color.FromHex("#666666") },
{ "InverseTextColor", Color.White },
{ "BrandColor", Color.FromHex("#ad1457") },
{ "BrandNameColor", Color.FromHex("#FFFFFF") },
{ "BaseLightTextColor", Color.FromHex("#7b7b7b") },
{ "OverImageTextColor", Color.FromHex("#000000") },
{ "EcommercePromoTextColor", Color.FromHex("#FFFFFF") },
{ "SocialHeaderTextColor", Color.FromHex("#666666") },
{ "ArticleHeaderBackgroundColor", Color.FromHex("#F1F3F5") },
{ "CustomNavBarTextColor", Color.FromHex("#FFFFFF") },
{ "ListViewItemTextColor", Color.FromHex("#666666") },
{ "AboutHeaderBackgroundColor", Color.FromHex("#FFFFFF") },
{ "BasePageColor", Color.FromHex("#FFFFFF") },
{ "BaseTabbedPageColor", Color.FromHex("#fafafa") },
{ "MainWrapperBackgroundColor", Color.FromHex("#EFEFEF") },
{ "CategoriesListIconColor", Color.FromHex("#55000000") },
{ "DashboardIconColor", Color.FromHex("#FFFFFF") },
{ "ComplementColor", Color.FromHex("#d480d6") },
{ "TranslucidBlack", Color.FromHex("#44000000") },
{ "TranslucidWhite", Color.FromHex("#22ffffff") },
{ "OkColor", Color.FromHex("#22c064") },
{ "ErrorColor", Color.Red },
{ "WarningColor", Color.FromHex("#ffc107") },
{ "NotificationColor", Color.FromHex("#1274d1") },
{ "SaveButtonColor", Color.FromHex("#22c064") },
{ "DeleteButtonColor", Color.FromHex("#D50000") },
{ "LabelButtonColor", Color.FromHex("#ffffff") },
{ "PlaceholderColor", Color.FromHex("#22ffffff") },
{ "PlaceholderColorEntry", Color.FromHex("#FFFFFF") },
{ "RoundedLabelBackgroundColor", Color.FromHex("#525ABB") },
{ "MainMenuHeaderBackgroundColor", Color.FromHex("#384F63") },
{ "MainMenuBackgroundColor", Color.FromHex("#F1F3F5") },
{ "MainMenuSeparatorColor", Color.Transparent },
{ "MainMenuTextColor", Color.FromHex("#666666") },
{ "MainMenuIconColor", Color.FromHex("#666666") },
{ "ListViewSeparatorColor", Color.FromHex("#D3D3D3") },
{ "BaseSeparatorColor", Color.FromHex("#7b7b7b") },
{ "ChatRightBalloonBackgroundColor", Color.FromHex("#525ABB") },
{ "ChatBalloonFooterTextColor", Color.FromHex("#FFFFFF") },
{ "ChatRightTextColor", Color.FromHex("#FFFFFF") },
{ "ChatLeftTextColor", Color.FromHex("#FFFFFF") }
};
public ThemeColors() : base(_themeColors) {}
}
}
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<ProjectGuid>{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>inutralia</RootNamespace>
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<AssemblyName>inutralia.iOS</AssemblyName>
<ReleaseVersion>1.5</ReleaseVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
<DefineConstants>DEBUG; </DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>i386, x86_64</MtouchArch>
<MtouchLink>None</MtouchLink>
<MtouchDebug>True</MtouchDebug>
<IOSDebugOverWiFi>False</IOSDebugOverWiFi>
<IOSDebuggerPort>10000</IOSDebuggerPort>
<CodesignProvision>
</CodesignProvision>
<CodesignKey>iPhone Developer</CodesignKey>
<CodesignExtraArgs />
<CodesignResourceRules />
<CodesignEntitlements />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhone\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<MtouchArch>ARMv7, ARM64</MtouchArch>
<ConsolePause>false</ConsolePause>
<CodesignKey>iPhone Developer</CodesignKey>
<OptimizePNGs>false</OptimizePNGs>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<MtouchArch>i386</MtouchArch>
<ConsolePause>false</ConsolePause>
<MtouchLink>None</MtouchLink>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhone\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>ARMv7, ARM64</MtouchArch>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchDebug>true</MtouchDebug>
<MtouchI18n>
</MtouchI18n>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'PlayerDebug|iPhone' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhone\Debug</OutputPath>
<DefineConstants>DEBUG; PLAYER</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>ARMv7, ARM64</MtouchArch>
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
<CodesignKey>iPhone Developer</CodesignKey>
<MtouchI18n>
</MtouchI18n>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'PlayerDebug|iPhoneSimulator' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
<DefineConstants>DEBUG; PLAYER</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<MtouchArch>i386</MtouchArch>
<MtouchLink>None</MtouchLink>
<MtouchDebug>true</MtouchDebug>
</PropertyGroup>
<ItemGroup>
<Reference Include="Calabash, Version=21.5.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.TestCloud.Agent.0.21.5\lib\Xamarin.iOS\Calabash.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\Xamarin.iOS10\FFImageLoading.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.4.2.832\lib\Xamarin.iOS10\FFImageLoading.Forms.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms.Platform, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.4.2.832\lib\Xamarin.iOS10\FFImageLoading.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Platform, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\Xamarin.iOS10\FFImageLoading.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Transformations, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Transformations.2.4.2.832\lib\Xamarin.iOS10\FFImageLoading.Transformations.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms, Version=2.5.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.4\lib\xamarinios10\Lottie.Forms.dll</HintPath>
</Reference>
<Reference Include="Lottie.iOS, Version=2.5.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.iOS.Lottie.2.5.4\lib\xamarinios10\Lottie.iOS.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings.Abstractions, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\Xamarin.IOS\Rg.Plugins.Popup.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup.IOS, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\Xamarin.IOS\Rg.Plugins.Popup.IOS.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\Xamarin.IOS\Rg.Plugins.Popup.Platform.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="UXDivers.Artina.Shared, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\Xamarin.iOS10\UXDivers.Artina.Shared.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\Xamarin.iOS10\UXDivers.Artina.Shared.Base.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base.iOS, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\Xamarin.iOS10\UXDivers.Artina.Shared.Base.iOS.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.iOS, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\Xamarin.iOS10\UXDivers.Artina.Shared.iOS.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects, Version=1.0.6558.30269, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\Xamarin.iOS10\UXDivers.Effects.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects.iOS, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\Xamarin.iOS10\UXDivers.Effects.iOS.dll</HintPath>
</Reference>
<Reference Include="WebP.Touch, Version=1.0.6628.22311, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
<Reference Include="Xamarin.iOS" />
<Reference Include="System.Xml.Linq" />
<Reference Include="SkiaSharp">
<HintPath>..\packages\SkiaSharp.1.56.1\lib\XamariniOS\SkiaSharp.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Contents.json">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-60%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-60%403x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-60.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-72.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-72%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-76.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-76%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-40.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-40%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-40%403x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-50.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small-50%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-Small%403x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\iTunesArtwork%402x.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\iTunesArtwork.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-256.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-128.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-64.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-32.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-16.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-196.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-172.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-88.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-80.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-87.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-58.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-55.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\Icon-48.png">
<Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Resources\Images.xcassets\AppIcons.appiconset\icon-167.png">
<Visible>false</Visible>
</ImageAsset>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="Info.plist" />
<None Include="Entitlements.plist" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Compile Include="Helpers\Settings.cs" />
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />
<Compile Include="ThemeColors.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
<ItemGroup>
<BundleResource Include="Resources\hamburguer_icon%402x.png" />
<BundleResource Include="Resources\grialshapes.ttf" />
<BundleResource Include="Resources\fontawesome-webfont.ttf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</BundleResource>
<BundleResource Include="Resources\ionicons.ttf" />
<BundleResource Include="Resources\splash%402x.png" />
<BundleResource Include="Resources\grial_animation.json" />
<BundleResource Include="Resources\hamburguer_icon.png" />
<BundleResource Include="Resources\img1.png" />
<BundleResource Include="Resources\img2.png" />
<BundleResource Include="Resources\img3.png" />
<BundleResource Include="Resources\img4.png" />
<BundleResource Include="Resources\icon1.png" />
<BundleResource Include="Resources\icon2.png" />
<BundleResource Include="Resources\icon3.png" />
<BundleResource Include="Resources\icon4.png" />
<BundleResource Include="Resources\iconSalir.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia\inutralia.csproj">
<Project>{7041522B-6406-4AA7-8C6D-8AD1661DD392}</Project>
<Name>inutralia</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="GrialLicense" />
</ItemGroup>
<ItemGroup>
<InterfaceDefinition Include="Splash.storyboard" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\inutralia.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\logo_empresa.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\image_default_empresa.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\icon_info.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="icon_filter.png" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\icon_filter.png" />
</ItemGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets'))" />
</Target>
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard2.0\Xamarin.Forms.targets')" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Com.Airbnb.iOS.Lottie" version="2.5.4" targetFramework="xamarinios10" />
<package id="Com.Airbnb.Xamarin.Forms.Lottie" version="2.5.4" targetFramework="xamarinios10" />
<package id="Microsoft.CSharp" version="4.5.0" targetFramework="xamarinios10" />
<package id="Microsoft.NETCore.Platforms" version="2.1.0" targetFramework="xamarinios10" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="xamarinios10" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="xamarinios10" />
<package id="Rg.Plugins.Popup" version="1.0.4" targetFramework="xamarinios10" />
<package id="System.AppContext" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Collections" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.ComponentModel.TypeConverter" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Console" version="4.3.1" targetFramework="xamarinios10" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Globalization" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.IO" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Linq" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Net.Http" version="4.3.3" targetFramework="xamarinios10" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Reflection" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.Serialization.Formatters" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="xamarinios10" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="xamarinios10" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Threading" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="xamarinios10" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="xamarinios10" />
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="xamarinios10" />
<package id="UXDivers.Artina.Shared" version="2.0.35" targetFramework="xamarinios10" />
<package id="UXDivers.Artina.Shared.Base" version="2.0.35" targetFramework="xamarinios10" />
<package id="UXDivers.Effects" version="0.6.3" targetFramework="xamarinios10" />
<package id="WebP.Touch" version="1.0.8" targetFramework="xamarinios10" />
<package id="Xam.Plugins.Settings" version="2.5.8" targetFramework="xamarinios10" />
<package id="Xamarin.FFImageLoading" version="2.4.2.832" targetFramework="xamarinios10" />
<package id="Xamarin.FFImageLoading.Forms" version="2.4.2.832" targetFramework="xamarinios10" />
<package id="Xamarin.FFImageLoading.Transformations" version="2.4.2.832" targetFramework="xamarinios10" />
<package id="Xamarin.Forms" version="3.0.0.561731" targetFramework="xamarinios10" />
<package id="Xamarin.TestCloud.Agent" version="0.21.5" targetFramework="xamarinios10" />
</packages>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2015
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia", "inutralia\inutralia.csproj", "{7041522B-6406-4AA7-8C6D-8AD1661DD392}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia.Droid", "inutralia.Droid\inutralia.Droid.csproj", "{B6C3195C-0075-436E-826B-FEF49284DD32}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia.iOS", "inutralia.iOS\inutralia.iOS.csproj", "{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia.Abstractions", "inutralia.Abstract\inutralia.Abstractions.csproj", "{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia.Models", "inutralia.Models\inutralia.Models.csproj", "{60318098-AB20-44A8-8B0A-F8914C5D0ECD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "inutralia.Utils", "inutralia.Utils\inutralia.Utils.csproj", "{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|iPhone = Debug|iPhone
Debug|iPhoneSimulator = Debug|iPhoneSimulator
PlayerDebug|Any CPU = PlayerDebug|Any CPU
PlayerDebug|iPhone = PlayerDebug|iPhone
PlayerDebug|iPhoneSimulator = PlayerDebug|iPhoneSimulator
Release|Any CPU = Release|Any CPU
Release|iPhone = Release|iPhone
Release|iPhoneSimulator = Release|iPhoneSimulator
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|iPhone.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|Any CPU.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|Any CPU.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|iPhone.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|iPhone.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.PlayerDebug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|Any CPU.Build.0 = Release|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|iPhone.ActiveCfg = Release|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|iPhone.Build.0 = Release|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7041522B-6406-4AA7-8C6D-8AD1661DD392}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|iPhone.Build.0 = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|Any CPU.ActiveCfg = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|Any CPU.Build.0 = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|Any CPU.Deploy.0 = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|iPhone.ActiveCfg = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|iPhone.Build.0 = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|iPhoneSimulator.ActiveCfg = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.PlayerDebug|iPhoneSimulator.Build.0 = PlayerDebug|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|Any CPU.Build.0 = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|iPhone.ActiveCfg = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|iPhone.Build.0 = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B6C3195C-0075-436E-826B-FEF49284DD32}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|iPhone.ActiveCfg = Debug|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|iPhone.Build.0 = Debug|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|Any CPU.ActiveCfg = PlayerDebug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|Any CPU.Build.0 = PlayerDebug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|iPhone.ActiveCfg = PlayerDebug|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|iPhone.Build.0 = PlayerDebug|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|iPhoneSimulator.ActiveCfg = PlayerDebug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.PlayerDebug|iPhoneSimulator.Build.0 = PlayerDebug|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|Any CPU.ActiveCfg = Release|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|Any CPU.Build.0 = Release|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|iPhone.ActiveCfg = Release|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|iPhone.Build.0 = Release|iPhone
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{45DA7B47-C579-4BC1-B1E5-97EEA0C669CD}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|iPhone.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|Any CPU.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|Any CPU.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|iPhone.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|iPhone.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.PlayerDebug|iPhoneSimulator.Build.0 = Debug|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|Any CPU.Build.0 = Release|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|iPhone.ActiveCfg = Release|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|iPhone.Build.0 = Release|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|iPhone.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|Any CPU.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|Any CPU.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|iPhone.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|iPhone.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.PlayerDebug|iPhoneSimulator.Build.0 = Debug|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|Any CPU.Build.0 = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|iPhone.ActiveCfg = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|iPhone.Build.0 = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{60318098-AB20-44A8-8B0A-F8914C5D0ECD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|Any CPU.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|iPhone.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|Any CPU.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|Any CPU.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|iPhone.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|iPhone.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.PlayerDebug|iPhoneSimulator.Build.0 = Debug|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|Any CPU.ActiveCfg = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|Any CPU.Build.0 = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|iPhone.ActiveCfg = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|iPhone.Build.0 = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2A2F23F0-D76F-45EC-851B-854DF4BF96C6}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
version = 1.5
EndGlobalSection
EndGlobal
using Xamarin.Forms;
namespace inutralia.API
{
class Constants
{
public static readonly string ApiUrlTemplate =
Device.OnPlatform ("http://i20.inutralia.com/api/v1/{0}?api-key=7745289b-f09c-4e0b-89d1-bb59c599c85e",
"http://i20.inutralia.com/api/v1/{0}?api-key=7745289b-f09c-4e0b-89d1-bb59c599c85e",
"http://i20.inutralia.com/api/v1/{0}?api-key=7745289b-f09c-4e0b-89d1-bb59c599c85e");
// Url redirect a DEL SUPER
public const string ApiUrl = "https://delsuper.es/inutralia?ids=";
}
}
using inutralia.Abstractions;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
namespace inutralia.API
{
/// <summary>
/// Interfaz genérico de comunicación con un Web Service
/// </summary>
public interface IWebService : IDataPersistenceService
{
/// <summary>
/// Borra la información relativa a las credenciales
/// </summary>
void Reset();
/// <summary>
/// Establece las credenciales de acceso a la API
/// </summary>
/// <param name="username">Nombre del usuario accediendo a la API</param>
/// <param name="password">Contraseña del usuario</param>
void CredentialsSet (string username, string password);
/// <summary>
/// Registra un usuario en el servidor
/// </summary>
/// <param name="userName">Nombre del usuario solicitando registro</param>
/// <param name="passWord">Contraseña del usuario solicitando registro</param>
/// <param name="companyCode">Código de la compañía que solicita el registro</param>
Task<HttpStatusCode?> RegisterUser(string userName, string passWord, string companyCode);
/// <summary>
/// Cambia la contraseña del usuario actual
/// </summary>
/// <param name="currPass">Contraseña actual (para verificación)</param>
/// <param name="newPass">Nueva contraseña</param>
Task<bool> PasswordChange(string currPass, string newPass);
/// <summary>
/// Obtiene de forma asíncrona una lista de elementos de cierto tipo
/// </summary>
/// <typeparam name="T">Tipo de datos de cada elemento</typeparam>
/// <param name="path">Path de acceso al recurso de la API</param>
/// <returns>Lista de elementos obtenidos</returns>
Task<List<T>> RefreshListAsync<T>(string path);
/// <summary>
/// Petición directa al WebService
/// </summary>
/// <param name="method">Método HTTP de la petición</param>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="data">Objeto a serializar en la petición</param>
/// <returns>Respuesta del servidor</returns>
Task<HttpResponseMessage> RawMessage(HttpMethod method, string resourcePath, object data = null);
/// <summary>
/// Petición directa al WebService (GET)
/// </summary>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="data">Objeto a serializar en la petición</param>
/// <returns>Respuesta del servidor</returns>
Task<HttpResponseMessage> RawMessage(string resourcePath, object data = null);
/// <summary>
/// Procesa la respuesta de una petición directa
/// </summary>
/// <typeparam name="T">Tipo de datos en el que convertir los datos de respuesta</typeparam>
/// <param name="response">Respuesta devuelta por RawMessage</param>
/// <param name="data">Objeto a poblar con los datos de respuesta. Se creará un nuevo objeto si este parámetro es null</param>
/// <returns>El objeto poblado / creado. Si el status de la petición no es 2XX se devuelve null</returns>
Task<T> ResponseProcess<T>(HttpResponseMessage response, T data = null) where T : class;
/// <summary>
/// Realiza un petición directa y procesa su respuesta
/// </summary>
/// <typeparam name="T">Tipo de datos en el que convertir los datos de respuesta</typeparam>
/// <param name="method">Método HTTP de la petición</param>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="input">Objeto a serializar en la petición</param>
/// <param name="output">Objeto a poblar con los datos de respuesta. Se creará un nuevo objeto si este parámetro es null</param>
/// <returns>El objeto poblado / creado. Si el status de la petición no es 2XX se devuelve null</returns>
Task<T> RawMessage<T>(HttpMethod method, string resourcePath, object input = null, T output = null) where T : class;
}
}
using inutralia.Abstractions;
using inutralia.Models;
using Newtonsoft.Json;
using Plugin.Settings;
using Plugin.Settings.Abstractions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.API
{
/// <summary>
/// Servicio de datos que utiliza el plugin de Settings para almacenar modelos
/// </summary>
public class LocalDataService : IDataPersistenceService
{
// Accesor a los settings
private static ISettings AppSettings => CrossSettings.Current;
#pragma warning disable CS1998 // Sabemos que no vamos a poner await en los métodos async, por lo que deshabilitamos el warning
public async Task<bool> DeleteItemAsync<T> (T item) where T : IIdentifiableEntity
{
Type type = item.GetType ();
string path = GetItemPath (item);
if(AppSettings.Contains(path))
{
// Eliminar elemento
AppSettings.Remove (path);
// Eliminar de la lista de elementos
var list = GetIdList (type);
list.Remove (item.Id);
SetIdList (type, list);
} //endif
return true;
}
public async Task<T> GetItemAsync<T> (int id) where T : IIdentifiableEntity
{
string path = string.Format ("Models/{0}/{1}", GetDataPath (typeof (T)), id);
if(AppSettings.Contains(path))
{
var content = AppSettings.GetValueOrDefault<string> (path);
return JsonConvert.DeserializeObject<T> (content);
} //endif
return default (T);
}
public async Task<bool> RefreshItemAsync<T> (T item) where T : IIdentifiableEntity
{
string path = GetItemPath (item);
if(AppSettings.Contains(path))
{
var content = AppSettings.GetValueOrDefault<string> (path);
JsonConvert.PopulateObject (content, item);
return true;
} //endif
return false;
}
public async Task<List<T>> RefreshListAsync<T> () where T : IIdentifiableEntity
{
Type type = typeof (T);
string basePath = GetDataPath (type);
List<int> idList = GetIdList (type);
List<T> retVal = new List<T> ();
List<int> idsToRemove = new List<int> ();
foreach(int id in idList)
{
string path = string.Format ("Models/{0}/{1}", basePath, id);
if (AppSettings.Contains (path))
{
var content = AppSettings.GetValueOrDefault<string> (path);
retVal.Add (JsonConvert.DeserializeObject<T> (content));
}
else
{
idsToRemove.Add (id);
} //endif
} //endforeach
if(idsToRemove.Count > 0)
{
// Borrar de la lista inicial los que haya que elilminar, y guardar la lista
idList.RemoveAll ((i) => { return idsToRemove.Contains (i); });
SetIdList (type, idList);
} //endif
return retVal;
}
public async Task<int?> UpdateItemAsync<T> (T item, bool isNew = false) where T : IIdentifiableEntity
{
if(isNew)
{
// Elemento nuevo: asignarle Id. Cogemos la lista de ids ...
List<int> idList = GetIdList (item.GetType ());
// ... buscamos el máximo y le sumamos 1
item.Id = (idList.Count < 1) ? 1 : idList.Max () + 1;
// ... añadimos el nuevo id a la lista
idList.Add (item.Id);
// ... y la guardamos
SetIdList (item.GetType (), idList);
}
else if (!AppSettings.Contains(GetItemPath(item)))
{
// El elemento no es nuevo, pero no existe en los datos guardados
return null;
} //endif
// Guardar elemento
AppSettings.AddOrUpdateValue (GetItemPath (item), JsonConvert.SerializeObject (item));
// Retornar su id
return item.Id;
}
#pragma warning restore CS1998 // Sabemos que no vamos a poner await en los métodos async, por lo que deshabilitamos el warning
private static List<int> GetIdList (Type t, List<int> listToFill = null)
{
// Crear lista si no nos pasan ninguna. Vaciarla.
List<int> retVal = listToFill ?? new List<int> ();
retVal.Clear ();
// Leer lista de ids (sólo si existe)
string path = string.Format ("ModelIdList/{0}", GetDataPath (t));
if (AppSettings.Contains (path))
{
// Deserializar valor json
string value = AppSettings.GetValueOrDefault<string> (path);
JsonConvert.PopulateObject (value, retVal);
} //endif
return retVal;
}
private static void SetIdList (Type t, List<int> idList)
{
string path = string.Format ("ModelIdList/{0}", GetDataPath (t));
if ((idList == null) || (idList.Count < 1))
{
// Si la lista está vacía, borrar la entrada de settings
AppSettings.Remove (path);
}
else
{
// Serializar con JSON y guardar
string value = JsonConvert.SerializeObject (idList);
AppSettings.AddOrUpdateValue (path, value);
} //endif
}
/// <summary>
/// Retorna el path dentro del api para acceder a cierto tipo de entidad
/// </summary>
/// <param name="t">Tipo de dato de la entidad</typeparam>
/// <returns>El path correspondiente dentro del API</returns>
private static string GetDataPath (Type t)
{
// Si tiene el atributo DataPath, lo utilizamos
DataPathAttribute attr = t.GetTypeInfo ().GetCustomAttribute<DataPathAttribute> ();
if (attr != null)
return attr.DataPath;
// En caso contrario devolvemos el nombre de la clase en minúsculas y en plural
return t.Name.ToLowerInvariant () + "s";
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <returns></returns>
private static string GetItemPath<T> (T item) where T: IIdentifiableEntity
{
return string.Format ("Models/{0}/{1}", GetDataPath (item.GetType ()), item.Id);
}
}
}
using inutralia.Abstractions;
using inutralia.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.API
{
/// <summary>
/// Interfaz con el WebService de peticiones de la API de iNutralia
/// </summary>
public class WebService : IWebService
{
/// <summary>
/// Procesa las peticiones
/// </summary>
private HttpClient _client;
/// <summary>
/// Nombre del usuario actual
/// </summary>
private string _username;
private JsonSerializerSettings _serializerSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace, NullValueHandling = NullValueHandling.Ignore };
public WebService()
{
Reset();
}
#region IDataPersistenceService
/// <summary>
/// Recupera de forma asíncrona los datos de una entidad a partir de su
/// identificador
/// </summary>
/// <typeparam name="T">Tipo de dato de cada entidad</typeparam>
/// <param name="id">Identificador de la entidad</param>
/// <returns>Instancia de T correspondiente al identificador</returns>
public async Task<T> GetItemAsync<T>(int id) where T : IIdentifiableEntity
{
// Preparar el path de acceso al elemento
string fullPath = string.Format("{0}/{1}", GetDataPath<T>(), id);
// Crear uri a partir de la URL base y el path
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, fullPath));
try
{
// Hacer la petición
var response = await _client.GetAsync (uri);
if (response.IsSuccessStatusCode)
{
// Si es correcta, traer los datos y deserializarlos
var content = await response.Content.ReadAsStringAsync ();
return JsonConvert.DeserializeObject<T> (content);
} //endif
}
catch(Exception)
{ }
// En caso contrario retornar error
return default(T);
}
/// <summary>
/// Obtiene de forma asíncrona una lista de elementos de cierto tipo
/// </summary>
/// <typeparam name="T">Tipo de datos de cada elemento</typeparam>
/// <returns>Lista de elementos obtenidos</returns>
public async Task<List<T>> RefreshListAsync<T>() where T : IIdentifiableEntity
{
// Crear uri a partir de la URL base y el path
return await RefreshListAsync<T>(GetDataPath<T>());
}
/// <summary>
/// Recupera de forma asíncrona los datos de una entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <param name="item">La entidad a actualizar</param>
/// <returns>La entidad actualizada</returns>
public async Task<bool> RefreshItemAsync<T>(T item) where T : IIdentifiableEntity
{
// Preparar el path de acceso al elemento
string fullPath = string.Format("{0}/{1}", GetDataPath(item.GetType() ), item.Id);
// Crear uri a partir de la URL base y el path
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, fullPath));
try
{
// Hacer la petición
var response = await _client.GetAsync (uri);
if (response.IsSuccessStatusCode)
{
// Si es correcta, traer los datos y deserializarlos
var responseContent = await response.Content.ReadAsStringAsync ();
try
{
JsonConvert.PopulateObject (responseContent, item, _serializerSettings);
}
catch (Exception e)
{
return false;
}
return true;
} //endif
}
catch(Exception)
{ }
// En caso contrario retornar error
return false;
}
/// <summary>
/// Actualiza de forma asíncrona los datos de una entidad
/// </summary>
/// <typeparam name="T">Tipo de datos de cada entidad</typeparam>
/// <param name="dataPath">El path dentro del API</param>
/// <param name="item">Los datos de la entidad a actualizar</param>
/// <param name="isNew">Indica si hay que crear una entidad nueva o modificar una existente</param>
/// <returns>El ID de la entidad. Null en caso de error</returns>
public async Task<int?> UpdateItemAsync<T>(T item, bool isNew = false) where T : IIdentifiableEntity
{
// Preparar el path de acceso al elemento
string dataPath = GetDataPath(item.GetType());
string fullPath = isNew ? dataPath : string.Format("{0}/{1}", dataPath, item.Id);
// Crear uri a partir de la URL base y el path
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, fullPath));
try
{
// Serializar el objeto
var json = JsonConvert.SerializeObject(item);
var content = new StringContent(json, Encoding.UTF8, "application/json");
if (isNew)
{
// Utilizamos POST cuando el objeto es nuevo
var response = await _client.PostAsync(uri, content);
// Si todo fue bien, recibimos el objeto de vuelta (con el id con el que fue creado)
if (response.IsSuccessStatusCode)
{
var responseContent = await response.Content.ReadAsStringAsync();
JsonConvert.PopulateObject(responseContent, item, _serializerSettings);
return item.Id;
} //endif
}
else
{
// Utilizamos PUT cuando el objeto no es nuevo
var response = await _client.PutAsync(uri, content);
// Si todo fue bien, el servidor suele responder con 204 No Content
if (response.IsSuccessStatusCode)
return item.Id;
} //endif
}
catch (Exception)
{ }
// Si llegamos aquí, es que la petición devolvió error
return null;
}
/// <summary>
/// Elimina de forma asíncrona una entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <param name="item">La entidad a eliminar</param>
/// <returns>Si la operación se realizó correctamente</returns>
public async Task<bool> DeleteItemAsync<T>(T item) where T : IIdentifiableEntity
{
// Preparar el path de acceso al elemento
string fullPath = string.Format("{0}/{1}", GetDataPath(item.GetType()), item.Id);
// Crear uri a partir de la URL base y el path
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, fullPath));
try
{
// Hacer la petición
var response = await _client.DeleteAsync(uri);
// Indicar si todo fue correcto
return response.IsSuccessStatusCode;
}
catch (Exception)
{ }
return false;
}
#endregion
#region IWebService
/// <summary>
/// Borra la información relativa a las credenciales
/// </summary>
public void Reset()
{
_client = new HttpClient();
_username = string.Empty;
}
/// <summary>
/// Establece las credenciales de acceso a la API
/// </summary>
/// <param name="username">Nombre del usuario accediendo a la API</param>
/// <param name="password">Contraseña del usuario</param>
public void CredentialsSet(string username, string password)
{
// Nos guardamos el nombre del usuario
_username = username;
// Creamos el string de autenticación (base64(user:pass) )
var authData = string.Format("{0}:{1}", username, password);
var authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));
// Lo establecemos como cabecera por defecto para todas las peticiones que hagamos a partir de ahora
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
}
/// <summary>
/// Cambia la contraseña del usuario actual
/// </summary>
/// <param name="currPass">Contraseña actual (para verificación)</param>
/// <param name="newPass">Nueva contraseña</param>
public async Task<bool> PasswordChange(string currPass, string newPass)
{
// Creamos el string de cambio de autenticación
var newAuth = string.Format("{0}:{1}:{2}", _username, currPass, newPass);
var param = Convert.ToBase64String(Encoding.UTF8.GetBytes(newAuth));
// Crear uri a partir de la URL base y el path
var path = string.Format("password/{0}", param);
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, path));
bool retVal = false;
try
{
// Realizamos la petición de cambio
var response = await _client.GetAsync(uri);
// Miramos si es correcta
retVal = response.IsSuccessStatusCode;
// Si es correcta actualizamos las credenciales
if (retVal)
CredentialsSet(_username, newPass);
}
catch (Exception)
{ }
return retVal;
}
/// <summary>
/// Petición directa al WebService (GET)
/// </summary>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="data">Objeto a serializar en la petición</param>
/// <returns>Respuesta del servidor</returns>
public async Task<HttpResponseMessage> RawMessage(string resourcePath, object data = null)
{
return await this.RawMessage(HttpMethod.Get, resourcePath, data);
}
/// <summary>
/// Petición directa al WebService
/// </summary>
/// <param name="method">Método HTTP de la petición</param>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="data">Objeto a serializar en la petición</param>
/// <returns>Respuesta del servidor</returns>
public async Task<HttpResponseMessage> RawMessage(HttpMethod method, string resourcePath, object data = null)
{
string fullPath = string.Format(Constants.ApiUrlTemplate, resourcePath);
var req = new HttpRequestMessage(method, fullPath);
if (data != null)
{
// Serializar el objeto
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
req.Content = content;
} //endif
return await _client.SendAsync(req);
}
/// <summary>
/// Procesa la respuesta de una petición directa
/// </summary>
/// <typeparam name="T">Tipo de datos en el que convertir los datos de respuesta</typeparam>
/// <param name="response">Respuesta devuelta por RawMessage</param>
/// <param name="data">Objeto a poblar con los datos de respuesta. Se creará un nuevo objeto si este parámetro es null</param>
/// <returns>El objeto poblado / creado. Si el status de la petición no es 2XX se devuelve null</returns>
public async Task<T> ResponseProcess<T>(HttpResponseMessage response, T data = null) where T : class
{
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
if (data == null)
return JsonConvert.DeserializeObject<T>(content);
JsonConvert.PopulateObject(content, data, _serializerSettings);
return data;
} //endif
return null;
}
/// <summary>
/// Realiza un petición directa y procesa su respuesta
/// </summary>
/// <typeparam name="T">Tipo de datos en el que convertir los datos de respuesta</typeparam>
/// <param name="method">Método HTTP de la petición</param>
/// <param name="resourcePath">Path del recurso REST al cual acceder</param>
/// <param name="input">Objeto a serializar en la petición</param>
/// <param name="output">Objeto a poblar con los datos de respuesta. Se creará un nuevo objeto si este parámetro es null</param>
/// <returns>El objeto poblado / creado. Si el status de la petición no es 2XX se devuelve null</returns>
public async Task<T> RawMessage<T>(HttpMethod method, string resourcePath, object input = null, T output = null) where T : class
{
return await ResponseProcess(await RawMessage(method, resourcePath, input), output);
}
/// <summary>
/// Obtiene de forma asíncrona una lista de elementos de cierto tipo
/// </summary>
/// <typeparam name="T">Tipo de datos de cada elemento</typeparam>
/// <param name="path">Path de acceso al recurso de la API</param>
/// <returns>Lista de elementos obtenidos</returns>
public async Task<List<T>> RefreshListAsync<T>(string path)
{
// Hacer la petición
var response = await _client.GetAsync(string.Format(Constants.ApiUrlTemplate, path));
if (response.IsSuccessStatusCode)
{
// Si es correcta, traer los datos y deserializarlos
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<List<T>>(content);
} //endif
// La respuesta no es correcta, distinguir código de error
switch (response.StatusCode)
{
// El usuario y contraseña son incorrectos
case HttpStatusCode.Unauthorized:
throw new UnauthorizedAccessException();
// Cualquier otro
default:
throw new Exception(response.ReasonPhrase);
} //endswitch
}
#endregion
/// <summary>
/// Retorna el path dentro del api para acceder a cierto tipo de entidad
/// </summary>
/// <typeparam name="T">Tipo de dato de la entidad</typeparam>
/// <returns>El path correspondiente dentro del API</returns>
private static string GetDataPath<T> ()
{
return GetDataPath (typeof (T));
}
/// <summary>
/// Retorna el path dentro del api para acceder a cierto tipo de entidad
/// </summary>
/// <param name="t">Tipo de dato de la entidad</typeparam>
/// <returns>El path correspondiente dentro del API</returns>
private static string GetDataPath(Type t)
{
// Si tiene el atributo DataPath, lo utilizamos
DataPathAttribute attr = t.GetTypeInfo().GetCustomAttribute<DataPathAttribute>();
if (attr != null)
return attr.DataPath;
// En caso contrario devolvemos el nombre de la clase en minúsculas y en plural
return t.Name.ToLowerInvariant() + "s";
}
public async Task<HttpStatusCode?> RegisterUser(string userName, string passWord, string companyCode)
{
var dataChain = string.Format("{0}:{1}:{2}", userName, passWord, companyCode);
var param = Convert.ToBase64String(Encoding.UTF8.GetBytes(dataChain));
var path = string.Format("register/{0}", param);
var uri = new Uri(string.Format(Constants.ApiUrlTemplate, path));
try
{
var response = await _client.GetAsync(uri);
if (response.IsSuccessStatusCode)
return null;
var content = await response.Content.ReadAsStringAsync();
var respuesta = JsonConvert.DeserializeObject<dataResponse>(content);
var desc_error = respuesta.error;
return response.StatusCode;
}
catch (Exception)
{ }
return HttpStatusCode.InternalServerError;
}
public class dataResponse
{
public string error { get; set; }
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Application
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.App"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:effects="clr-namespace:UXDivers.Effects;assembly=UXDivers.Effects"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms">
<Application.Resources>
<!--<ResourceDictionary MergedWith="local:GrialLightTheme">-->
<!--<ResourceDictionary MergedWith="local:GrialDarkTheme">-->
<!--<ResourceDictionary MergedWith="local:GrialEnterpriseTheme">-->
<ResourceDictionary MergedWith="local:MyAppTheme">
<!--
Use the following file as your theme colors.
Simply replace colors to march your brand.
(It is based on GrialLightTheme but you can use the colors
of any other theme)
-->
<!--<ResourceDictionary MergedWith="local:MyAppTheme">-->
<!-- UNITS -->
<x:Double x:Key="BaseFontSize">16</x:Double>
<x:Double x:Key="BaseButtonHeight">44</x:Double>
<x:Double x:Key="BaseButtonBorderRadius">22</x:Double>
<x:Double x:Key="MainMenuLabelFontsize">18</x:Double>
<x:Double x:Key="MainMenuIconFontsize">20</x:Double>
<x:Double x:Key="MainMenuHeaderFontsize">18</x:Double>
<x:Double x:Key="MainMenuLabelTranslationX">10</x:Double>
<x:Double x:Key="MainMenuChevronRightFontsize">24</x:Double>
<x:Double x:Key="MainMenuIconWidthRequest">22</x:Double>
<x:String x:Key="LoginWelcomeText">Bienvenido a iNutralia</x:String>
<x:String x:Key="WebViewPageURL">http://www.grialkit.com</x:String>
<x:String x:Key="WebViewPageTitle">Grial UI Kit</x:String>
<x:String x:Key="GrialShapesFontFamily">grialshapes</x:String>
<!-- PUT YOUR OWN ICONS FONT FAMILY BELOW -->
<!--<x:String x:Key="IconsFontFamily">grialshapes</x:String>-->
<!--<x:String x:Key="IconsFontFamily">FontAwesome</x:String>-->
<x:String x:Key="IconsFontFamily">Ionicons</x:String>
<!-- STATIC IMAGES -->
<FileImageSource x:Key="HamburguerIcon">hamburguer_icon.png</FileImageSource>
<FileImageSource x:Key="WelcomeBackgroundImagePhone">welcome_bg.jpg</FileImageSource>
<FileImageSource x:Key="WelcomeBackgroundImageTablet">welcome_bg_tablet.jpg</FileImageSource>
<!--<FileImageSource x:Key="BrandImage">logo.png</FileImageSource>-->
<FileImageSource x:Key="BrandImage">logo_empresa.png</FileImageSource>
<FileImageSource x:Key="GenericBackgroundImage">generic_bg_image.jpg</FileImageSource>
<FileImageSource x:Key="SignUpBackgroundImagePhone">signup_bg.jpg</FileImageSource>
<FileImageSource x:Key="SignUpBackgroundImageTablet">signup_bg_tablet.jpg</FileImageSource>
<FileImageSource x:Key="LoginBackgroundImagePhone">login_bg.jpg</FileImageSource>
<FileImageSource x:Key="LoginBackgroundImageTablet">login_bg_tablet.jpg</FileImageSource>
<FileImageSource x:Key="PasswordRecoveryBackgroundImagePhone">pass_recovery_bg.jpg</FileImageSource>
<FileImageSource x:Key="PasswordRecoveryBackgroundImageTablet">pass_recovery_bg_tablet.jpg</FileImageSource>
<FileImageSource x:Key="WalkthroughStepGenericPhoneBackgroundImage">walkthrough_generic_phone_bg.png</FileImageSource>
<FileImageSource x:Key="ThemeAvatarSample0Image">user_profile_0.jpg</FileImageSource>
<FileImageSource x:Key="ThemeAvatarSample1Image">user_profile_1.jpg</FileImageSource>
<FileImageSource x:Key="SocialHeaderBackgroundImage0">social_header_bg_0.jpg</FileImageSource>
<FileImageSource x:Key="SocialHeaderBackgroundImage1">social_header_bg_1.jpg</FileImageSource>
<!-- RESPONSIVE COMMON -->
<OnIdiom x:Key="MainWrapperPadding" x:TypeArguments="Thickness">
<OnIdiom.Phone>0</OnIdiom.Phone>
<OnIdiom.Tablet>100,0,100,0</OnIdiom.Tablet>
</OnIdiom>
<!-- END RESPONSIVE COMMON -->
<!-- BEGINS RESPONSIVE HELPERS -->
<OnIdiom x:Key="TabletVisible" x:TypeArguments="x:Boolean">
<OnIdiom.Phone>false</OnIdiom.Phone>
<OnIdiom.Tablet>true</OnIdiom.Tablet>
</OnIdiom>
<OnIdiom x:Key="PhoneVisible" x:TypeArguments="x:Boolean">
<OnIdiom.Phone>true</OnIdiom.Phone>
<OnIdiom.Tablet>false</OnIdiom.Tablet>
</OnIdiom>
<OnPlatform x:Key="AndroidVisible" x:TypeArguments="x:Boolean">
<OnPlatform.iOS>false</OnPlatform.iOS>
<OnPlatform.Android>true</OnPlatform.Android>
</OnPlatform>
<OnPlatform x:Key="iOSVisible" x:TypeArguments="x:Boolean">
<OnPlatform.iOS>true</OnPlatform.iOS>
<OnPlatform.Android>false</OnPlatform.Android>
</OnPlatform>
<!-- ENDS RESPONSIVE HELPERS -->
<!-- IMPLICIT STYLES -->
<Style TargetType="Frame">
<Setter Property="OutlineColor" Value="{DynamicResource BrandColor}" />
</Style>
<Style TargetType="Entry">
<Setter Property="TextColor" Value="{DynamicResource BaseTextColor}" />
</Style>
<Style TargetType="ActivityIndicator">
<Setter Property="Color" Value="{DynamicResource AccentColor}" />
</Style>
<Style TargetType="ContentPage">
<Setter Property="BackgroundColor" Value="{DynamicResource BasePageColor}" />
</Style>
<Style TargetType="ContentView">
<Setter Property="BackgroundColor" Value="{DynamicResource BasePageColor}" />
</Style>
<Style TargetType="ScrollView">
<Setter Property="BackgroundColor" Value="Transparent" />
</Style>
<Style TargetType="TabbedPage">
<Setter Property="BackgroundColor" Value="{DynamicResource BaseTabbedPageColor}" />
</Style>
<Style TargetType="Label">
<Setter Property="FontSize" Value="{DynamicResource BaseFontSize}" />
<Setter Property="TextColor" Value="{DynamicResource BaseTextColor}" />
</Style>
<Style TargetType="ListView">
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="SeparatorColor" Value="{DynamicResource ListViewSeparatorColor}" />
<Setter Property="SeparatorVisibility" Value="Default" />
</Style>
<Style TargetType="TableView">
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="artina:TableViewProperties.HeaderFooterTextColor" Value="{DynamicResource AccentColor}" />
</Style>
<Style TargetType="Image">
<Setter Property="IsOpaque">
<Setter.Value>
<OnPlatform x:TypeArguments="x:Boolean" Android="true" />
</Setter.Value>
</Setter>
</Style>
<Style TargetType="ProgressBar">
<Setter Property="artina:ProgressBarProperties.TintColor" Value="{DynamicResource AccentColor}" />
</Style>
<Style TargetType="Slider">
<Setter Property="artina:SliderProperties.TintColor" Value="{DynamicResource AccentColor}" />
</Style>
<Style TargetType="TextCell">
<Setter Property="TextColor" Value="{ DynamicResource AccentColor }" />
</Style>
<Style TargetType="Button">
<Setter Property="FontSize" Value="{DynamicResource BaseFontSize}" />
<Setter Property="BorderRadius" Value="22" />
<Setter Property="BorderWidth" Value="0" />
<Setter Property="BorderColor" Value="Transparent" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
<!--
Mimic Android Buttons background color
If no background color is set,
the button won't render with height as specified here
-->
<Setter Property="BackgroundColor">
<Setter.Value>
<OnPlatform x:TypeArguments="Color" Android="#d6d6d6" />
</Setter.Value>
</Setter>
</Style>
<Style TargetType="artina:Button">
<Setter Property="FontSize" Value="{DynamicResource BaseFontSize}" />
<Setter Property="BorderRadius" Value="22" />
<Setter Property="BorderWidth" Value="0" />
<Setter Property="BorderColor" Value="Transparent" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
<!--
Mimic Android Buttons background color
If no background color is set,
the button won't render with height as specified here
-->
<Setter Property="BackgroundColor">
<Setter.Value>
<OnPlatform x:TypeArguments="Color" Android="#d6d6d6" />
</Setter.Value>
</Setter>
</Style>
<!-- FFIMAGELOADING STYLES -->
<Style TargetType="ffimageloading:CachedImage">
<Setter Property="LoadingPlaceholder" Value="image_default_empresa.png" />
<Setter Property="BitmapOptimizations" Value="true" />
<Setter Property="DownsampleToViewSize" Value="true" />
<Setter Property="TransparencyEnabled" Value="false" />
<Setter Property="RetryCount" Value="3" />
<Setter Property="RetryDelay" Value="250" />
</Style>
<!-- BASE STYLES -->
<Style x:Key="FontIcon" TargetType="Label">
<Setter Property="FontFamily" Value="{ DynamicResource IconsFontFamily }" />
</Style>
<Style x:Key="FontIconBase" TargetType="Label">
<Setter Property="FontFamily" Value="{ DynamicResource GrialShapesFontFamily }" />
</Style>
<Style x:Key="RoundedButtonStyle" TargetType="Button">
<Setter Property="FontSize" Value="{DynamicResource BaseFontSize}" />
<Setter Property="BorderRadius" Value="22" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<Style x:Key="SquaredButtonStyle" TargetType="Button">
<Setter Property="Margin" Value="0,0,5,0" />
<Setter Property="FontSize" Value="{DynamicResource BaseFontSize}" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<Style x:Key="Horizontal1ptLineStyle" TargetType="BoxView">
<Setter Property="HeightRequest" Value="1" />
<Setter Property="BackgroundColor" Value="#11000000" />
</Style>
<Style x:Key="StatusLabelStyle" TargetType="Label">
<Setter Property="Text" Value=" AVAILABLE " />
<Setter Property="VerticalOptions" Value="End" />
<Setter Property="HorizontalOptions" Value="Start" />
<Setter Property="FontSize" Value="14" />
</Style>
<!-- SPECIFIC STYLES -->
<Style x:Key="IconCloseLabelStyle" TargetType="Label" BasedOn="{StaticResource FontIcon}">
<Setter Property="FontSize" Value="20" />
<Setter Property="HorizontalOptions" Value="FillAndExpand" />
<Setter Property="VerticalOptions" Value="FillAndExpand" />
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Close }" />
<Setter Property="HorizontalTextAlignment" Value="Center" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="TextColor" Value="{ DynamicResource OverImageTextColor }" />
<Setter Property="HeightRequest" Value="30" />
<Setter Property="WidthRequest" Value="30" />
</Style>
<Style x:Key="IconBackLabelStyle" TargetType="Label" BasedOn="{StaticResource IconCloseLabelStyle}">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.ArrowLeft }" />
</Style>
<!-- COMMON -->
<Style x:Key="AvailableStatusStyle" TargetType="Label" BasedOn="{StaticResource StatusLabelStyle}">
<Setter Property="BackgroundColor" Value="{StaticResource OkColor}" />
<Setter Property="TextColor" Value="White" />
</Style>
<Style x:Key="RoundShape" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Circle }" />
</Style>
<!-- MAIN MENU STYLES -->
<Style x:Key="MainMenuStyle" TargetType="ContentPage">
<Setter Property="BackgroundColor" Value="{DynamicResource MainMenuBackgroundColor}" />
</Style>
<Style x:Key="MainMenuListViewStyle" TargetType="ListView">
<Setter Property="BackgroundColor" Value="{DynamicResource MainMenuBackgroundColor}" />
<Setter Property="SeparatorVisibility" Value="None" />
<Setter Property="SeparatorColor" Value="{DynamicResource MainMenuSeparatorColor}" />
<Setter Property="RowHeight" Value="55" />
</Style>
<Style x:Key="MainMenuIconStyle" TargetType="Label">
<Setter Property="TextColor" Value="{ DynamicResource MainMenuIconColor }" />
<Setter Property="FontFamily" Value="grialshapes" />
<Setter Property="FontSize" Value="{ DynamicResource MainMenuIconFontsize }" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
</Style>
<Style x:Key="MainMenuHeaderStyle" TargetType="Label">
<Setter Property="BackgroundColor" Value="{DynamicResource MainMenuBackgroundColor}" />
<Setter Property="TextColor" Value="{ DynamicResource MainMenuTextColor }" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="FontSize" Value="{DynamicResource MainMenuHeaderFontsize }" />
<Setter Property="FontAttributes" Value="Bold" />
</Style>
<Style x:Key="MainMenuLabelStyle" TargetType="Label">
<Setter Property="TextColor" Value="{ DynamicResource MainMenuTextColor }" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="TranslationX" Value="{DynamicResource MainMenuLabelTranslationX}" />
<Setter Property="FontSize" Value="{DynamicResource MainMenuLabelFontsize}" />
<Setter Property="HorizontalOptions" Value="StartAndExpand" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="LineBreakMode" Value="TailTruncation" />
</Style>
<Style x:Key="MainMenuRightChevronStyle" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.ArrowRight }" />
<Setter Property="TextColor" Value="{ DynamicResource MainMenuIconColor }" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="FontSize" Value="{DynamicResource MainMenuChevronRightFontsize}" />
<Setter Property="HorizontalOptions" Value="End" />
</Style>
<!-- NOTIFICATION STYLES -->
<Style x:Key="NotificationItemTemplateShape" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Circle }" />
<Setter Property="FontSize">
<Setter.Value>
<OnIdiom x:TypeArguments="x:Double" Phone="25" Tablet="35" />
</Setter.Value>
</Setter>
<Setter Property="Opacity" Value="1" />
</Style>
<!-- WELCOME STYLES -->
<Style x:Key="WelcomeBackgroundImage" TargetType="Image">
<Setter Property="Aspect" Value="AspectFill" />
<Setter Property="Source">
<Setter.Value>
<OnIdiom x:TypeArguments="ImageSource" Phone="{ StaticResource WelcomeBackgroundImagePhone }" Tablet="{ StaticResource WelcomeBackgroundImageTablet }" />
</Setter.Value>
</Setter>
</Style>
<!-- LOGINS STYLES -->
<Style x:Key="SignUpBackgroundImage" TargetType="Image">
<Setter Property="Aspect" Value="AspectFill" />
<Setter Property="Source">
<Setter.Value>
<OnIdiom x:TypeArguments="ImageSource" Phone="{ StaticResource SignUpBackgroundImagePhone }" Tablet="{ StaticResource LoginBackgroundImageTablet }" />
</Setter.Value>
</Setter>
</Style>
<Style x:Key="LoginBackgroundImage" TargetType="Image">
<Setter Property="Aspect" Value="AspectFill" />
<Setter Property="Source">
<Setter.Value>
<OnIdiom x:TypeArguments="ImageSource" Phone="{ StaticResource LoginBackgroundImagePhone }" Tablet="{ StaticResource LoginBackgroundImageTablet }" />
</Setter.Value>
</Setter>
</Style>
<Style x:Key="PasswordRecoveryBackgroundImage" TargetType="Image">
<Setter Property="Aspect" Value="AspectFill" />
<Setter Property="Source">
<Setter.Value>
<OnIdiom x:TypeArguments="ImageSource" Phone="{ StaticResource PasswordRecoveryBackgroundImagePhone }" Tablet="{ StaticResource LoginBackgroundImageTablet }" />
</Setter.Value>
</Setter>
</Style>
<Style x:Key="PrimaryActionButtonStyle" TargetType="Button" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="BackgroundColor" Value="{DynamicResource AccentColor}" />
<Setter Property="TextColor" Value="{DynamicResource LabelButtonColor}" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<Style x:Key="SecondaryActionButtonStyle" TargetType="Button" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="BackgroundColor" Value="{DynamicResource ComplementColor}" />
<Setter Property="TextColor" Value="{DynamicResource LabelButtonColor}" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<Style x:Key="TransparentButtonStyle" TargetType="Button" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="TextColor" Value="{DynamicResource LabelButtonColor}" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<!-- ENTRY FIELDS -->
<Style x:Key="ArtinaEntryStyle" TargetType="Entry">
<Setter Property="TextColor" Value="White" />
<Setter Property="artina:EntryProperties.BorderStyle" Value="BottomLine" />
<Setter Property="artina:EntryProperties.BorderWidth" Value="1" />
<Style.Triggers>
<Trigger TargetType="Entry" Property="IsFocused" Value="True">
<Setter Property="artina:EntryProperties.BorderColor" Value="{DynamicResource AccentColor}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="LoginEntryStyle" TargetType="Entry">
<Setter Property="TextColor" Value="White" />
<Setter Property="BackgroundColor" Value="Transparent" />
</Style>
<Style x:Key="ArtinaLoginEntryStyle" TargetType="Entry" BasedOn="{ StaticResource LoginEntryStyle }">
<Setter Property="artina:EntryProperties.BorderStyle" Value="BottomLine" />
<Setter Property="artina:EntryProperties.BorderColor" Value="{ DynamicResource OverImageTextColor }" />
<Setter Property="artina:EntryProperties.PlaceholderColor" Value="{ DynamicResource OverImageTextColor }" />
<Style.Triggers>
<Trigger TargetType="Entry" Property="IsFocused" Value="True">
<Setter Property="artina:EntryProperties.BorderColor" Value="{ DynamicResource AccentColor }" />
</Trigger>
</Style.Triggers>
</Style>
<!-- VALIDATIONS -->
<Style x:Key="ValidationEntryErrorStyle" TargetType="Label">
<Setter Property="BackgroundColor" Value="{ DynamicResource ErrorColor }" />
<Setter Property="TextColor" Value="White" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style x:Key="ValidationEntryWarningStyle" TargetType="Label">
<Setter Property="BackgroundColor" Value="{ DynamicResource WarningColor }" />
<Setter Property="TextColor" Value="White" />
<Setter Property="FontSize" Value="12" />
</Style>
<!-- CHAT STYLES -->
<Style x:Key="ChatMessageItemBaseStyle" TargetType="Label">
<Setter Property="FontSize" Value="14" />
</Style>
<Style x:Key="ChatMessageItemInfoBaseStyle" TargetType="Label">
<Setter Property="FontSize" Value="12" />
<Setter Property="TextColor" Value="#FF212121" />
</Style>
<Style x:Key="ChatMessageItemBalloonBaseStyle" TargetType="StackLayout">
<Setter Property="Padding" Value="10" />
</Style>
<Style x:Key="ChatIconButtonBaseStyle" TargetType="Label" BasedOn="{ StaticResource FontIcon }">
<Setter Property="HorizontalTextAlignment" Value="Center" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="FontSize" Value="20" />
</Style>
<Style x:Key="ChatIconButtonPictureStyle" TargetType="Label" BasedOn="{ StaticResource ChatIconButtonBaseStyle }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.PhotoCamera }" />
</Style>
<Style x:Key="ChatIconButtonSendStyle" TargetType="Label" BasedOn="{ StaticResource ChatIconButtonBaseStyle }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Send }" />
<Setter Property="TextColor" Value="{ DynamicResource AccentColor }" />
</Style>
<Style x:Key="ChatMessageEntryStyle" TargetType="Entry">
<Setter Property="FontSize" Value="12" />
<Setter Property="BackgroundColor">
<Setter.Value>
<OnPlatform x:TypeArguments="Color"
iOS="#FFFFFF"
Android="#00FFFFFF" />
</Setter.Value>
</Setter>
</Style>
<!-- WALKTHROUGH -->
<Style x:Key="WalkthroughStepBaseStyle" TargetType="ContentPage">
<Setter Property="BackgroundColor" Value="{DynamicResource BrandColor}" />
</Style>
<Style x:Key="WalkthroughStepStyle" TargetType="ContentPage" BasedOn="{StaticResource WalkthroughStepBaseStyle}">
<Setter Property="Opacity" Value="1" />
</Style>
<Style x:Key="WalkthroughStepIconStyle" TargetType="Label" BasedOn="{StaticResource FontIcon}">
<Setter Property="HorizontalTextAlignment" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="FontSize" Value="72" />
<Setter Property="TextColor" Value="{DynamicResource OverImageTextColor}" />
</Style>
<Style x:Key="WalktrhoughItemTemplateShape" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Circle }" />
<Setter Property="HorizontalTextAlignment" Value="Center" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="TextColor" Value="White" />
<Setter Property="Opacity" Value="0.1" />
</Style>
<!-- SETTINGS -->
<Style x:Key="SaveButtonStyle" TargetType="Button" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="BackgroundColor" Value="{DynamicResource SaveButtonColor}" />
<Setter Property="TextColor" Value="#FFF" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<Style x:Key="DeleteButtonStyle" TargetType="Button" BasedOn="{StaticResource RoundedButtonStyle}">
<Setter Property="BackgroundColor" Value="{DynamicResource DeleteButtonColor}" />
<Setter Property="TextColor" Value="#FFF" />
<Setter Property="HeightRequest" Value="{DynamicResource BaseButtonHeight}" />
</Style>
<!-- DOCUMENT TIMELINE -->
<Style x:Key="DocumentTimelineBubbleStyle" TargetType="VisualElement">
<Setter Property="effects:Effects.CornerRadius" Value="4" />
</Style>
<Style x:Key="DocumentTimelineBulletStyle" TargetType="Label" BasedOn="{StaticResource RoundShape}">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Circle }" />
</Style>
<!-- SOCIAL -->
<Style x:Key="SocialHeaderStyle" TargetType="Label">
<Setter Property="TranslationX" Value="20" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="FontSize" Value="14" />
<Setter Property="HeightRequest" Value="46" />
<Setter Property="VerticalTextAlignment" Value="Center" />
<Setter Property="TextColor" Value="{ DynamicResource BaseTextColor }" />
</Style>
<Style x:Key="SocialHeaderStyleBorderBottomStyle" TargetType="Label">
<Setter Property="HeightRequest" Value="1" />
<Setter Property="BackgroundColor" Value="{ DynamicResource ListViewSeparatorColor }" />
</Style>
<Style x:Key="ToolbarStyle" TargetType="Grid">
<Setter Property="HeightRequest" Value="60" />
<Setter Property="ColumnSpacing" Value="0" />
</Style>
<!-- BRAND BLOCK -->
<Style x:Key="BrandContainerStyle" TargetType="StackLayout">
<Setter Property="HorizontalOptions" Value="Start" />
<Setter Property="VerticalOptions" Value="Start" />
</Style>
<Style x:Key="BrandNameStyle" TargetType="Label">
<Setter Property="FontSize" Value="24" />
<Setter Property="TextColor" Value="{DynamicResource BaseTextColor}" />
</Style>
<Style x:Key="BrandNameOrnamentStyle" TargetType="BoxView">
<Setter Property="HeightRequest" Value="4" />
<Setter Property="VerticalOptions" Value="End" />
<Setter Property="HorizontalOptions" Value="Start" />
<Setter Property="WidthRequest" Value="40" />
<Setter Property="BackgroundColor" Value="{ DynamicResource AccentColor }" />
</Style>
<!-- LAYOUT HELPERS -->
<Style x:Key="Spacer" TargetType="BoxView">
<Setter Property="BackgroundColor" Value="Transparent" />
</Style>
<Style x:Key="SpacerThemeShowCaseStyle" TargetType="BoxView" BasedOn="{ StaticResource Spacer }">
<Setter Property="HeightRequest" Value="20" />
</Style>
<Style x:Key="HorizontalRuleStyle" TargetType="BoxView">
<Setter Property="BackgroundColor" Value="{DynamicResource AccentColor}" />
<Setter Property="HeightRequest" Value="1" />
</Style>
<Style x:Key="ThemeShowCaseHorizontalRuleStyle" TargetType="BoxView" BasedOn="{ StaticResource HorizontalRuleStyle }">
<Setter Property="BackgroundColor" Value="{ DynamicResource BaseSeparatorColor }" />
<Setter Property="Margin" Value="0,28" />
</Style>
<Style x:Key="LoginPadding" TargetType="StackLayout">
<Setter Property="Padding" Value="40,0,40,0" />
</Style>
<!-- THEME -->
<Style TargetType="artina:CircleImage">
<Setter Property="WidthRequest" Value="50" />
<Setter Property="HeightRequest" Value="50" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="BorderColor" Value="{DynamicResource AccentColor}" />
</Style>
<Style x:Key="Avatar" TargetType="artina:CircleImage">
<Setter Property="WidthRequest" Value="50" />
<Setter Property="HeightRequest" Value="50" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="BorderColor" Value="{DynamicResource AccentColor}" />
</Style>
<Style x:Key="AvatarXSmall" TargetType="artina:CircleImage" BasedOn="{ StaticResource Avatar }">
<Setter Property="WidthRequest" Value="36" />
<Setter Property="HeightRequest" Value="36" />
<Setter Property="BorderThickness" Value="2" />
</Style>
<Style x:Key="AvatarSmall" TargetType="artina:CircleImage" BasedOn="{ StaticResource Avatar }">
<Setter Property="WidthRequest" Value="44" />
<Setter Property="HeightRequest" Value="44" />
</Style>
<Style x:Key="AvatarLarge" TargetType="artina:CircleImage" BasedOn="{ StaticResource Avatar }">
<Setter Property="WidthRequest" Value="110" />
<Setter Property="HeightRequest" Value="110" />
</Style>
<Style x:Key="GrialBaseIconShapeDemo" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="TextColor" Value="{ DynamicResource AccentColor }" />
<Setter Property="FontSize" Value="24" />
</Style>
<Style x:Key="FontIconItemDemo" TargetType="Label" BasedOn="{ StaticResource FontIcon }">
<Setter Property="TextColor" Value="{ DynamicResource AccentColor }" />
<Setter Property="FontSize" Value="24" />
</Style>
<!-- ECOMMERCE -->
<Style x:Key="EcommerceProductGridBannerStyle" TargetType="StackLayout">
<Setter Property="HeightRequest" Value="120" />
<Setter Property="BackgroundColor" Value="{DynamicResource BrandColor}" />
</Style>
<!-- CUSTOM NAVBAR -->
<Style x:Key="CustomNavBarStyle" TargetType="Grid">
<Setter Property="BackgroundColor" Value="{ DynamicResource AccentColor }" />
<Setter Property="HeightRequest">
<Setter.Value>
<OnPlatform x:TypeArguments="x:Double" Android="56" iOS="64" />
</Setter.Value>
</Setter>
</Style>
<!--Dashboard Item Template-->
<Style x:Key="DashboardItemTemplateShape" TargetType="Label" BasedOn="{ StaticResource FontIconBase }">
<Setter Property="Text" Value="{ x:Static local:GrialShapesFont.Circle }" />
<Setter Property="FontSize">
<Setter.Value>
<OnIdiom x:TypeArguments="x:Double" Phone="60" Tablet="65" />
</Setter.Value>
</Setter>
<Setter Property="Opacity" Value="1" />
</Style>
<Style x:Key="DashboardItemTemplateIcon" TargetType="Label" BasedOn="{ StaticResource FontIcon }">
<Setter Property="FontSize">
<Setter.Value>
<OnIdiom x:TypeArguments="x:Double" Phone="25" Tablet="35" />
</Setter.Value>
</Setter>
<Setter Property="Opacity" Value="1" />
</Style>
<Style x:Key="DashboardVariantItemTemplateIcon" TargetType="Label" BasedOn="{ StaticResource FontIcon }">
<Setter Property="FontSize">
<Setter.Value>
<OnIdiom x:TypeArguments="x:Double" Phone="70" Tablet="85" />
</Setter.Value>
</Setter>
<Setter Property="Opacity" Value="1" />
</Style>
<x:Double x:Key="DashboardFlatSpacing">0</x:Double>
<Thickness x:Key="DashboardFlatPadding">0</Thickness>
<!--Dashboard Multiple Scroll-->
<OnIdiom x:TypeArguments="GridLength" Phone="250" Tablet="500" x:Key="DashboardMultipleScrollMainItemHeight" />
<OnIdiom x:TypeArguments="GridLength" Phone="134" Tablet="268" x:Key="DashboardMultipleScrollSecondaryItemRowHeight" />
<OnIdiom x:TypeArguments="GridLength" Phone="81" Tablet="162" x:Key="DashboardMultipleScrollSecondaryItemColumnWidth" />
<OnIdiom x:TypeArguments="LayoutOptions" Phone="FillAndExpand" Tablet="CenterAndExpand" x:Key="DashboardMultipleScrollMainItemVerticalAlignment" />
<OnIdiom x:TypeArguments="Thickness" Phone="20,30,20,20" Tablet="60" x:Key="DashboardMultipleScrollMainItemMargin" />
<OnIdiom x:TypeArguments="x:Double" Phone="20" Tablet="30" x:Key="DashboardMultipleScrollMainItemTitleFontSize" />
<OnIdiom x:TypeArguments="x:Double" Phone="14" Tablet="18" x:Key="DashboardMultipleScrollMainItemDescriptionFontSize" />
<OnIdiom x:TypeArguments="x:Double" Phone="10" Tablet="40" x:Key="DashboardMultipleScrollMainItemRowSpacing" />
<Style x:Key="DashboardMultipleScrollItemTitleStyle" TargetType="Label">
<Setter Property="Margin" Value="10,20,10,10" />
<Setter Property="FontSize" Value="16" />
<Setter Property="FontAttributes" Value="Bold" />
<Setter Property="TextColor" Value="{ DynamicResource BaseTextColor }" />
<Setter Property="VerticalTextAlignment" Value="End" />
</Style>
<Style x:Key="DashboardMultipleScrollResponsiveImageStyle" TargetType="Image">
<Setter Property="Aspect" Value="AspectFill" />
</Style>
<Style x:Key="DashboardMultipleScrollShimStyle" TargetType="Image">
<Setter Property="Source" Value="grialflix_main_item_gradient.png" />
<Setter Property="VerticalOptions" Value="FillAndExpand" />
<Setter Property="Aspect" Value="Fill" />
<Setter Property="Opacity" Value=".7" />
</Style>
<Style x:Key="DashboardMultipleScrollMainItemTitleStyle" TargetType="Label">
<Setter Property="TextColor" Value="{ DynamicResource OverImageTextColor }" />
<Setter Property="FontSize" Value="{ DynamicResource DashboardMultipleScrollMainItemTitleFontSize }" />
<Setter Property="FontAttributes" Value="Bold" />
</Style>
<Style x:Key="DashboardMultipleScrollMainItemDescriptionStyle" TargetType="Label">
<Setter Property="TextColor" Value="{ DynamicResource OverImageTextColor }" />
<Setter Property="FontSize" Value="{ DynamicResource DashboardMultipleScrollMainItemDescriptionFontSize }" />
<Setter Property="VerticalOptions" Value="FillAndExpand" />
</Style>
<Style x:Key="DashboardBadgeStyle" TargetType="VisualElement">
<Setter Property="effects:Effects.Shadow" Value="True" />
<Setter Property="effects:Effects.ShadowSize" Value="2" />
<Setter Property="effects:Effects.ShadowIOSColor" Value="#33000000" />
</Style>
<!-- MAIN MENU -->
<Style x:Key="IsNewRoundedLabelStyle" TargetType="local:RoundedLabel">
<Setter Property="Margin" Value="0,0,20,0" />
<Setter Property="RoundedLabelFontSize" Value="8" />
<Setter Property="RoundedLabelFontAttributes" Value="Bold" />
<Setter Property="RoundedLabelPadding" Value="6,4" />
<Setter Property="RoundedLabelTextColor" Value="{ DynamicResource InverseTextColor }" />
<Setter Property="RoundedLabelCornerRadius" Value="2" />
<Setter Property="HorizontalOptions" Value="End" />
<Setter Property="RoundedLabelBackgroundColor" Value="{ DynamicResource RoundedLabelBackgroundColor }" />
</Style>
<!-- CARDS -->
<OnPlatform x:TypeArguments="x:Double" x:Key="CardViewCornerRadius" Android="4" iOS="4" />
<!-- TAG LABEL -->
<OnPlatform x:TypeArguments="x:Double" x:Key="TagLabelCornerRadius" Android="6" iOS="6" />
<Style x:Key="CardViewStyle" TargetType="VisualElement">
<Setter Property="effects:Effects.CornerRadius" Value="{ DynamicResource CardViewCornerRadius }" />
<Setter Property="effects:Effects.Shadow" Value="True" />
<Setter Property="effects:Effects.ShadowSize" Value="5" />
<Setter Property="effects:Effects.ShadowIOSColor" Value="#77000000" />
</Style>
<Style x:Key="TagLabelStyle" TargetType="local:RoundedLabel">
<Setter Property="RoundedLabelCornerRadius" Value="{ DynamicResource TagLabelCornerRadius }" />
<Setter Property="RoundedLabelText" Value="{ Binding Section }" />
<Setter Property="RoundedLabelTextColor" Value="{ DynamicResource OverImageTextColor }" />
<Setter Property="RoundedLabelFontSize" Value="12" />
<Setter Property="RoundedLabelBackgroundColor" Value="{ DynamicResource TranslucidBlack }" />
</Style>
<!-- STATUS BAR GRADIENT -->
<Style x:Key="StatusBarShimStyle" TargetType="Image">
<Setter Property="Source" Value="status_bar_gradient.png" />
<Setter Property="VerticalOptions" Value="FillAndExpand" />
<Setter Property="HorizontalOptions" Value="FillAndExpand" />
<Setter Property="Aspect" Value="Fill" />
<Setter Property="Opacity" Value=".7" />
</Style>
<!-- CUSTOM CONVERTER -->
<local:AlternatingBackgroundColorConverter x:Key="ListBgConverter">
<x:Arguments>
<x:String>#FFd480d6,#FFd4a4d6,#FF62b9ae,#FF81b9ae,#ffa2c300,#FF9999b2,#FF999999</x:String>
</x:Arguments>
</local:AlternatingBackgroundColorConverter>
</ResourceDictionary>
</Application.Resources>
</Application>
using System;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using inutralia.Views;
using inutralia.API;
using inutralia.Models;
using System.Reflection;
using System.IO;
using Newtonsoft.Json;
namespace inutralia
{
public partial class App : Application
{
private static bool _IsUserLoggedIn = false;
public static bool IsUserLoggedIn
{
get { return _IsUserLoggedIn; }
set
{
_IsUserLoggedIn = value;
if (!value)
{
API.Reset ();
Current.MainPage = new NavigationPage(new LoginView());
}
}
}
public static WebService API { get; private set; }
public static LocalDataService LocalData { get; private set; }
protected static List<RecipeOptionGroup> _FilterOptions = null;
public static List<RecipeOptionGroup> FilterOptions =>
_FilterOptions ?? (_FilterOptions = LoadFilterOptions() );
private static List<RecipeOptionGroup> LoadFilterOptions ()
{
var assembly = typeof (App).GetTypeInfo ().Assembly;
Stream stream = assembly.GetManifestResourceStream ("inutralia.filterOptions.json");
List<RecipeOptionGroup> retVal;
using (var reader = new System.IO.StreamReader (stream))
{
var json = reader.ReadToEnd ();
var serializerSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace, NullValueHandling = NullValueHandling.Ignore };
retVal = JsonConvert.DeserializeObject<List<RecipeOptionGroup>> (json);
}
return retVal;
}
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new Page(
))
{ BarBackgroundColor = Color.FromHex("#FFa2c300"),
BarTextColor = Color.White};
API = new WebService();
LocalData = new LocalDataService ();
_FilterOptions = LoadFilterOptions ();
IsUserLoggedIn = false;
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia
{
class AlternatingBackgroundColorConverter : IValueConverter
{
private List<Color> _Colors;
public AlternatingBackgroundColorConverter (string commaSeparatedColors)
{
var conv = new ColorTypeConverter ();
string [] colors = commaSeparatedColors.Split (',');
_Colors = new List<Color> ();
foreach (string s in colors)
{
try
{
if (s.Length > 0)
_Colors.Add ((Color) conv.ConvertFromInvariantString (s));
}
catch (Exception)
{ }
} //endforeach
}
public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
{
// Si no hay lista de colores o los parámetros no son correctos => transparente
if( (value == null) || (parameter == null) || (_Colors.Count < 1) )
return Color.Transparent;
// Obtener índice del elemento en la lista
var index = ((ListView) parameter).ItemsSource.Cast<object> ().ToList ().IndexOf (value);
// Retornar el color que corresponda
return _Colors [index % _Colors.Count];
}
public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException ();
}
}
}
using inutralia.Utils;
using System;
using System.Globalization;
using Xamarin.Forms;
namespace inutralia
{
public class DateTransformator : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return DateUtilities.formatedDateFromTimeStamp((int)value, parameter != null ? parameter as string : culture.DateTimeFormat.ShortDatePattern);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
using System;
using System.Globalization;
using System.IO;
using Xamarin.Forms;
namespace inutralia.Converters
{
class ImageTransformator: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ImageSource.FromStream (() => new MemoryStream(System.Convert.FromBase64String ((string)value)));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
{
"navigationPage": {
"all": true
}
}
\ No newline at end of file
namespace inutralia
{
public class FontAwesomeFont
{
public const string AccountCircle = "\ue853";
public const string ArrowDown = "\ue313";
public const string ArrowLeft = "\ue314";
public const string ArrowRight = "\ue315";
public const string ArrowUp = "\ue316";
public const string AttachFile = "\ue226";
public const string Build = "\ue869";
public const string BoldArrowDown = "\ue904";
public const string BoldArrowLeft = "\ue90c";
public const string BoldArrowRight = "\ue90d";
public const string BoldArrowUp = "\ue90e";
public const string CardAmericaExpress = "\ue90f";
public const string CardGiftcard = "\ue8f6";
public const string CardMastercard = "\ue911";
public const string CardPaypal = "\ue912";
public const string CardVisa = "\ue913";
public const string Carousel = "\ue8eb";
public const string Certificate = "\ue901";
public const string ChatBubble = "\ue0ca";
public const string Check = "\ue5ca";
public const string CheckBox = "\ue834";
public const string CheckCircle = "\ue86c";
public const string Circle = "\ue902";
public const string Close = "\ue5cd";
public const string Code = "\ue86f";
public const string ColorPalette = "\ue3b7";
public const string Copy = "\ue14d";
public const string Create = "\ue150";
public const string CreditCard = "\ue870";
public const string CurrentLandscape = "\ue0d3";
public const string CurrentPortrait = "\ue0d4";
public const string Cut = "\ue14e";
public const string Dashboard = "\ue871";
public const string DesktopMac = "\ue30b";
public const string DesktopWindows = "\ue30c";
public const string Email = "\ue0be";
public const string Error = "\ue910";
public const string Event = "\ue878";
public const string Eye = "\ue417";
public const string Favorite = "\ue87d";
public const string FavoriteBorder = "\ue87e";
public const string FlashOn = "\ue3e7";
public const string Folder = "\ue2c7";
public const string FolderOpen = "\ue2c8";
public const string Forum = "\ue926";
public const string Group = "\ue7ef";
public const string Help = "\ue887";
public const string Hexagon = "\ue903";
public const string Hourglass = "\ue88c";
public const string InsertFile = "\ue24d";
public const string InsertPhoto = "\ue251";
public const string Label = "\ue892";
public const string List = "\ue896";
public const string LocalMovies = "\ue54d";
public const string Lock = "\ue897";
public const string LogoAndroid = "\ue859";
public const string LogoApple = "\ue954";
public const string LogoGrial = "\ue933";
public const string LogoWindows = "\ue934";
public const string Loop = "\ue028";
public const string Menu = "\ue5d2";
public const string Module = "\ue8f0";
public const string Music = "\ue405";
public const string Notifications = "\ue914";
public const string OutlineCircle = "\ue905";
public const string OutlineCircles = "\ue906";
public const string OutlineThinCircle = "\ue907";
public const string Paste = "\ue14f";
public const string Person = "\ue7fd";
public const string PhoneAndroid = "\ue324";
public const string PhoneIphone = "\ue325";
public const string PhotoCamera = "\ue412";
public const string Place = "\ue55f";
public const string Power = "\ue8ac";
public const string Public = "\ue80b";
public const string QueryBuilder = "\ue8ae";
public const string RoundOutlineRectangle = "\ue908";
public const string RoundRectangle = "\ue909";
public const string RoundedRectangle = "\ue90a";
public const string School = "\ue80c";
public const string Search = "\ue8b6";
public const string Send = "\ue163";
public const string Settings = "\ue8b8";
public const string SettingsApplications = "\ue8b9";
public const string SettingsRestore = "\ue8ba";
public const string Share = "\ue80d";
public const string ShoppingCart = "\ue8cc";
public const string SocialFacebook = "\ue93f";
public const string SocialFacebookVariant = "\ue940";
public const string SocialGooglePlus = "\ue941";
public const string SocialInstagram = "\ue942";
public const string SocialLinkedin = "\ue943";
public const string SocialTwitter = "\ue944";
public const string SocialVimeo = "\ue945";
public const string SocialWhatsapp = "\ue946";
public const string SocialYoutube = "\ue948";
public const string SocialYoutubeVariant = "\ue947";
public const string Star = "\ue838";
public const string StarBorder = "\ue83a";
public const string StarHalf = "\ue839";
public const string Storage = "\ue1db";
public const string Tab = "\ue8d8";
public const string TabletAndroid = "\ue330";
public const string TabletMac = "\ue331";
public const string Tasks = "\ue1db";
public const string Triangle = "\ue90b";
public const string Tune = "\ue429";
public const string Warning = "\ue915";
public const string WebAsset = "\ue069";
public const string ZoomIn = "\ue8ff";
public const string ZoomOut = "\ue900";
}
}
namespace inutralia
{
public class GrialShapesFont
{
public const string AccountCircle = "\ue853";
public const string ArrowDown = "\ue313";
public const string ArrowLeft = "\ue314";
public const string ArrowRight = "\ue315";
public const string ArrowUp = "\ue316";
public const string AttachFile = "\ue226";
public const string Build = "\ue869";
public const string BoldArrowDown = "\ue904";
public const string BoldArrowLeft = "\ue90c";
public const string BoldArrowRight = "\ue90d";
public const string BoldArrowUp = "\ue90e";
public const string CardAmericaExpress = "\ue90f";
public const string CardGiftcard = "\ue8f6";
public const string CardMastercard = "\ue911";
public const string CardPaypal = "\ue912";
public const string CardVisa = "\ue913";
public const string Carousel = "\ue8eb";
public const string Certificate = "\ue901";
public const string ChatBubble = "\ue0ca";
public const string Check = "\ue5ca";
public const string CheckBox = "\ue834";
public const string CheckCircle = "\ue86c";
public const string Circle = "\ue902";
public const string Close = "\ue5cd";
public const string Code = "\ue86f";
public const string ColorPalette = "\ue3b7";
public const string Copy = "\ue14d";
public const string Create = "\ue150";
public const string CreditCard = "\ue870";
public const string CurrentLandscape = "\ue0d3";
public const string CurrentPortrait = "\ue0d4";
public const string Cut = "\ue14e";
public const string Dashboard = "\ue871";
public const string DesktopMac = "\ue30b";
public const string DesktopWindows = "\ue30c";
public const string Email = "\ue0be";
public const string Error = "\ue910";
public const string Event = "\ue878";
public const string Eye = "\ue417";
public const string Favorite = "\ue87d";
public const string FavoriteBorder = "\ue87e";
public const string FlashOn = "\ue3e7";
public const string Folder = "\ue2c7";
public const string FolderOpen = "\ue2c8";
public const string Forum = "\ue926";
public const string Group = "\ue7ef";
public const string Help = "\ue887";
public const string Hexagon = "\ue903";
public const string Hourglass = "\ue88c";
public const string InsertFile = "\ue24d";
public const string InsertPhoto = "\ue251";
public const string Label = "\ue892";
public const string List = "\ue896";
public const string LocalMovies = "\ue54d";
public const string Lock = "\ue897";
public const string LogoAndroid = "\ue859";
public const string LogoApple = "\ue954";
public const string LogoGrial = "\ue933";
public const string LogoWindows = "\ue934";
public const string Loop = "\ue028";
public const string Menu = "\ue5d2";
public const string Module = "\ue8f0";
public const string Music = "\ue405";
public const string Notifications = "\ue914";
public const string OutlineCircle = "\ue905";
public const string OutlineCircles = "\ue906";
public const string OutlineThinCircle = "\ue907";
public const string Paste = "\ue14f";
public const string Person = "\ue7fd";
public const string PhoneAndroid = "\ue324";
public const string PhoneIphone = "\ue325";
public const string PhotoCamera = "\ue412";
public const string Place = "\ue55f";
public const string Power = "\ue8ac";
public const string Public = "\ue80b";
public const string QueryBuilder = "\ue8ae";
public const string RoundOutlineRectangle = "\ue908";
public const string RoundRectangle = "\ue909";
public const string RoundedRectangle = "\ue90a";
public const string School = "\ue80c";
public const string Search = "\ue8b6";
public const string Send = "\ue163";
public const string Settings = "\ue8b8";
public const string SettingsApplications = "\ue8b9";
public const string SettingsRestore = "\ue8ba";
public const string Share = "\ue80d";
public const string ShoppingCart = "\ue8cc";
public const string SocialFacebook = "\ue93f";
public const string SocialFacebookVariant = "\ue940";
public const string SocialGooglePlus = "\ue941";
public const string SocialInstagram = "\ue942";
public const string SocialLinkedin = "\ue943";
public const string SocialTwitter = "\ue944";
public const string SocialVimeo = "\ue945";
public const string SocialWhatsapp = "\ue946";
public const string SocialYoutube = "\ue948";
public const string SocialYoutubeVariant = "\ue947";
public const string Star = "\ue838";
public const string StarBorder = "\ue83a";
public const string StarHalf = "\ue839";
public const string Storage = "\ue1db";
public const string Tab = "\ue8d8";
public const string TabletAndroid = "\ue330";
public const string TabletMac = "\ue331";
public const string Tasks = "\ue1db";
public const string Triangle = "\ue90b";
public const string Tune = "\ue429";
public const string Warning = "\ue915";
public const string WebAsset = "\ue069";
public const string Whatshot = "\ue029";
public const string ZoomIn = "\ue8ff";
public const string ZoomOut = "\ue900";
public const string IpadStrokeDevice = "\ue916";
public const string IphoneStrokeDevice = "\ue917";
public const string AndroidPhoneStrokeDevice = "\ue918";
public const string AndroidTabletStrokeDevice = "\ue919";
public const string LogoLottie = "\ue91a";
public const string LogoVisualStudio = "\ue91b";
public const string LogoXamarinStudio = "\ue91c";
public const string LogoUxdivers = "\ue91d";
}
}
using System;
namespace inutralia
{
// Ionicons v2.0.0 Cheatsheet, 733 icons:
// Reference: http://ionicons.com/cheatsheet.html
public class IoniciconsFont
{
public const string Alert = "\uf101";
public const string AlertCircled = "\uf100";
public const string AndroidAdd = "\uf2c7";
public const string AndroidAddCircle = "\uf359";
public const string AndroidAlarmClock = "\uf35a";
public const string AndroidAlert = "\uf35b";
public const string AndroidApps = "\uf35c";
public const string AndroidArchive = "\uf2c9";
public const string AndroidArrowBack = "\uf2ca";
public const string AndroidArrowDown = "\uf35d";
public const string AndroidArrowDropdown = "\uf35f";
public const string AndroidArrowDropdownCircle = "\uf35e";
public const string AndroidArrowDropleft = "\uf361";
public const string AndroidArrowDropleftCircle = "\uf360";
public const string AndroidArrowDropright = "\uf363";
public const string AndroidArrowDroprightCircle = "\uf362";
public const string AndroidArrowDropup = "\uf365";
public const string AndroidArrowDropupCircle = "\uf364";
public const string AndroidArrowForward = "\uf30f";
public const string AndroidArrowUp = "\uf366";
public const string AndroidAttach = "\uf367";
public const string AndroidBar = "\uf368";
public const string AndroidBicycle = "\uf369";
public const string AndroidBoat = "\uf36a";
public const string AndroidBookmark = "\uf36b";
public const string AndroidBulb = "\uf36c";
public const string AndroidBus = "\uf36d";
public const string AndroidCalendar = "\uf2d1";
public const string AndroidCall = "\uf2d2";
public const string AndroidCamera = "\uf2d3";
public const string AndroidCancel = "\uf36e";
public const string AndroidCar = "\uf36f";
public const string AndroidCart = "\uf370";
public const string AndroidChat = "\uf2d4";
public const string AndroidCheckbox = "\uf374";
public const string AndroidCheckboxBlank = "\uf371";
public const string AndroidCheckboxOutline = "\uf373";
public const string AndroidCheckboxOutlineBlank = "\uf372";
public const string AndroidCheckmarkCircle = "\uf375";
public const string AndroidClipboard = "\uf376";
public const string AndroidClose = "\uf2d7";
public const string AndroidCloud = "\uf37a";
public const string AndroidCloudCircle = "\uf377";
public const string AndroidCloudDone = "\uf378";
public const string AndroidCloudOutline = "\uf379";
public const string AndroidColorPalette = "\uf37b";
public const string AndroidCompass = "\uf37c";
public const string AndroidContact = "\uf2d8";
public const string AndroidContacts = "\uf2d9";
public const string AndroidContract = "\uf37d";
public const string AndroidCreate = "\uf37e";
public const string AndroidDelete = "\uf37f";
public const string AndroidDesktop = "\uf380";
public const string AndroidDocument = "\uf381";
public const string AndroidDone = "\uf383";
public const string AndroidDoneAll = "\uf382";
public const string AndroidDownload = "\uf2dd";
public const string AndroidDrafts = "\uf384";
public const string AndroidExit = "\uf385";
public const string AndroidExpand = "\uf386";
public const string AndroidFavorite = "\uf388";
public const string AndroidFavoriteOutline = "\uf387";
public const string AndroidFilm = "\uf389";
public const string AndroidFolder = "\uf2e0";
public const string AndroidFolderOpen = "\uf38a";
public const string AndroidFunnel = "\uf38b";
public const string AndroidGlobe = "\uf38c";
public const string AndroidHand = "\uf2e3";
public const string AndroidHangout = "\uf38d";
public const string AndroidHappy = "\uf38e";
public const string AndroidHome = "\uf38f";
public const string AndroidImage = "\uf2e4";
public const string AndroidLaptop = "\uf390";
public const string AndroidList = "\uf391";
public const string AndroidLocate = "\uf2e9";
public const string AndroidLock = "\uf392";
public const string AndroidMail = "\uf2eb";
public const string AndroidMap = "\uf393";
public const string AndroidMenu = "\uf394";
public const string AndroidMicrophone = "\uf2ec";
public const string AndroidMicrophoneOff = "\uf395";
public const string AndroidMoreHorizontal = "\uf396";
public const string AndroidMoreVertical = "\uf397";
public const string AndroidNavigate = "\uf398";
public const string AndroidNotifications = "\uf39b";
public const string AndroidNotificationsNone = "\uf399";
public const string AndroidNotificationsOff = "\uf39a";
public const string AndroidOpen = "\uf39c";
public const string AndroidOptions = "\uf39d";
public const string AndroidPeople = "\uf39e";
public const string AndroidPerson = "\uf3a0";
public const string AndroidPersonAdd = "\uf39f";
public const string AndroidPhoneLandscape = "\uf3a1";
public const string AndroidPhonePortrait = "\uf3a2";
public const string AndroidPin = "\uf3a3";
public const string AndroidPlane = "\uf3a4";
public const string AndroidPlaystore = "\uf2f0";
public const string AndroidPrint = "\uf3a5";
public const string AndroidRadioButtonOff = "\uf3a6";
public const string AndroidRadioButtonOn = "\uf3a7";
public const string AndroidRefresh = "\uf3a8";
public const string AndroidRemove = "\uf2f4";
public const string AndroidRemoveCircle = "\uf3a9";
public const string AndroidRestaurant = "\uf3aa";
public const string AndroidSad = "\uf3ab";
public const string AndroidSearch = "\uf2f5";
public const string AndroidSend = "\uf2f6";
public const string AndroidSettings = "\uf2f7";
public const string AndroidShare = "\uf2f8";
public const string AndroidShareAlt = "\uf3ac";
public const string AndroidStar = "\uf2fc";
public const string AndroidStarHalf = "\uf3ad";
public const string AndroidStarOutline = "\uf3ae";
public const string AndroidStopwatch = "\uf2fd";
public const string AndroidSubway = "\uf3af";
public const string AndroidSunny = "\uf3b0";
public const string AndroidSync = "\uf3b1";
public const string AndroidTextsms = "\uf3b2";
public const string AndroidTime = "\uf3b3";
public const string AndroidTrain = "\uf3b4";
public const string AndroidUnlock = "\uf3b5";
public const string AndroidUpload = "\uf3b6";
public const string AndroidVolumeDown = "\uf3b7";
public const string AndroidVolumeMute = "\uf3b8";
public const string AndroidVolumeOff = "\uf3b9";
public const string AndroidVolumeUp = "\uf3ba";
public const string AndroidWalk = "\uf3bb";
public const string AndroidWarning = "\uf3bc";
public const string AndroidWatch = "\uf3bd";
public const string AndroidWifi = "\uf305";
public const string Aperture = "\uf313";
public const string Archive = "\uf102";
public const string ArrowDownA = "\uf103";
public const string ArrowDownB = "\uf104";
public const string ArrowDownC = "\uf105";
public const string ArrowExpand = "\uf25e";
public const string ArrowGraphDownLeft = "\uf25f";
public const string ArrowGraphDownRight = "\uf260";
public const string ArrowGraphUpLeft = "\uf261";
public const string ArrowGraphUpRight = "\uf262";
public const string ArrowLeftA = "\uf106";
public const string ArrowLeftB = "\uf107";
public const string ArrowLeftC = "\uf108";
public const string ArrowMove = "\uf263";
public const string ArrowResize = "\uf264";
public const string ArrowReturnLeft = "\uf265";
public const string ArrowReturnRight = "\uf266";
public const string ArrowRightA = "\uf109";
public const string ArrowRightB = "\uf10a";
public const string ArrowRightC = "\uf10b";
public const string ArrowShrink = "\uf267";
public const string ArrowSwap = "\uf268";
public const string ArrowUpA = "\uf10c";
public const string ArrowUpB = "\uf10d";
public const string ArrowUpC = "\uf10e";
public const string Asterisk = "\uf314";
public const string At = "\uf10f";
public const string Backspace = "\uf3bf";
public const string BackspaceOutline = "\uf3be";
public const string Bag = "\uf110";
public const string BatteryCharging = "\uf111";
public const string BatteryEmpty = "\uf112";
public const string BatteryFull = "\uf113";
public const string BatteryHalf = "\uf114";
public const string BatteryLow = "\uf115";
public const string Beaker = "\uf269";
public const string Beer = "\uf26a";
public const string Bluetooth = "\uf116";
public const string Bonfire = "\uf315";
public const string Bookmark = "\uf26b";
public const string Bowtie = "\uf3c0";
public const string Briefcase = "\uf26c";
public const string Bug = "\uf2be";
public const string Calculator = "\uf26d";
public const string Calendar = "\uf117";
public const string Camera = "\uf118";
public const string Card = "\uf119";
public const string Cash = "\uf316";
public const string Chatbox = "\uf11b";
public const string ChatboxWorking = "\uf11a";
public const string Chatboxes = "\uf11c";
public const string Chatbubble = "\uf11e";
public const string ChatbubbleWorking = "\uf11d";
public const string Chatbubbles = "\uf11f";
public const string Checkmark = "\uf122";
public const string CheckmarkCircled = "\uf120";
public const string CheckmarkRound = "\uf121";
public const string ChevronDown = "\uf123";
public const string ChevronLeft = "\uf124";
public const string ChevronRight = "\uf125";
public const string ChevronUp = "\uf126";
public const string Clipboard = "\uf127";
public const string Clock = "\uf26e";
public const string Close = "\uf12a";
public const string CloseCircled = "\uf128";
public const string CloseRound = "\uf129";
public const string ClosedCaptioning = "\uf317";
public const string Cloud = "\uf12b";
public const string Code = "\uf271";
public const string CodeDownload = "\uf26f";
public const string CodeWorking = "\uf270";
public const string Coffee = "\uf272";
public const string Compass = "\uf273";
public const string Compose = "\uf12c";
public const string ConnectionBars = "\uf274";
public const string Contrast = "\uf275";
public const string Crop = "\uf3c1";
public const string Cube = "\uf318";
public const string Disc = "\uf12d";
public const string Document = "\uf12f";
public const string DocumentText = "\uf12e";
public const string Drag = "\uf130";
public const string Earth = "\uf276";
public const string Easel = "\uf3c2";
public const string Edit = "\uf2bf";
public const string Egg = "\uf277";
public const string Eject = "\uf131";
public const string Email = "\uf132";
public const string EmailUnread = "\uf3c3";
public const string ErlenmeyerFlask = "\uf3c5";
public const string ErlenmeyerFlaskBubbles = "\uf3c4";
public const string Eye = "\uf133";
public const string EyeDisabled = "\uf306";
public const string Eemale = "\uf278";
public const string Filing = "\uf134";
public const string FilmMarker = "\uf135";
public const string Fireball = "\uf319";
public const string Flag = "\uf279";
public const string Flame = "\uf31a";
public const string Flash = "\uf137";
public const string FlashOff = "\uf136";
public const string Folder = "\uf139";
public const string Fork = "\uf27a";
public const string ForkRepo = "\uf2c0";
public const string Forward = "\uf13a";
public const string Funnel = "\uf31b";
public const string GearA = "\uf13d";
public const string GearB = "\uf13e";
public const string Grid = "\uf13f";
public const string Hammer = "\uf27b";
public const string Happy = "\uf31c";
public const string HappyOutline = "\uf3c6";
public const string Headphone = "\uf140";
public const string Heart = "\uf141";
public const string HeartBroken = "\uf31d";
public const string Help = "\uf143";
public const string HelpBuoy = "\uf27c";
public const string HelpCircled = "\uf142";
public const string Home = "\uf144";
public const string Icecream = "\uf27d";
public const string Image = "\uf147";
public const string Images = "\uf148";
public const string Information = "\uf14a";
public const string InformationCircled = "\uf149";
public const string Ionic = "\uf14b";
public const string IosAlarm = "\uf3c8";
public const string IosAlarmOutline = "\uf3c7";
public const string IosAlbums = "\uf3ca";
public const string IosAlbumsOutline = "\uf3c9";
public const string IosAmericanfootball = "\uf3cc";
public const string IosAmericanfootballOutline = "\uf3cb";
public const string IosAnalytics = "\uf3ce";
public const string IosAnalyticsOutline = "\uf3cd";
public const string IosArrowBack = "\uf3cf";
public const string IosArrowDown = "\uf3d0";
public const string IosArrowForward = "\uf3d1";
public const string IosArrowLeft = "\uf3d2";
public const string IosArrowRight = "\uf3d3";
public const string IosArrowThinDown = "\uf3d4";
public const string IosArrowThinLeft = "\uf3d5";
public const string IosArrowThinRight = "\uf3d6";
public const string IosArrowThinUp = "\uf3d7";
public const string IosArrowUp = "\uf3d8";
public const string IosAt = "\uf3da";
public const string IosAtOutline = "\uf3d9";
public const string IosBarcode = "\uf3dc";
public const string IosBarcodeOutline = "\uf3db";
public const string IosBaseball = "\uf3de";
public const string IosBaseballOutline = "\uf3dd";
public const string IosBasketball = "\uf3e0";
public const string IosBasketballOutline = "\uf3df";
public const string IosBell = "\uf3e2";
public const string IosBellOutline = "\uf3e1";
public const string IosBody = "\uf3e4";
public const string IosBodyOutline = "\uf3e3";
public const string IosBolt = "\uf3e6";
public const string IosBoltOutline = "\uf3e5";
public const string IosBook = "\uf3e8";
public const string IosBookOutline = "\uf3e7";
public const string IosBookmarks = "\uf3ea";
public const string IosBookmarksOutline = "\uf3e9";
public const string IosBox = "\uf3ec";
public const string IosBoxOutline = "\uf3eb";
public const string IosBriefcase = "\uf3ee";
public const string IosBriefcaseOutline = "\uf3ed";
public const string IosBrowsers = "\uf3f0";
public const string IosBrowsersOutline = "\uf3ef";
public const string IosCalculator = "\uf3f2";
public const string IosCalculatorOutline = "\uf3f1";
public const string IosCalendar = "\uf3f4";
public const string IosCalendarOutline = "\uf3f3";
public const string IosCamera = "\uf3f6";
public const string IosCameraOutline = "\uf3f5";
public const string IosCart = "\uf3f8";
public const string IosCartOutline = "\uf3f7";
public const string IosChatboxes = "\uf3fa";
public const string IosChatboxesOutline = "\uf3f9";
public const string IosChatbubble = "\uf3fc";
public const string IosChatbubbleOutline = "\uf3fb";
public const string IosCheckmark = "\uf3ff";
public const string IosCheckmarkEmpty = "\uf3fd";
public const string IosCheckmarkOutline = "\uf3fe";
public const string IosCircleFilled = "\uf400";
public const string IosCircleOutline = "\uf401";
public const string IosClock = "\uf403";
public const string IosClockOutline = "\uf402";
public const string IosClose = "\uf406";
public const string IosCloseEmpty = "\uf404";
public const string IosCloseOutline = "\uf405";
public const string IosCloud = "\uf40c";
public const string IosCloudDownload = "\uf408";
public const string IosCloudDownloadOutline = "\uf407";
public const string IosCloudOutline = "\uf409";
public const string IosCloudUpload = "\uf40b";
public const string IosCloudUploadOutline = "\uf40a";
public const string IosCloudy = "\uf410";
public const string IosCloudyNight = "\uf40e";
public const string IosCloudyNightOutline = "\uf40d";
public const string IosCloudyOutline = "\uf40f";
public const string IosCog = "\uf412";
public const string IosCogOutline = "\uf411";
public const string IosColorFilter = "\uf414";
public const string IosColorFilterOutline = "\uf413";
public const string IosColorWand = "\uf416";
public const string IosColorWandOutline = "\uf415";
public const string IosCompose = "\uf418";
public const string IosComposeOutline = "\uf417";
public const string IosContact = "\uf41a";
public const string IosContactOutline = "\uf419";
public const string IosCopy = "\uf41c";
public const string IosCopyOutline = "\uf41b";
public const string IosCrop = "\uf41e";
public const string IosCropStrong = "\uf41d";
public const string IosDownload = "\uf420";
public const string IosDownloadOutline = "\uf41f";
public const string IosDrag = "\uf421";
public const string IosEmail = "\uf423";
public const string IosEmailOutline = "\uf422";
public const string IosEye = "\uf425";
public const string IosEyeOutline = "\uf424";
public const string IosFastforward = "\uf427";
public const string IosFastforwardOutline = "\uf426";
public const string IosFiling = "\uf429";
public const string IosFilingOutline = "\uf428";
public const string IosFilm = "\uf42b";
public const string IosFilmOutline = "\uf42a";
public const string IosFlag = "\uf42d";
public const string IosFlagOutline = "\uf42c";
public const string IosFlame = "\uf42f";
public const string IosFlameOutline = "\uf42e";
public const string IosFlask = "\uf431";
public const string IosFlaskOutline = "\uf430";
public const string IosFlower = "\uf433";
public const string IosFlowerOutline = "\uf432";
public const string IosFolder = "\uf435";
public const string IosFolderOutline = "\uf434";
public const string IosFootball = "\uf437";
public const string IosFootballOutline = "\uf436";
public const string IosGameControllerA = "\uf439";
public const string IosGameControllerAOutline = "\uf438";
public const string IosGameControllerB = "\uf43b";
public const string IosGameControllerBOutline = "\uf43a";
public const string IosGear = "\uf43d";
public const string IosGearOutline = "\uf43c";
public const string IosGlasses = "\uf43f";
public const string IosGlassesOutline = "\uf43e";
public const string IosGridView = "\uf441";
public const string IosGridViewOutline = "\uf440";
public const string IosHeart = "\uf443";
public const string IosHeartOutline = "\uf442";
public const string IosHelp = "\uf446";
public const string IosHelpEmpty = "\uf444";
public const string IosHelpOutline = "\uf445";
public const string IosHome = "\uf448";
public const string IosHomeOutline = "\uf447";
public const string IosInfinite = "\uf44a";
public const string IosInfiniteOutline = "\uf449";
public const string IosInformation = "\uf44d";
public const string IosInformationEmpty = "\uf44b";
public const string IosInformationOutline = "\uf44c";
public const string IosIonicOutline = "\uf44e";
public const string IosKeypad = "\uf450";
public const string IosKeypadOutline = "\uf44f";
public const string IosLightbulb = "\uf452";
public const string IosLightbulbOutline = "\uf451";
public const string IosList = "\uf454";
public const string IosListOutline = "\uf453";
public const string IosLocation = "\uf456";
public const string IosLocationOutline = "\uf455";
public const string IosLocked = "\uf458";
public const string IosLockedOutline = "\uf457";
public const string IosLoop = "\uf45a";
public const string IosLoopStrong = "\uf459";
public const string IosMedical = "\uf45c";
public const string IosMedicalOutline = "\uf45b";
public const string IosMedkit = "\uf45e";
public const string IosMedkitOutline = "\uf45d";
public const string IosMic = "\uf461";
public const string IosMicOff = "\uf45f";
public const string IosMicOutline = "\uf460";
public const string IosMinus = "\uf464";
public const string IosMinusEmpty = "\uf462";
public const string IosMinusOutline = "\uf463";
public const string IosMonitor = "\uf466";
public const string IosMonitorOutline = "\uf465";
public const string IosMoon = "\uf468";
public const string IosMoonOutline = "\uf467";
public const string IosMore = "\uf46a";
public const string IosMoreOutline = "\uf469";
public const string IosMusicalNote = "\uf46b";
public const string IosMusicalNotes = "\uf46c";
public const string IosNavigate = "\uf46e";
public const string IosNavigateOutline = "\uf46d";
public const string IosNutrition = "\uf470";
public const string IosNutritionOutline = "\uf46f";
public const string IosPaper = "\uf472";
public const string IosPaperOutline = "\uf471";
public const string IosPaperplane = "\uf474";
public const string IosPaperplaneOutline = "\uf473";
public const string IosPartlysunny = "\uf476";
public const string IosPartlysunnyOutline = "\uf475";
public const string IosPause = "\uf478";
public const string IosPauseOutline = "\uf477";
public const string IosPaw = "\uf47a";
public const string IosPawOutline = "\uf479";
public const string IosPeople = "\uf47c";
public const string IosPeopleOutline = "\uf47b";
public const string IosPerson = "\uf47e";
public const string IosPersonOutline = "\uf47d";
public const string IosPersonadd = "\uf480";
public const string IosPersonaddOutline = "\uf47f";
public const string IosPhotos = "\uf482";
public const string IosPhotosOutline = "\uf481";
public const string IosPie = "\uf484";
public const string IosPieOutline = "\uf483";
public const string IosPint = "\uf486";
public const string IosPintOutline = "\uf485";
public const string IosPlay = "\uf488";
public const string IosPlayOutline = "\uf487";
public const string IosPlus = "\uf48b";
public const string IosPlusEmpty = "\uf489";
public const string IosPlusOutline = "\uf48a";
public const string IosPricetag = "\uf48d";
public const string IosPricetagOutline = "\uf48c";
public const string IosPricetags = "\uf48f";
public const string IosPricetagsOutline = "\uf48e";
public const string IosPrinter = "\uf491";
public const string IosPrinterOutline = "\uf490";
public const string IosPulse = "\uf493";
public const string IosPulseStrong = "\uf492";
public const string IosRainy = "\uf495";
public const string IosRainyOutline = "\uf494";
public const string IosRecording = "\uf497";
public const string IosRecordingOutline = "\uf496";
public const string IosRedo = "\uf499";
public const string IosRedoOutline = "\uf498";
public const string IosRefresh = "\uf49c";
public const string IosRefreshEmpty = "\uf49a";
public const string IosRefreshOutline = "\uf49b";
public const string IosReload = "\uf49d";
public const string IosReverseCamera = "\uf49f";
public const string IosReverseCameraOutline = "\uf49e";
public const string IosRewind = "\uf4a1";
public const string IosRewindOutline = "\uf4a0";
public const string IosRose = "\uf4a3";
public const string IosRoseOutline = "\uf4a2";
public const string IosSearch = "\uf4a5";
public const string IosSearchStrong = "\uf4a4";
public const string IosSettings = "\uf4a7";
public const string IosSettingsStrong = "\uf4a6";
public const string IosShuffle = "\uf4a9";
public const string IosShuffleStrong = "\uf4a8";
public const string IosSkipbackward = "\uf4ab";
public const string IosSkipbackwardOutline = "\uf4aa";
public const string IosSkipforward = "\uf4ad";
public const string IosSkipforwardOutline = "\uf4ac";
public const string IosSnowy = "\uf4ae";
public const string IosSpeedometer = "\uf4b0";
public const string IosSpeedometerOutline = "\uf4af";
public const string IosStar = "\uf4b3";
public const string IosStarHalf = "\uf4b1";
public const string IosStarOutline = "\uf4b2";
public const string IosStopwatch = "\uf4b5";
public const string IosStopwatchOutline = "\uf4b4";
public const string IosSunny = "\uf4b7";
public const string IosSunnyOutline = "\uf4b6";
public const string IosTelephone = "\uf4b9";
public const string IosTelephoneOutline = "\uf4b8";
public const string IosTennisball = "\uf4bb";
public const string IosTennisballOutline = "\uf4ba";
public const string IosThunderstorm = "\uf4bd";
public const string IosThunderstormOutline = "\uf4bc";
public const string IosTime = "\uf4bf";
public const string IosTimeOutline = "\uf4be";
public const string IosTimer = "\uf4c1";
public const string IosTimerOutline = "\uf4c0";
public const string IosToggle = "\uf4c3";
public const string IosToggleOutline = "\uf4c2";
public const string IosTrash = "\uf4c5";
public const string IosTrashOutline = "\uf4c4";
public const string IosUndo = "\uf4c7";
public const string IosUndoOutline = "\uf4c6";
public const string IosUnlocked = "\uf4c9";
public const string IosUnlockedOutline = "\uf4c8";
public const string IosUpload = "\uf4cb";
public const string IosUploadOutline = "\uf4ca";
public const string IosVideocam = "\uf4cd";
public const string IosVideocamOutline = "\uf4cc";
public const string IosVolumeHigh = "\uf4ce";
public const string IosVolumeLow = "\uf4cf";
public const string IosWineglass = "\uf4d1";
public const string IosWineglassOutline = "\uf4d0";
public const string IosWorld = "\uf4d3";
public const string IosWorldOutline = "\uf4d2";
public const string Ipad = "\uf1f9";
public const string Iphone = "\uf1fa";
public const string Ipod = "\uf1fb";
public const string Jet = "\uf295";
public const string Key = "\uf296";
public const string Knife = "\uf297";
public const string Laptop = "\uf1fc";
public const string Leaf = "\uf1fd";
public const string Levels = "\uf298";
public const string Lightbulb = "\uf299";
public const string Link = "\uf1fe";
public const string LoadA = "\uf29a";
public const string LoadB = "\uf29b";
public const string LoadC = "\uf29c";
public const string LoadD = "\uf29d";
public const string Location = "\uf1ff";
public const string LockCombination = "\uf4d4";
public const string Locked = "\uf200";
public const string LogIn = "\uf29e";
public const string LogOut = "\uf29f";
public const string Loop = "\uf201";
public const string Magnet = "\uf2a0";
public const string Male = "\uf2a1";
public const string Man = "\uf202";
public const string Map = "\uf203";
public const string Medkit = "\uf2a2";
public const string Merge = "\uf33f";
public const string MicA = "\uf204";
public const string MicB = "\uf205";
public const string MicC = "\uf206";
public const string Minus = "\uf209";
public const string MinusCircled = "\uf207";
public const string MinusRound = "\uf208";
public const string ModelS = "\uf2c1";
public const string Monitor = "\uf20a";
public const string More = "\uf20b";
public const string Mouse = "\uf340";
public const string MusicNote = "\uf20c";
public const string Navicon = "\uf20e";
public const string NaviconRound = "\uf20d";
public const string Navigate = "\uf2a3";
public const string Network = "\uf341";
public const string NoSmoking = "\uf2c2";
public const string Nuclear = "\uf2a4";
public const string Outlet = "\uf342";
public const string Paintbrush = "\uf4d5";
public const string Paintbucket = "\uf4d6";
public const string PaperAirplane = "\uf2c3";
public const string Paperclip = "\uf20f";
public const string Pause = "\uf210";
public const string Person = "\uf213";
public const string PersonAdd = "\uf211";
public const string PersonStalker = "\uf212";
public const string PieGraph = "\uf2a5";
public const string Pin = "\uf2a6";
public const string Pinpoint = "\uf2a7";
public const string Pizza = "\uf2a8";
public const string Plane = "\uf214";
public const string Planet = "\uf343";
public const string Play = "\uf215";
public const string Playstation = "\uf30a";
public const string Plus = "\uf218";
public const string PlusCircled = "\uf216";
public const string PlusRound = "\uf217";
public const string Podium = "\uf344";
public const string Pound = "\uf219";
public const string Power = "\uf2a9";
public const string Pricetag = "\uf2aa";
public const string Pricetags = "\uf2ab";
public const string Printer = "\uf21a";
public const string PullRequest = "\uf345";
public const string QrScanner = "\uf346";
public const string Quote = "\uf347";
public const string RadioWaves = "\uf2ac";
public const string Record = "\uf21b";
public const string Refresh = "\uf21c";
public const string Reply = "\uf21e";
public const string ReplyAll = "\uf21d";
public const string RibbonA = "\uf348";
public const string RibbonB = "\uf349";
public const string Sad = "\uf34a";
public const string SadOutline = "\uf4d7";
public const string Scissors = "\uf34b";
public const string Search = "\uf21f";
public const string Settings = "\uf2ad";
public const string Share = "\uf220";
public const string Shuffle = "\uf221";
public const string SkipBackward = "\uf222";
public const string SkipForward = "\uf223";
public const string SocialAndroid = "\uf225";
public const string SocialAndroidOutline = "\uf224";
public const string SocialAngular = "\uf4d9";
public const string SocialAngularOutline = "\uf4d8";
public const string SocialApple = "\uf227";
public const string SocialAppleOutline = "\uf226";
public const string SocialBitcoin = "\uf2af";
public const string SocialBitcoinOutline = "\uf2ae";
public const string SocialBuffer = "\uf229";
public const string SocialBufferOutline = "\uf228";
public const string SocialChrome = "\uf4db";
public const string SocialChromeOutline = "\uf4da";
public const string SocialCodepen = "\uf4dd";
public const string SocialCodepenOutline = "\uf4dc";
public const string SocialCss3 = "\uf4df";
public const string SocialCss3Outline = "\uf4de";
public const string SocialDesignernews = "\uf22b";
public const string SocialDesignernewsOutline = "\uf22a";
public const string SocialDribbble = "\uf22d";
public const string SocialDribbbleOutline = "\uf22c";
public const string SocialDropbox = "\uf22f";
public const string SocialDropboxOutline = "\uf22e";
public const string SocialEuro = "\uf4e1";
public const string SocialEuroOutline = "\uf4e0";
public const string SocialFacebook = "\uf231";
public const string SocialFacebookOutline = "\uf230";
public const string SocialFoursquare = "\uf34d";
public const string SocialFoursquareOutline = "\uf34c";
public const string SocialFreebsdDevil = "\uf2c4";
public const string SocialGithub = "\uf233";
public const string SocialGithubOutline = "\uf232";
public const string SocialGoogle = "\uf34f";
public const string SocialGoogleOutline = "\uf34e";
public const string SocialGoogleplus = "\uf235";
public const string SocialGoogleplusOutline = "\uf234";
public const string SocialHackernews = "\uf237";
public const string SocialHackernewsOutline = "\uf236";
public const string SocialHtml5 = "\uf4e3";
public const string SocialHtml5Outline = "\uf4e2";
public const string SocialInstagram = "\uf351";
public const string SocialInstagramOutline = "\uf350";
public const string SocialJavascript = "\uf4e5";
public const string SocialJavascriptOutline = "\uf4e4";
public const string SocialLinkedin = "\uf239";
public const string SocialLinkedinOutline = "\uf238";
public const string SocialMarkdown = "\uf4e6";
public const string SocialNodejs = "\uf4e7";
public const string SocialOctocat = "\uf4e8";
public const string SocialPinterest = "\uf2b1";
public const string SocialPinterestOutline = "\uf2b0";
public const string SocialPython = "\uf4e9";
public const string SocialReddit = "\uf23b";
public const string SocialRedditOutline = "\uf23a";
public const string SocialRss = "\uf23d";
public const string SocialRssOutline = "\uf23c";
public const string SocialSass = "\uf4ea";
public const string SocialSkype = "\uf23f";
public const string SocialSkypeOutline = "\uf23e";
public const string SocialSnapchat = "\uf4ec";
public const string SocialSnapchatOutline = "\uf4eb";
public const string SocialTumblr = "\uf241";
public const string SocialTumblrOutline = "\uf240";
public const string SocialTux = "\uf2c5";
public const string SocialTwitch = "\uf4ee";
public const string SocialTwitchOutline = "\uf4ed";
public const string SocialTwitter = "\uf243";
public const string SocialTwitterOutline = "\uf242";
public const string SocialUsd = "\uf353";
public const string SocialUsdOutline = "\uf352";
public const string SocialVimeo = "\uf245";
public const string SocialVimeoOutline = "\uf244";
public const string SocialWhatsapp = "\uf4f0";
public const string SocialWhatsappOutline = "\uf4ef";
public const string SocialWindows = "\uf247";
public const string SocialWindowsOutline = "\uf246";
public const string SocialWordpress = "\uf249";
public const string SocialWordpressOutline = "\uf248";
public const string SocialYahoo = "\uf24b";
public const string SocialYahooOutline = "\uf24a";
public const string SocialYen = "\uf4f2";
public const string SocialYenOutline = "\uf4f1";
public const string SocialYoutube = "\uf24d";
public const string SocialYoutubeOutline = "\uf24c";
public const string SoupCan = "\uf4f4";
public const string SoupCanOutline = "\uf4f3";
public const string Speakerphone = "\uf2b2";
public const string Speedometer = "\uf2b3";
public const string Spoon = "\uf2b4";
public const string Star = "\uf24e";
public const string StatsBars = "\uf2b5";
public const string Steam = "\uf30b";
public const string Stop = "\uf24f";
public const string Thermometer = "\uf2b6";
public const string Thumbsdown = "\uf250";
public const string Thumbsup = "\uf251";
public const string Toggle = "\uf355";
public const string ToggleFilled = "\uf354";
public const string Transgender = "\uf4f5";
public const string TrashA = "\uf252";
public const string TrashB = "\uf253";
public const string Trophy = "\uf356";
public const string Tshirt = "\uf4f7";
public const string TshirtOutline = "\uf4f6";
public const string Umbrella = "\uf2b7";
public const string University = "\uf357";
public const string Unlocked = "\uf254";
public const string Upload = "\uf255";
public const string Usb = "\uf2b8";
public const string Videocamera = "\uf256";
public const string VolumeHigh = "\uf257";
public const string VolumeLow = "\uf258";
public const string VolumeMedium = "\uf259";
public const string VolumeMute = "\uf25a";
public const string Wand = "\uf358";
public const string Waterdrop = "\uf25b";
public const string Wifi = "\uf25c";
public const string Wineglass = "\uf2b9";
public const string Woman = "\uf25d";
public const string Wrench = "\uf2ba";
public const string Xbox = "\uf30c";
}
}
// Helpers/Settings.cs
using Plugin.Settings;
using Plugin.Settings.Abstractions;
namespace inutralia.Helpers
{
/// <summary>
/// This is the Settings static class that can be used in your Core solution or in any
/// of your client applications. All settings are laid out the same exact way with getters
/// and setters.
/// </summary>
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
#region Setting Constants
private const string SettingsKey = "settings_key";
private static readonly string SettingsDefault = string.Empty;
#endregion
public static string GeneralSettings
{
get
{
return AppSettings.GetValueOrDefault<string>(SettingsKey, SettingsDefault);
}
set
{
AppSettings.AddOrUpdateValue<string>(SettingsKey, value);
}
}
}
}
\ No newline at end of file
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=Generator content="Microsoft Word 14 (filtered)">
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
{font-family:"MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Lucida Grande";}
@font-face
{font-family:"Century Gothic";
panose-1:2 11 5 2 2 2 2 2 2 4;}
@font-face
{font-family:"Trebuchet MS";
panose-1:2 11 6 3 2 2 2 2 2 4;}
@font-face
{font-family:Times;
panose-1:2 2 6 3 5 4 5 2 3 4;}
@font-face
{font-family:"\@MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
{font-family:Georgia;
panose-1:2 4 5 2 5 4 5 2 3 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
{mso-style-link:"Texto comentario Car";
margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
{mso-style-link:"Texto independiente Car";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:12.0pt;
font-family:"Arial","sans-serif";}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
p
{margin-right:0cm;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
{mso-style-link:"Asunto del comentario Car";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Times New Roman","serif";
font-weight:bold;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-link:"Texto de globo Car";
margin:0cm;
margin-bottom:.0001pt;
font-size:9.0pt;
font-family:"Lucida Grande";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:35.4pt;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
p.Default, li.Default, div.Default
{mso-style-name:Default;
margin:0cm;
margin-bottom:.0001pt;
text-autospace:none;
font-size:12.0pt;
font-family:"Times New Roman","serif";
color:black;}
p.CM4, li.CM4, div.CM4
{mso-style-name:CM4;
margin-top:0cm;
margin-right:0cm;
margin-bottom:8.4pt;
margin-left:0cm;
text-autospace:none;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.TextocomentarioCar
{mso-style-name:"Texto comentario Car";
mso-style-link:"Texto comentario";
font-family:"Times New Roman","serif";}
span.AsuntodelcomentarioCar
{mso-style-name:"Asunto del comentario Car";
mso-style-link:"Asunto del comentario";
font-family:"Times New Roman","serif";
font-weight:bold;}
span.TextodegloboCar
{mso-style-name:"Texto de globo Car";
mso-style-link:"Texto de globo";
font-family:"Lucida Grande";}
span.TextoindependienteCar
{mso-style-name:"Texto independiente Car";
mso-style-link:"Texto independiente";
font-family:"Arial","sans-serif";}
.MsoChpDefault
{font-size:12.0pt;}
@page WordSection1
{size:595.0pt 842.0pt;
margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
</head>
<body lang=ES link=blue vlink=purple>
<div class=WordSection1>
<p class=MsoNormal align=center style='text-align:center;text-autospace:none'><b><span
lang=ES-TRAD style='font-family:"Century Gothic","sans-serif"'>Aviso Legal y
Condiciones Generales de Uso y Servicio, Política de Privacidad de la App NUTRICION
PLANNER</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><a
name="OLE_LINK2"></a><a name="OLE_LINK1"><b><span style='font-size:11.0pt;
font-family:"Century Gothic","sans-serif"'>I.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></b><b><span style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>Aviso
Legal. Información de titularidad y contacto.</span></b></a></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#242424'>Mediante la utilización de la presente Aplicación Móvil (App), Nutricion
PLanner el Usuario acepta expresamente las condiciones recogidas en el&nbsp;
presente Aviso Legal y sus Condiciones Generales de Uso. En consecuencia <b>no
debería utilizar esta Aplicación en caso de no aceptar</b> las Condiciones
Generales de Uso de la misma&nbsp; y los términos que se detallan a
continuación.</span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#262626'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:#262626'>Titular
del Servicio:</span></b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#262626'> Inutralia Feeding, S.L.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:#262626'>Domicilio</span></b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:#262626'>:
Cl. La Granja, 5, Edificio B, 1º, 28108 Alcobendas (Madrid)</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:#262626'>Contacto
electrónico</span></b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#262626'></span><span lang=ES-TRAD><a href="mailto:info@inutralia.com"><span
lang=ES style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>info@inutralia.com</span></a></span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:#262626'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><b><span
lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#222222'>La utilización de esta  App implica la plena aceptación de las
disposiciones incluidas en sus Condiciones Generales de Uso</span></b><span
lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#222222'>, vigentes en cada momento, en consecuencia, será
responsabilidad de todo Usuario la atenta lectura de señaladas Condiciones, en
cada una de las ocasiones que acceda a esta App. Inutralia Feeding, S.L.</span><span
lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>
se reserva pleno derecho a revisar las presentes Condiciones Generales de Uso
en cualquier momento, por cualquier razón de tipo legal, por motivos técnicos o
por cambios en la prestación del Servicio. De ocurrir modificación, se
publicarán las nuevas Condiciones Generales de Uso de la Aplicación, la mera
continuidad en el uso del Servicio será - y así se entenderá – el otorgamiento
de su plena aceptación a las modificaciones introducidas. El Usuario, de no
estar conforme con las nuevas Condiciones, podrá darse de baja del Servicio
borrando de su terminal la Aplicación.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:#222222'>Las Condiciones Generales están, en todo caso, sujetas al marco
jurídico establecido por la Ley 34/2002, de 11 de julio, de Servicios de la
Sociedad de la Información y de Comercio Electrónico y por la normativa de
protección de datos personales, cuyo marco normativo lo determina la L.O.
15/1999, de 13 de diciembre y su reglamento de desarrollo R.D. 1720/2007, de 21
de diciembre.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><b><span
style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>II.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></b><b><span style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>Condiciones
Generales de Uso</span></b></p>
<ol style='margin-top:0cm' start=1 type=1>
<li class=MsoNormal style='color:#222222;text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>Acceso y utilización de la App
Nutricion Planner</span></b></li>
</ol>
<p class=MsoNormal style='margin-left:18.0pt;text-align:justify;text-justify:
inter-ideograph;text-autospace:none'><b><span lang=ES-TRAD style='font-size:
10.0pt;font-family:"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>Obligación de uso correcto de
servicios y contenidos.</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>El Usuario se compromete a hacer
un uso diligente del mismo y de los servicios accesibles desde esta Aplicación,
con total sujeción a la Ley, a las buenas costumbres, a las presentes
Condiciones Generales y, en cada caso concreto, a sus condiciones particulares.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>Queda expresamente prohibido
cualquier uso diferente a la finalidad de esta Aplicación. En este sentido, el
Usuario renunciará a utilizar cualquiera de los materiales e informaciones
contenidos en esta Aplicación con fines ilícitos y  los expresamente prohibidos
en las presentes Condiciones Generales de Uso. Deberá responder frente al al
Titular licenciatario de la Plataforma y/o terceros en caso de contravenir o
incumplir dichas obligaciones y/o que, de cualquier modo (incluida la
introducción o difusión de &quot;virus informáticos&quot;), dañe, inutilice,
sobrecargue, deteriore o impida la normal utilización de los contenidos e
informaciones incluidos en la Aplicación, los sistemas de información o los
documentos, archivos y toda clase de contenidos almacenados en cualquier equipo
informático del Licenciatario o de cualquier otro Usuario de la Aplicación.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los usuarios de esta Aplicación no están
autorizado a descompilar o aplicar ingeniería inversa para intentar descubrir
código fuente de los contenidos y software que contenga.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Alcance,
limitaciones y obligaciones de las partes</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El Usuario debe acceder a la App Nutricion PLanner
de acuerdo con la buena fe, las normas de orden público, estas condiciones de
uso y servicio, así como la normativa vigente respecto de servicios de la
sociedad de la información, protección de datos personales, principalmente,
pero no de forma limitativa. El acceso a la App Nutricion Planner y el uso de
sus contenidos se hace bajo la responsabilidad propia y exclusiva del Usuario,
que responderá en todo caso los daños y perjuicios que cause al Licenciatario o
a terceros.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Se informa al Usuario, que el uso de la
aplicación requiere del acceso a redes de comunicación, acceso que puede quedar
sujeto a cargos en función de las condiciones que mantenga con su operado de
telecomunicaciones.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El servicio proporcionado por la Aplicación Nutricion
Planner puede suspenderse o eliminarse en cualquier momento, sin previo aviso y
en todo caso si se produce una vulneración de las Condiciones de Uso y Servicio
aquí recogidas.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El Usuario también podrá eliminar la aplicación
de su dispositivo móvil en cualquier momento, la eliminación de la aplicación
no implica la eliminación automática de los datos personales solicitados en el
momento del registro y descarga, quedando los mismos sujetos a nuestra Política
de Privacidad, pudiendo el usuario ejercitar sus derechos amparados por la
normativa de protección de datos personales.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El Usuario se compromete a mantener actualizada
esta Aplicación móvil usándola únicamente en la última versión disponible. Versiones
anteriores a la última disponible pueden no funcionar adecuadamente por estar
desactualizadas.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<ol style='margin-top:0cm' start=3 type=1>
<li class=MsoNormal style='color:#222222;text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>Exclusión de garantías y
responsabilidad</span></b></li>
</ol>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>Por el funcionamiento y servicios
de la Aplicación </span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>Inutralia Feeding, S.L.,  no
garantiza la disponibilidad, continuidad ni la infalibilidad del funcionamiento
de la Aplicación, ni de los servicios a los que se puedan acceder (sea cual sea
el medio de acceso a los mismos – Web o App -), en consecuencia excluye, en la
máxima medida permitida por la legislación vigente, cualquier responsabilidad
por los daños y perjuicios de toda naturaleza, que puedan deberse a la falta de
disponibilidad o de continuidad del funcionamiento del Aplicación y de los
servicios habilitados en el mismo, así como, a los errores en el acceso a las
distintos soportes desde las que, en su caso, se presten dichos servicios.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:#222222'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Por enlaces</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-indent:35.4pt;text-autospace:none'><b><span lang=ES-TRAD style='font-size:
10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Enlaces a
avisos, noticias y Sede Electrónica </span></b></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>En la Aplicación el Usuario pudiera encontrar
diversos enlaces que le condujeran a servicios independientes de ésta. Su única
finalidad será la de facilitar el acceso a otras fuentes de información en
Internet relacionadas con los servicios ofrecidos o de carácter general. Su
inserción en esta Aplicación está inspirada en el respeto de los derechos de
propiedad intelectual e industrial que, en su caso, puedan corresponder a sus
autores y titulares legítimos.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Por enlaces
a redes sociales desde Aplicación</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Las relaciones que allí se den se regularán, en
primer lugar por las condiciones de uso y privacidad marcadas por los titulares
de las concretas redes sociales y, de forma subsidiaria, por las presentes
condiciones en cuanto los servicios que el titular de ésta App presta. En
ningún caso Inutralia Feeding, S.L., podrá considerarse como responsable o
co-responsable de lo determinado en la red social que sea al caso. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L.,  no se hace responsable
de los contenidos a los que se acceda en virtud de los mencionados enlaces a
Redes Sociales, ni del uso que de aquellos se realice, ni de su disponibilidad
técnica. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>4.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Instalación
y área que requiere registro de alta.</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El acceso y la utilización de esta aplicación
otorgan la condición de Usuario. Con carácter general, para el acceso a los
Servicios de la presente Aplicación móvil,  será necesario el registro del
Usuario. No obstante, la instalación de la Aplicación en su terminal móvil
solicitará una serie de permisos  - que más abajo se detallan -. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>La utilización de la Aplicación requiere una
línea telefónica móvil en funcionamiento y acceso a Internet por lo que el
Usuario deberá disponer, en todo caso, del dispositivo, la  línea telefónica
con conexión a internet para su uso.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L., no garantiza que se
pueda acceder a esta Aplicación desde cualquier dispositivo o tipo de conexión
a Datos, como tampoco puede asegurar un buen funcionamiento bajo cualquier
circunstancia ya que dependerán en gran medida del entorno de conectividad en
que se encuentra el Usuario. Asimismo, Inutralia Feeding, S.L no puede afirmar
que esta Aplicación esté disponible en todos los puntos geográficos desde los
que el Usuario desee hacer uso de ella.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El Usuario acepta que, al usar esta Aplicación,
su operador de telefonía, bajo las condiciones que con él mantenga, pueda
cobrarle su tarifa estipulada por conexión a la Red de Datos, siendo Inutralia
Feeding, S.L  en todo caso ajeno a la relación del los usuarios de la
Aplicación con su operador.. Por tanto, deberá consultar con su operador qué
cargos le son aplicables. El Usuario es el único y exclusivo responsable de los
gastos que puedan derivarse del acceso a la Aplicación desde su dispositivo
móvil. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Esta Aplicación puede hacer un uso frecuente del
servicio de localización GPS en segundo plano. El uso continuado del GPS
funcionando en segundo plano puede reducir drásticamente la duración de la
batería.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Registro</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Para acceder y usar determinadas áreas de la
Aplicación, los Usuarios deberán formalizar su registro mediante un usuario y
contraseña en un formulario (el &quot;Formulario de Registro&quot;) que aparece
en la Aplicación. Inutralia Feeding, S.L se reserva el derecho de aceptar o
rechazar libremente la solicitud de cualquier Usuario. Una vez recibidos los
datos, se procederá a crear una cuenta de usuario. Desde ese momento, el
Usuario habilitado podrá acceder a servicios completos ofrecidos por la
Aplicación y usar los mismo en la forma prevista en estas Condiciones Generales
de Uso del Aplicación. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'><br>
A estos efectos, llegado el caso que el acceso a áreas limitadas y/o el uso de
los Contenidos y/o Servicios sea realizado bajo una clave de un Usuario
Registrado, se reputarán realizadas por dicho Usuario Registrado, quien
responderá en todo caso de dicho acceso y uso. Los Usuarios Registrados podrán recuperar
en cualquier momento su clave asignada mediante la propia Aplicación. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Registro
mediante Redes Sociales</span></b></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L podrá usar aplicaciones
proporcionadas por redes sociales, como puede ser “Google + Sign in”, “Facebook
Connect”, que permiten acceder a los apartados de acceso restringido a usuarios
Registrados con los datos de la cuenta de usuario en esa red social, a la vez
que permiten ofrecer una experiencia social y personalizada de tu interacción.
Las principales redes sociales, como Facebook y Google+ tienen sus propias
normas de uso de estas posibilidades que brindan sus respectivas plataformas,
que permiten decidir a qué tipo de información pueden acceder las aplicaciones
que permiten la conexión desde terceros sitios, pueden ser consultadas en:</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<div style='border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><i><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Google +:</span></i></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><i><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></i></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Implica la
aceptación de las Políticas y principios de Google + &gt;&gt; http://www.google.com/intl/es/+/policy/content.html</span></p>
</div>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<div style='border:solid windowtext 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><i><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Facebook: </span></i></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none;border:none;padding:0cm'><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Configuración
de la privacidad &gt;&gt; Aplicaciones &gt; Aplicaciones que usan otras
personas.</span></p>
</div>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>c.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Accesos en
el terminal móvil</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Informamos a los Usuarios de la App Nutricioj
PLanner que nuestra aplicación puede acceder e interactuar con su dispositivo
móvil de la siguiente forma:</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a la ubicación precisa de fuentes de localización como GPS, antenas de
telefonía móvil y Wi-Fi.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a Internet</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
al historial de aplicaciones y del dispositivo.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a la identidad del dispositivo</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a información sobre redes&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a la cámara del dispositivo.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a la lista de cuentas en el servicio de Cuentas</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Abrir
sockets de red.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
a archivos, fotos y archivos multimedia</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceso
de sólo lectura al estado de teléfono.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Solicitar
tokens de autenticación del Administrador de cuentas</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Evitar
atenuar la pantalla o suspender el dispositivo o su entrada en modo de espera.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Leer
de almacenamiento externo</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Escribir
en el almacenamiento externo.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-indent:-18.0pt'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Uso
de servicios GCM.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Acceder
al mapa de Google desde la aplicación.</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Leer
y configurar los servicios de Google</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>5.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Uso de
Chats, Foros y Redes Sociales</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los chats, foros y redes sociales públicos y las
características ofrecidas en ellos suelen estar destinados a comunicaciones
públicas, no privadas. Tenga en cuenta que siempre que da a conocer información
personal en línea a través de una red social chat o foro, esa información puede
ser recogida y usada por tercereas personas.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>a. Chats y/o foros</span></b></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Nos reservamos el derecho de revisar, retirar o
modificar los posibles comentarios efectuados por los usuarios en los chats y
foros vinculados a esta Aplicación y los servicios prestados en la Plataforma
Mejora tu Ciudad y no se ajusten a las normas recogidas en las presentes
condiciones de uso o atenten o sean susceptibles de atentar contra los derechos
de terceros, a nuestra total discreción y sin notificación previa, si bien no
tenemos obligación alguna de hacerlo ni de controlar ningún foro público. No
nos hacemos responsables de los comentarios introducidos por usuarios</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los posibles comentarios de los Usuarios quedan
en todo caso sometidos a nuestra <u>Política de Privacidad</u>.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L sólo se responsabiliza de
aquellas opiniones o comentarios realizados por su equipo, desentendiéndose de
los datos o comentarios ofrecidos por terceros en sus intervenciones, como
pueden ser opiniones, valoraciones o datos específicos, como pueden ser
imágenes o puntos de geolocalización, expuestas implícitamente o explícitamente.
Todos los contenidos mostrados se hacen por aportación y con el consentimiento
expreso de sus titulares. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Se prohíbe cualquier difusión de los contenidos
sin mencionar la fuente.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>b. Redes Sociales</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L es ajeno al
funcionamiento de las redes sociales y no guarda relación de ningún tipo con
los titulares de las mismas, siendo estas un mero instrumento o canal de
comunicación, dónde, en cuanto a la esfera de la información personal que de
allí pudiera conocerse, quedará sometida a nuestra <u>Política de Privacidad</u>.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>6.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Política de
Privacidad de la Aplicación Nutricion Planner</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>En caso de no estar de acuerdo con el necesario
tratamiento de datos personales, no proceda a la descarga en su terminal de
nuestra aplicación.</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=CM4 style='text-align:justify;text-justify:inter-ideograph;line-height:
10.3pt'><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>En
cumplimiento de lo establecido en la Ley Orgánica 15/1999, de 13 de diciembre,
de Protección de Datos de Carácter Personal (en lo sucesivo, LOPD) y su
reglamento de desarrollo, Inutralia Feeding, S.L pone en conocimiento de los
usuarios de esta App lo siguiente: </span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>I.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Los datos que los usuarios faciliten como consecuencia del
acceso y/o la utilización del formulario de registro, al que se accede mediante
la propia Aplicación, serán objeto de tratamiento automatizado e incorporados en
un fichero, cuyo titular es </span><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L </span><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>(en
lo sucesivo, El TITULAR) y se encuentra inscrito en el Registro General de la
Agencia Española de Protección de Datos con el nº 2123270172. Los datos no
serán cedidos salvo cesiones previstas por ley. </span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>II.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Al facilitar datos de carácter personal, los usuarios
garantizarán y responden de su veracidad, exactitud, autenticidad y vigencia.
En este sentido, será obligación de los usuarios mantener actualizados los
datos, de forma tal que correspondan a la realidad en cada momento. </span></p>
<p class=Default style='text-align:justify;text-justify:inter-ideograph'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>&nbsp;</span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>III.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Los contenidos de la aplicación Nutricion Planner son válidos
para todo tipo de público, si bien, los servicios requieren de registro que
implican necesariamente el tratamiento de datos personales, hecho que el menor
de catorce años no puede, ni debe, realizar sin la supervisión de sus padres o
tutores. La plena responsabilidad en la navegación en Internet y los concretos
contenidos y servicios a los que acceden los menores de edad, corresponde a los
mayores a cuyo cargo se encuentran. </span></p>
<p class=MsoNormal><span lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span>IV.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Asimismo, al facilitar datos de carácter personal mediante el
acceso y la utilización de la app Nutricion Planner, los usuarios declaran
aceptar plenamente y sin reservas la incorporación de los datos facilitados a
los ficheros de EL TITULAR y su tratamiento automatizado, en los términos
estipulados en el presente documento. </span></p>
<p class=Default style='text-align:justify;text-justify:inter-ideograph'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>V.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Para
descargar la App y acceder a determinadas funcionalidades, es necesario acceder
a las plataformas de contenidos de Apple Store y Google Play Android Market,
con las correspondientes cuentas de usuario particulares de cada Usuario, la
descarga de la aplicación implica el facilitar determinadas datos, algunos de
los cuales tendrán la catalogación de datos personales. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>VI.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>La
App, con la finalidad de poder prestar eficazmente el servicio para el cual se ha
creado, podrá captar datos automáticamente de carácter técnico, que son: los
datos relativos al tipo de dispositivo empleado, su sistema operativo, IP, tipo
de navegador, idioma y datos de ubicación del usuario en función de los medios
y configuración de su dispositivo. Estos datos, por si solos, no constituyen
datos de carácter personal, pero de su combinación, podría resultar un perfil
que queda sujeto a la normativa de protección de datos personales. Al descargar
y usar la Aplicación Nutricion Planner, usted Usuario, <b>presta pleno
consentimiento al tratamiento de datos personales que implica el uso de la
misma y de los servicios que facilita</b>, señalados en el apartado de “accesos
en el terminal móvil”</span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph'><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>&nbsp;</span></p>
<p class=Default style='text-align:justify;text-justify:inter-ideograph'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span>VII.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Los
usuarios podrán ejercitar, en cualquier momento, los derechos de acceso,
rectificación, cancelación y oposición de sus datos recopilados y archivados. <b>La
dirección donde podrá ejercer los derechos de acceso, rectificación,
cancelación y oposición es Cl. La Granja, nº 15, Edificio B, 1º, 28108
Alcobendas (Madrid). El ejercicio de estos derechos podrá efectuarse </b></span><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>por
cualquier de los canales de comunicación a Inutralia Feeding, S.L.,
especialmente mediante la dirección  </span><a href="mailto:info@inutralia.com"><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>info@inutralia.com</span></a><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>, indicando
expresamente que se desean ejercer los derechos sobre la  NUtricion PLanner</span><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>, así como
referencia “datos personales” y el concreto derecho en que versen su
pretensión.</span></b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>
Por tratarse de ejercicios de derechos de carácter personalísimo, <b>es
imprescindible que junto con su solicitud acompañen copia de su documento de
identificación (DNI, NIF o pasaporte) </b></span></p>
<p class=MsoListParagraph><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=Default style='margin-left:36.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-36.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'><span style='font:7.0pt "Times New Roman"'> </span>VIII.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Los datos registrados podrán ser utilizados</span></b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>
con la finalidad de:</span></p>
<p class=Default style='text-align:justify;text-justify:inter-ideograph'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:windowtext'>&nbsp;</span></p>
<p class=Default style='margin-left:72.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-18.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'>a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Prestar, administrar, gestionar y mejorar los servicios y productos
ofrecidos en la app</span></p>
<p class=Default style='margin-left:72.0pt;text-align:justify;text-justify:
inter-ideograph;text-indent:-18.0pt'><span style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif";color:windowtext'>b.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>Asimismo podrán ser utilizados para efectuar estadísticas,
enviar información  y avisos</span></p>
<p class=Default style='margin-left:72.0pt;text-align:justify;text-justify:
inter-ideograph'><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";
color:windowtext'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'><span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span>IX.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Vigencia
de la Política de Privacidad</span></b><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>. La Política de Privacidad puede
ser modificados en cualquier momento y sin previo aviso. Entrarán en vigor
desde el momento de su publicación y el usuario consentirá el nuevo texto
válida e irrevocablemente si continúa usando la App. Esta publicación puede
realizarse mediante las plataformas de Apple Store y Google Play Android
Market.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>7.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Propiedad Industrial
e Intelectual</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><b><span
lang=ES-TRAD style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>a.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Otorgación
de Licencia de Uso</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Mediante la instalación y uso de esta Aplicación,
se concede una licencia personal con alcance limitado y no exclusivo y limitada
para instalar y utilizar la Aplicación con fines no comerciales en un único
dispositivo móvil.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>La duración de la licencia comenzará en la fecha
en que se instale la Aplicación y terminará cuando se dé alguna de las
circunstancias siguientes: </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>El
Usuario desinstale la Aplicación,</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><span
style='font-size:10.0pt;font-family:Wingdings'>§<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>o
exista una rescisión de esta Licencia por parte de Inutralia Feeding, S.L  ,
para lo cual no será necesaria comunicación previa de Inutralia Feeding, S.L </span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>El Usuario tiene expresamente prohibido realizar
cualquier tipo de sub-licenciamiento, alquiler, transferencia u otra forma de
distribución de esta Aplicación. Asimismo, reconoce que todos sus elementos,
sus Servicios y sus contenidos están protegidos por los derechos de propiedad
intelectual e industrial. Por lo tanto, el derecho de usar esta Aplicación se
limita a la Licencia concedida anteriormente. No se podrá copiar, mostrar,
desactivar, distribuir, ejecutar, publicar, modificar, transferir o crear obras
derivadas de la misma. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>b.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Derechos de
Propiedad Industrial e Intelectual</span></b></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><span style='font-size:10.0pt;
font-family:"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Inutralia Feeding, S.L.. manifiesta que es
titular y ostenta los derechos suficientes y necesarios, con capacidad de
cesión de uso a terceros, sobre el software y contenidos que se muestran a
través de la aplicación y, en especial, de los diseños, textos, imágenes,
logotipos, iconos, botones, nombre comercial o signos distintivos y marcas,
quedando estos y cualesquiera otros susceptibles de utilización industrial o
explotación comercial, sujetos a la vigente normativa de Propiedad Industrial e
Intelectual, con los plenos derechos que esta otorga a su legítimo titular.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Por lo expuesto, el Usuario queda obligado a no
reproducir, copiar, distribuir, poner a disposición de terceras partes o
comunicar públicamente, transformar o modificar, tanto el software como los
contenidos accedidos a través del mismo, salvo expresa autorización de Inutralia
Feeding, S.L.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal style='text-autospace:none'><b><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Propiedad
Industrial</span></b></p>
<p class=MsoNormal style='text-autospace:none'><b><span lang=ES-TRAD
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los signos distintivos tanto gráficos como
denominativos que aparecen en este Aplicación, así como en la App y servicios
que pone a disposición de sus usuarios, entre los que destacan las marca gráfico-denominativa
“Nutricion Planner”, son de propiedad exclusiva de Inutralia Feeding, S.L.  En
consecuencia, queda prohibida su utilización en el tráfico económico por parte
de terceros que carezcan de la debida autorización expresa. La eventual presencia
en este Aplicación de signos distintivos de titularidad ajena a la reseñada en
el párrafo precedente se efectúa con la autorización de sus legítimos
propietarios, siempre con el debido respeto a sus derechos de exclusiva.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Derechos de Autor – Propiedad Intelectual</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los contenidos, textos, fotografías, diseños,
logotipos, imágenes, sonidos, vídeos, animaciones, grabaciones, programas de
ordenador, códigos fuente y, en general, cualquier creación intelectual
existente en este Sitio, su App y servicios de  Nutricion Planner, así como el
propio Sitio en su conjunto como obra artística multimedia, están protegidos
como derechos de autor por la legislación vigente en materia de propiedad
intelectual, tanto aquellos de autoría propia como los sujetos a licencia de
uso de terceros.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>De conformidad con lo expuesto, corresponden a Inutralia
Feeding, S.L . los derechos de reproducción, distribución, comunicación pública
y transformación, que son cedidos, limitadamente a la instancia creada a favor
de y correspondiente a Nutricion Planner” – excepto el de transformación –
Inutralia Feeding, S.L para su explotación exclusiva y exclusivamente dentro de
sus competencias locales, así como cualquier otro derecho de naturaleza
patrimonial, sobre los elementos señalados en el párrafo precedente; y todo
ello, sin perjuicio de los derechos morales que sobre la autoría correspondan a
sus autores.</span></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-18.0pt;text-autospace:none'><a
name="_Toc400626686"><b><span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>8.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span
style='font-size:10.0pt;font-family:"Century Gothic","sans-serif"'>Legislación
aplicable y Jurisdicción competente.</span></b></a></p>
<p class=MsoListParagraph style='margin-left:36.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><b><span style='font-size:
10.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>Los presentes Condiciones Generales se rigen,
interpretan y aplican conforme a la legislación española. Cualquier
controversia que pueda surgir, se sustanciará   sometiéndose las partes, con
renuncia expresa a cualquier otro fuero, a los Juzgados y Tribunales que
correspondan al partido judicial al que pertenezca en cada momento el término
municipal de Alcobendas, provincia de Madrid.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><span lang=ES-TRAD style='font-size:10.0pt;font-family:
"Century Gothic","sans-serif"'>&nbsp;</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-align:justify;
text-justify:inter-ideograph;text-indent:-36.0pt;text-autospace:none'><b><span
style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>III.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></b><b><span style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>Información
relativa a la LOPD</span></b></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-align:justify;
text-justify:inter-ideograph;text-autospace:none'><b><span style='font-size:
11.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt'><b><span
style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>1.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><u><span
style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>Prestaciones y
propiedad de los datos</span></u></b></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>A los
efectos previstos en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección
de Datos de Carácter Personal,  INUTRALIA FEEDING, S.L., como prestadora de los
servicios de la app NUTRICION PLANNER, se convierte en Encargada del
Tratamiento de Datos, comprometiéndose al cumplimiento de las obligaciones que
le son inherentes.</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L.,<b>  </b>reconoce expresamente que los datos de los que es
encargada del tratamiento son de su exclusiva propiedad, por lo que no podrá
aplicarlos o utilizarlos con fines distintos a los previstos en el presente contrato
de prestación de servicios.</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt'><b><span
style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><u><span
style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>Tratamiento de
datos</span></u></b></p>
<p class=MsoBodyText><b><u><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'><span
style='text-decoration:none'>&nbsp;</span></span></u></b></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L.,<b> </b> se compromete a tratar los datos con la finalidad
exclusiva de la realización del servicio. En caso de ser necesario que INUTRALIA
FEEDING, S.L.,<b> </b> <b> </b> conserve los datos o una parte de los mismos a
efectos de la atención de posibles responsabilidades que pudiesen derivarse del
tratamiento, estos deberán permanecer convenientemente bloqueados hasta que
transcurran los plazos de prescripción correspondientes, momento en que deberán
ser destruidos. </span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L., se obliga a utilizar los datos a los que le dé acceso GLAXOSMITHKLINE
CONSUMER HEALTHCARE, S.A., única y exclusivamente para los fines del presente
contrato y a guardar secreto profesional respecto a todos los datos de carácter
personal que conozca y a los que tenga acceso durante la realización del
contrato de prestación de servicios. Igualmente, se obliga a custodiar e
impedir el acceso a los datos de carácter personal a cualquier tercero ajeno al
presente contrato. Las anteriores obligaciones se extienden a toda persona que
pudiera intervenir en cualquier fase del tratamiento por cuenta de  INUTRALIA
FEEDING, S.L.  y subsistirán aun después de terminados los tratamientos
efectuados en el marco del presente contrato.</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L.,  se compromete a comunicar y hacer cumplir a sus empleados,
asignados al proyecto, las obligaciones establecidas en esta cláusula.</span></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>Cualquier
uso de los datos que no se ajuste a lo dispuesto en la presente cláusula, será
responsabilidad exclusiva de INBUTRALIA FEEDING, S.L.,  frente a terceros. </span></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p style='text-align:justify;text-justify:inter-ideograph;text-indent:35.4pt;
background:white'><b><u><span lang=ES-TRAD style='font-size:14.0pt;font-family:
"Calibri","sans-serif"'>3 . Medidas de seguridad</span></u></b></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING. S.L.,  manifiesta cumplir con la normativa vigente en materia de
protección de datos de carácter personal y, en particular, con las medidas de
seguridad correspondientes a sus ficheros. </span></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>El
personal de INUTRALIA FEEDING. S.L, conocerá sus deberes de custodia y
confidencialidad respecto a los datos o la documentación que tengan a su cargo,
sus funciones y obligaciones, así como las normas de seguridad que afectan al
desarrollo de las mismas, encontrándose claramente definidas y documentadas.</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L., habrá designado al menos un responsable de seguridad encargado
de coordinar y controlar las medidas de seguridad aplicables a los tratamientos
de datos de carácter personal. </span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='margin-left:0cm;text-align:justify;text-justify:inter-ideograph;
text-indent:0cm'><span lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>a)<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>Los
sistemas de INUTRALIA FEEDING, S.L., empleados para el tratamiento de datos de
carácter personal, dispondrán de mecanismos de registro de cualquier acceso que
se produzca a datos considerados especialmente protegidos por la LOPD y así
como a cualquier tipo de dato al que se le asigne un nivel alto de medidas de
seguridad. Dichos registros se conservarán al menos durante dos años</span></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p style='text-align:justify;text-justify:inter-ideograph;background:white'><span
lang=ES-TRAD style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p style='margin-left:36.0pt;text-align:justify;text-justify:inter-ideograph;
text-indent:-18.0pt;background:white'><b><span lang=ES-TRAD style='font-size:
14.0pt;font-family:"Calibri","sans-serif"'>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></b><b><u><span lang=ES-TRAD style='font-size:14.0pt;font-family:
"Calibri","sans-serif"'>Ejercicio de derechos por parte de los interesados</span></u></b></p>
<p class=MsoBodyText><span style='font-size:14.0pt;font-family:"Calibri","sans-serif"'>INUTRALIA
FEEDING, S.L.  trasladará a GLAXOSMITHKLINE CONSUMER HEALTHCARE, S.A.,  cualquier
solicitud de ejercicio de derechos de acceso, rectificación, cancelación y
oposición que hubiese recibido por parte de los interesados cuyos datos sean
objeto de tratamiento en el marco de la prestación del servicio, a fin de que
sea resuelta por GLAXOSMITHKLINE CONSUMER HEALTHCARE, S.A. </span></p>
<p class=MsoBodyText style='text-indent:14.2pt'><span style='font-size:14.0pt;
font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText style='text-indent:14.2pt'><span style='font-size:14.0pt;
font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText style='text-indent:14.2pt'><span style='font-size:14.0pt;
font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoBodyText style='text-indent:14.2pt'><span style='font-size:14.0pt;
font-family:"Calibri","sans-serif"'>&nbsp;</span></p>
<p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph;
text-autospace:none'><b><span style='font-size:11.0pt;font-family:"Century Gothic","sans-serif"'>&nbsp;</span></b></p>
<p class=MsoNormal><span lang=ES-TRAD>&nbsp;</span></p>
<p class=MsoNormal>&nbsp;</p>
</div>
</body>
</html>
using System;
namespace inutralia
{
public static class AssemblyGlobal
{
public const string Company = "UXDivers";
public const string ProductLine = "Grial UIKit";
public const string Year = "2017";
public const string Copyright = Company + " - " + Year;
#if DEBUG
public const string Configuration = "Debug";
#elif RELEASE
public const string Configuration = "Release";
#else
public const string Configuration = "Unkown";
#endif
}
}
using System.Reflection;
using Xamarin.Forms.Xaml;
using inutralia;
[assembly: AssemblyTitle (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit")]
[assembly: AssemblyConfiguration (AssemblyGlobal.Configuration)]
[assembly: AssemblyCompany (AssemblyGlobal.Company)]
[assembly: AssemblyProduct (AssemblyGlobal.ProductLine + " - " + "Grial Xamarin.Forms UIKit")]
[assembly: AssemblyCopyright (AssemblyGlobal.Copyright)]
[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
\ No newline at end of file
{
"@Global": {},
"ArticleFeedItemTemplate.xaml": {
"Title": "United by faith ",
"Subtitle": "Friendship beyond everthing",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. Sed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. Maecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JAN 5, 2017",
"Likes": "92",
"Followers": "2.4K"
},
"ArticleVariantItemTemplate.xaml": {
"Title": "United by faith ",
"Subtitle": "Friendship beyond everthing",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. Sed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. Maecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JAN 5, 2017",
"Likes": " 92",
"Followers": " 2.4K"
},
"ArticleItemTemplate.xaml": {
"Title": "United by faith ",
"Subtitle": "Friendship beyond everthing",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. Sed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. Maecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JAN 5, 2017",
"Likes": "92",
"Followers": "2.4K"
},
"CommentItemTemplate.xaml": {
"From": {
"Avatar": "friend_thumbnail_55.jpg",
"Name": "Jaco Morrison"
},
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. Sed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. Maecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"When": "DEC 16, 2017"
},
"ArticlesListVariantPage.xaml": {
"PostsList": [{
"Title": "United by faith ",
"Subtitle": "Friendship beyond everthing",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JAN 9, 2017",
"Likes": " 79",
"Followers": " 1.4K"
}, {
"Title": "Olympic dream",
"Subtitle": "The way to the podium",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "SPORTS",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Pat Davies",
"When": "FEB 14, 2017",
"Likes": " 38",
"Followers": " 2.2K"
}, {
"Title": "Wheels of fortune",
"Subtitle": "And the wind cries mary",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "FREE TIME",
"Author": "Regina Joplin",
"Avatar": "friend_thumbnail_34.jpg",
"BackgroundImage": "article_image_2.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Regina Joplin",
"When": "MAR 29, 2017",
"Likes": " 37",
"Followers": " 2.1K"
}, {
"Title": "Last adventure",
"Subtitle": "The conquest of space",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "SCIENCE",
"Author": "James Clapton",
"Avatar": "friend_thumbnail_31.jpg",
"BackgroundImage": "article_image_2.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "SampleData.Friends[1].Name",
"When": "APR 13, 2017",
"Likes": " 33",
"Followers": " 3.7K"
}, {
"Title": "Sweet leaf",
"Subtitle": "The rainforest newest hope ",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "NATURE",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"BackgroundImage": "article_image_4.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Pat Davies",
"When": "MAY 1, 2017",
"Likes": " 92",
"Followers": " 2.1K"
}, {
"Title": "Smoke kills",
"Subtitle": "The war against tabacco",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "HEALTH",
"Author": "Skyler Harrisson",
"Avatar": "friend_thumbnail_75.jpg",
"BackgroundImage": "article_image_5.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Skyler Harrisson",
"When": "JUL 22, 2017",
"Likes": " 192",
"Followers": " 1.4K"
}]
},
"ArticleViewPage.xaml": {
"Post": {
"Title": "United by faith ",
"Subtitle": "Friendship beyond everthing",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. Sed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. Maecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "Mark Gonzales",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 5, 2017",
"Likes": " 92",
"Followers": " 2.4K"
},
"Comments": [{
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
},
"When": "July 7",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!."
}, {
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
},
"When": "July 7",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!."
}]
},
"DashboardItemTemplate.xaml": {
"BackgroundColor": "#AAc01e5c",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"ShowBackgroundColor": "true",
"Icon": "\uf0c2",
"Name": "Dashboard Item"
},
"DashboardPage.xaml": {
"Items": [{
"Name": "Social",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"BackgroundColor": "#921243",
"Icon": "\ue7fd"
}, {
"Name": "Articles",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"BackgroundColor": "#B31250",
"Icon": "\ue24d"
}, {
"Name": "Dashboards",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"BackgroundColor": "#CD195E",
"Icon": "\ue871"
}, {
"Name": "Navigation",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"BackgroundColor": "#56329A",
"Icon": "\ue5d2"
}, {
"Name": "Logins",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"BackgroundColor": "#6A40B9",
"Icon": "\ue897"
}, {
"Name": "Ecommerce",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"BackgroundColor": "#7C4ECD",
"Icon": "\ue8cc"
}, {
"Name": "Walkthroughs",
"BackgroundImage": "dashboard_thumbnail_7.jpg",
"BackgroundColor": "#525ABB",
"Icon": "\ue8eb"
}, {
"Name": "Messages",
"BackgroundImage": "dashboard_thumbnail_8.jpg",
"BackgroundColor": "#5F7DD4",
"Icon": "\ue0be"
}, {
"Name": "Grial Theme",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"BackgroundColor": "#7B96E5",
"Icon": "\ue3b7"
}]
},
"DashboardFlatPage.xaml": {
"Items": [{
"Name": "Social",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"BackgroundColor": "#921243",
"Icon": "\ue7fd"
}, {
"Name": "Articles",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"BackgroundColor": "#B31250",
"Icon": "\ue24d"
}, {
"Name": "Dashboards",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"BackgroundColor": "#CD195E",
"Icon": "\ue871"
}, {
"Name": "Navigation",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"BackgroundColor": "#56329A",
"Icon": "\ue5d2"
}, {
"Name": "Logins",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"BackgroundColor": "#6A40B9",
"Icon": "\ue897"
}, {
"Name": "Ecommerce",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"BackgroundColor": "#7C4ECD",
"Icon": "\ue8cc"
}, {
"Name": "Walkthroughs",
"BackgroundImage": "dashboard_thumbnail_7.jpg",
"BackgroundColor": "#525ABB",
"Icon": "\ue8eb"
}, {
"Name": "Messages",
"BackgroundImage": "dashboard_thumbnail_8.jpg",
"BackgroundColor": "#5F7DD4",
"Icon": "\ue0be"
}, {
"Name": "Grial Theme",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"BackgroundColor": "#7B96E5",
"Icon": "\ue3b7"
}]
},
"DashboardWithImagesPage.xaml": {
"Items": [{
"Name": "Social",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"Icon": "\ue7fd"
}, {
"Name": "Articles",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"Icon": "\ue24d"
}, {
"Name": "Dashboards",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"Icon": "\ue871"
}, {
"Name": "Navigation",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"Icon": "\ue5d2"
}, {
"Name": "Logins",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"Icon": "\ue897"
}, {
"Name": "Ecommerce",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue8cc"
}, {
"Name": "Walkthroughs",
"BackgroundImage": "dashboard_thumbnail_7.jpg",
"Icon": "\ue8eb"
}, {
"Name": "Messages",
"BackgroundImage": "dashboard_thumbnail_8.jpg",
"Icon": "\ue0be"
}, {
"Name": "Grial Theme",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue3b7"
}]
},
"RecentChatItemTemplate.xaml": {
"From": {
"Name": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg"
},
"When": "July 7",
"Body": "Hey there! Grial 2...",
"IsRead": "true"
},
"DocumentTimelineLeftItemTemplate.xaml": {
"When": "July 7",
"Title": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"Author" : "Chris Duff",
"IsInbound": "true",
"Icon" : "\ue0be"
},
"DocumentTimelineRightItemTemplate.xaml": {
"When": "July 7",
"Title": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"Author" : "Tony Kamo",
"IsInbound": "true",
"Icon" : "\ue0be"
},
"ProductGridItemTemplate.xaml": {
"Name": "Logo Tee",
"Image": "product_item_0.jpg",
"Price": "$39",
"ThumbnailHeight": "100",
"Manufacturer": "UXDIVERS"
},
"SocialGalleryImagePreviewPage.xaml": {
"source": "social_album_1.jpg"
},
"FriendItemTemplate.xaml": {
"Avatar": "friend_thumbnail_31.jpg",
"Name": "Robert Stainford"
},
"ProductItemViewPage.xaml": {
"Name": "LOGO TEE",
"Description": "Classic 90's Skateboarding style shirt. Feel like Pat Duffy or even flow like Edie from Pearl Jam. With that casual grunge style this is the shirt you need.",
"Image": "product_item_0.jpg",
"Price": "$ 39.99",
"ThumbnailHeight": "100",
"Manufacturer": "UXDIVERS"
},
"ProductItemFullScreenPage.xaml": {
"Name": "LOGO TEE",
"Description": "Classic 90's Skateboarding style shirt. Feel like Pat Duffy or even flow like Edie from Pearl Jam. With that casual grunge style this is the shirt you need.",
"Image": "product_item_2.jpg",
"Price": "$ 39.99",
"ThumbnailHeight": "100",
"Manufacturer": "UXDIVERS"
},
"ProductImageFullScreenPage.xaml": {
"source": "product_item_0.jpg"
},
"MessageItemTemplate.xaml": {
"From": {
"Name": "Janis Spector",
"IsRead": "false",
"ThreadCount": "7",
"HasAttachment": "true",
"Title": "Hi dear friend",
"Avatar": "friend_thumbnail_31.jpg"
},
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"When": "July 7"
},
"ChatLeftMessageItemTemplate.xaml": {
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
},
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"When": "July 7"
},
"ChatRightMessageItemTemplate.xaml": {
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_34.jpg"
},
"When": "July 7",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!."
},
"MessagesListPage.xaml": {
"SampleData": {
"Messages": [{
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
},
"ThreadCount": "7",
"HasAttachment": "true",
"When": "July 7",
"Title": "Hi dear friend",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"IsRead": "false"
}]
}
},
"ChatMessagesListPage.xaml": {
"When": "July 7"
},
"RecentChatListPage.xaml": {
"Messages": [{
"From": {
"Name": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg"
},
"When": "July 7",
"Body": "Hey there! Grial 2.0.",
"IsRead": "false"
}, {
"From": {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
},
"When": "July 7",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"IsRead": "true"
}],
"ChatList": [{
"Name": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"Message": "Hey there! Grial 2...",
"IsRead": "true",
"MessageStateColor": "#43a047",
"When": "21:16"
}, {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg",
"Message": "Yes..",
"IsRead": "false",
"MessageStateColor": "#90a4ae",
"When": "20:26"
}]
},
"ArticlesListPage.xaml": {
"PostsList": [{
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
}, {
"Title": "Olympic dream",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "SPORTS",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Wheels of fortune",
"BackgroundImage": "article_image_2.jpg",
"Section": "FREE TIME",
"Author": "Cassy Norton",
"Avatar": "friend_thumbnail_93.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Last adventure",
"BackgroundImage": "article_image_3.jpg",
"Section": "SCIENCE",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"When": "JUN 17, 2015"
}]
},
"ArticlesFeedPage.xaml": {
"PostsList": [{
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
}, {
"Title": "Olympic dream",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "SPORTS",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Wheels of fortune",
"BackgroundImage": "article_image_2.jpg",
"Section": "FREE TIME",
"Author": "Cassy Norton",
"Avatar": "friend_thumbnail_93.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Last adventure",
"BackgroundImage": "article_image_3.jpg",
"Section": "SCIENCE",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"When": "JUN 17, 2015"
}]
},
"ArticlesClassicView.xaml": {
"PostsList": [{
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
}, {
"Title": "Olympic dream",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": "SPORTS",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Wheels of fortune",
"BackgroundImage": "article_image_2.jpg",
"Section": "FREE TIME",
"Author": "Cassy Norton",
"Avatar": "friend_thumbnail_93.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Last adventure",
"BackgroundImage": "article_image_3.jpg",
"Section": "SCIENCE",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"When": "JUN 17, 2015"
}]
},
"SocialPage.xaml": {
"Friends": [{
"Name": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg"
}, {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
}, {
"Name": "Regina Joplin",
"Avatar": "friend_thumbnail_34.jpg"
}, {
"Name": "Jaco Morrison",
"Avatar": "friend_thumbnail_55.jpg"
}, {
"Name": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg"
}, {
"Name": "Skyler Harrisson",
"Avatar": "friend_thumbnail_75.jpg"
}, {
"Name": "Al Pastorius",
"Avatar": "friend_thumbnail_93.jpg"
}],
"Images": [
"social_album_1.jpg",
"social_album_2.jpg",
"social_album_3.jpg",
"social_album_4.jpg",
"social_album_5.jpg",
"social_album_6.jpg",
"social_album_7.jpg",
"social_album_8.jpg",
"social_album_9.jpg"
]
},
"SocialVariantPage.xaml": {
"Friends": [{
"Name": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg"
}, {
"Name": "Janis Spector",
"Avatar": "friend_thumbnail_31.jpg"
}, {
"Name": "Regina Joplin",
"Avatar": "friend_thumbnail_34.jpg"
}, {
"Name": "Jaco Morrison",
"Avatar": "friend_thumbnail_55.jpg"
}, {
"Name": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg"
}, {
"Name": "Skyler Harrisson",
"Avatar": "friend_thumbnail_75.jpg"
}, {
"Name": "Al Pastorius",
"Avatar": "friend_thumbnail_93.jpg"
}],
"Images": [
"social_album_1.jpg",
"social_album_2.jpg",
"social_album_3.jpg",
"social_album_4.jpg",
"social_album_5.jpg",
"social_album_6.jpg",
"social_album_7.jpg",
"social_album_8.jpg",
"social_album_9.jpg"
]
},
"MainMenuPage.xaml": {
"AllSamples": {
"Count": "54"
},
"SamplesGroupedByCategory*": [{
"Name": "SOCIAL",
"Items": [{
"Name": "User Profile",
"Icon": "\ue853",
"IsNew": "false"
}, {
"Name": "Social",
"Icon": "\ue7ef",
"IsNew": "false"
}, {
"Name": "Social Variant",
"Icon": "\ue7ef",
"IsNew": "false"
}, {
"Name": "Timeline",
"Icon": "\ue8ae",
"IsNew": "true"
}, {
"Name": "Document Timeline",
"Icon": "\ue8ae",
"IsNew": "true"
}]
}, {
"Name": "ARTICLES",
"Items": [{
"Name": "Article View",
"Icon": "\ue24d",
"IsNew": "false"
}, {
"Name": "Articles List",
"Icon": "\ue24d",
"IsNew": "false"
}, {
"Name": "Articles List Variant",
"Icon": "\ue24d",
"IsNew": "false"
}, {
"Name": "Articles Feed",
"Icon": "\ue24d",
"IsNew": "false"
}, {
"Name": "Articles Classic View",
"Icon": "\ue24d",
"IsNew": "true"
}, {
"Name": "Front Page News",
"Icon": "\ue24d",
"IsNew": "true"
}]
}, {
"Name": "DASHBOARD",
"Items": [{
"Name": "Icons Dashboard",
"Icon": "\ue871",
"IsNew": "false"
}, {
"Name": "Flat Dashboard",
"Icon": "\ue871",
"IsNew": "false"
}, {
"Name": "Images Dashboard",
"Icon": "\ue871",
"IsNew": "false"
}, {
"Name": "Dashboard Multiple Tiles",
"Icon": "\ue871",
"IsNew": "true"
}, {
"Name": "Dashboard Scrollable",
"Icon": "\ue871",
"IsNew": "true"
}, {
"Name": "Dashboard Multiple Scroll",
"Icon": "\ue871",
"IsNew": "true"
}, {
"Name": "Movie Selection",
"Icon": "\ue54d",
"IsNew": "true"
}, {
"Name": "Dashboard Cards",
"Icon": "\ue871",
"IsNew": "true"
}]
}, {
"Name": "NAVIGATION",
"Items": [{
"Name": "RootPage",
"Icon": "\ue5d2",
"IsNew": "false"
}, {
"Name": "Categories List Flat",
"Icon": "\ue896",
"IsNew": "false"
}, {
"Name": "Image Categories",
"Icon": "\ue896",
"IsNew": "false"
}, {
"Name": "Icon Categories",
"Icon": "\ue896",
"IsNew": "false"
}, {
"Name": "Custom NavBar",
"Icon": "\ue069",
"IsNew": "false"
}, {
"Name": "Empty State",
"Icon": "\ue88c",
"IsNew": "true"
}, {
"Name": "Notifications",
"Icon": "\ue417",
"IsNew": "true"
}]
}, {
"Name": "LOGINS",
"Items": [{
"Name": "Login",
"Icon": "\ue897",
"IsNew": "false"
}, {
"Name": "Sign Up",
"Icon": "\ue86c",
"IsNew": "false"
}, {
"Name": "Password Recovery",
"Icon": "\ue8ba",
"IsNew": "false"
}, {
"Name": "Simple Sign Up",
"Icon": "\ue86c",
"IsNew": "true"
}, {
"Name": "Simple Login",
"Icon": "\ue86c",
"IsNew": "true"
}]
}, {
"Name": "ECOMMERCE",
"Items": [{
"Name": "Product Grid",
"Icon": "\ue8f0",
"IsNew": "false"
}, {
"Name": "Product Grid Variant",
"Icon": "\ue8f0",
"IsNew": "false"
}, {
"Name": "Product Item View",
"Icon": "\ue8f6",
"IsNew": "false"
}, {
"Name": "Products Carousel",
"Icon": "\ue8f6",
"IsNew": "false"
}, {
"Name": "Products Catalog",
"Icon": "\ue8f6",
"IsNew": "true"
}, {
"Name": "Product Order",
"Icon": "\ue8f6",
"IsNew": "true"
}]
}, {
"Name": "WALKTHROUGHS",
"Items": [{
"Name": "Walkthrough",
"Icon": "\ue8eb",
"IsNew": "false"
}, {
"Name": "Walkthrough Variant",
"Icon": "\ue8eb",
"IsNew": "false"
}, {
"Name": "Walkthrough Flat",
"Icon": "\ue8eb",
"IsNew": "true"
}]
}, {
"Name": "MESSAGES",
"Items": [{
"Name": "Messages",
"Icon": "\ue0be",
"IsNew": "false"
}, {
"Name": "Chat Messages List",
"Icon": "\ue926",
"IsNew": "false"
}, {
"Name": "Recent Chat List",
"Icon": "\ue8ae",
"IsNew": "true"
}, {
"Name": "Chat Timeline",
"Icon": "\ue8ae",
"IsNew": "true"
}]
}, {
"Name": "GRIAL THEME",
"Items": [{
"Name": "Native Controls",
"Icon": "\ue3b7",
"IsNew": "false"
}, {
"Name": "Custom Renderers",
"Icon": "\ue3b7",
"IsNew": "false"
}, {
"Name": "Grial Common Views",
"Icon": "\ue3b7",
"IsNew": "false"
}, {
"Name": "Settings Page",
"Icon": "\ue8b8",
"IsNew": "false"
}, {
"Name": "About",
"Icon": "\ue80b",
"IsNew": "false"
}, {
"Name": "Tabs",
"Icon": "\ue8d8",
"IsNew": "true"
}, {
"Name": "Generic About",
"Icon": "\ue887",
"IsNew": "false"
}, {
"Name": "Custom Settings Page",
"Icon": "\ue8b8",
"IsNew": "true"
}, {
"Name": "Custom Activity Indicator",
"Icon": "\ue028",
"IsNew": "true"
}, {
"Name": "Responsive Helpers",
"Icon": "\ue8b8",
"IsNew": "true"
}]
}]
},
"SamplesListFromCategoryPage.xaml": {
"SamplesList": [{
"Name": "Category Item 1.0 ",
"Icon": "\ue5d2",
"BackgroundImage": ""
}, {
"Name": "Category Item 1.1",
"Icon": "\ue5d2",
"BackgroundImage": ""
}]
},
"SamplesListFromCategoryItemTemplate.xaml": {
"Name": "Category Item 1.0 ",
"Icon": "\ue5d2"
},
"ArticleClassicViewItemTemplate.xaml": {
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
},
"TimelineItemTemplate.xaml": {
"EventTitle": "Pat Davies joined our team!",
"EventDescription": "Pat Davies joined our team!",
"Image": "friend_thumbnail_27.jpg",
"When": "AUG 05, 2015"
},
"TimelinePage.xaml": {
"TimelineList": [{
"EventTitle": "Eric Douglas has a new photo",
"EventDescription": "Eric uploaded a more recently pic from him.",
"Image": "friend_thumbnail_27.jpg",
"When": "JUN 29, 2016"
}, {
"EventTitle": "Sam joined a new group",
"EventDescription": "Sam joined the Marketing and Affiliates group",
"Image": "friend_thumbnail_34.jpg",
"When": "JUN 28, 2016"
}, {
"EventTitle": "You have a new follower!",
"EventDescription": "Tony is now folowing you.",
"Image": "friend_thumbnail_55.jpg",
"When": "JUN 17, 2016"
}, {
"EventTitle": "You have a new follower!",
"EventDescription": "Ingrid Davies is now followig you.",
"Image": "friend_thumbnail_71.jpg",
"When": "JUN 17, 2016"
}, {
"EventTitle": "You have a new like!",
"EventDescription": "Emily liked your last post!",
"Image": "friend_thumbnail_75.jpg",
"When": "JUN 14, 2016"
}, {
"EventTitle": "Jaco joined a new group!",
"EventDescription": "Jaco Davies has joined the Internet of Things group. He is now the member number 100 of this group.",
"Image": "friend_thumbnail_93.jpg",
"When": "JUN 14, 2016"
}, {
"EventTitle": "Jaco added a new comment to 'Internet of Things' group",
"EventDescription": "Hi guys, thanks for allow me be part of this great group. I would like to suggest...",
"Image": "friend_thumbnail_93.jpg",
"When": "JUN 14, 2016"
}, {
"EventTitle": "Ingrid have a new like!",
"EventDescription": "Jaco liked your last post.",
"Image": "friend_thumbnail_71.jpg",
"When": "JUN 14, 2016"
}, {
"EventTitle": "Eric Douglas joined a new group!",
"EventDescription": "Eric has joined the Jazz and Blues group. He is now the member number 207 of this group.",
"Image": "friend_thumbnail_27.jpg",
"When": "JUN 12, 2016"
}, {
"EventTitle": "You have a new like!",
"EventDescription": "Emily liked your last post!",
"Image": "friend_thumbnail_75.jpg",
"When": "JUN 12, 2016"
}, {
"EventTitle": "You have a new like!",
"EventDescription": "Sam liked your last post!",
"Image": "friend_thumbnail_34.jpg",
"When": "JUN 12, 2016"
}, {
"EventTitle": "Sam joined a new group!",
"EventDescription": "Sam has joined the Avant Garde group. She is now the member number 99 of this group.",
"Image": "friend_thumbnail_27.jpg",
"When": "JUN 12, 2016"
}, {
"EventTitle": "Sam joined a new group!",
"EventDescription": "Sam has joined the Bon Apetite! group. She is now the member number 487 of this group.",
"Image": "friend_thumbnail_27.jpg",
"When": "JUN 12, 2016"
}, {
"EventTitle": "Ingrid have a new like!",
"EventDescription": "Jaco liked your last post.",
"Image": "friend_thumbnail_71.jpg",
"When": "JUN 11, 2016"
}]
},
"MainMenuItemTemplate.xaml": {
"Name": "Dashboard Multiple Scroll Page",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"BackgroundColor": "#921243",
"Icon": "\ue871",
"IsNew": "true"
},
"MainMenuGroupHeaderTemplate.xaml": {
"Name": "SOCIAL"
},
"CardsListItemTemplate.xaml": {
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": {
"Count": "5"
}
},
"CategoriesListItemTemplate.xaml": {
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": {
"Count": "5"
}
},
"CategoriesListFlatPage.xaml": {
"SamplesCategories": [{
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": [
]
}, {
"Name": "Articles",
"BackgroundColor": "#B31250",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue3b7",
"SamplesList": [
]
}, {
"Name": "Social",
"BackgroundColor": "#CD195E",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"Icon": "\ue24d",
"SamplesList": [
]
}, {
"Name": "Dashboards",
"BackgroundColor": "#56329A",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"Icon": "\ue871",
"SamplesList": [
]
}, {
"Name": "Navigation",
"BackgroundColor": "#6A40B9",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"Icon": "\ue5d2",
"SamplesList": [
]
}, {
"Name": "Logins",
"BackgroundColor": "#7C4ECD",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"Icon": "\ue897",
"SamplesList": [
]
}, {
"Name": "Ecommerce",
"BackgroundColor": "#525ABB",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"Icon": "\ue8cc",
"SamplesList": [
]
}, {
"Name": "Walkthroughs",
"BackgroundColor": "#5F7DD4",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue8eb",
"SamplesList": [
]
}, {
"Name": "Messages",
"BackgroundColor": "#7B96E5",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue0be",
"SamplesList": [
]
}]
},
"CardsListPage.xaml": {
"SamplesCategories": [{
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": [
]
}, {
"Name": "Articles",
"BackgroundColor": "#B31250",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue3b7",
"SamplesList": [
]
}, {
"Name": "Social",
"BackgroundColor": "#CD195E",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"Icon": "\ue24d",
"SamplesList": [
]
}, {
"Name": "Dashboards",
"BackgroundColor": "#56329A",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"Icon": "\ue871",
"SamplesList": [
]
}, {
"Name": "Navigation",
"BackgroundColor": "#6A40B9",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"Icon": "\ue5d2",
"SamplesList": [
]
}, {
"Name": "Logins",
"BackgroundColor": "#7C4ECD",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"Icon": "\ue897",
"SamplesList": [
]
}, {
"Name": "Ecommerce",
"BackgroundColor": "#525ABB",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"Icon": "\ue8cc",
"SamplesList": [
]
}, {
"Name": "Walkthroughs",
"BackgroundColor": "#5F7DD4",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue8eb",
"SamplesList": [
]
}, {
"Name": "Messages",
"BackgroundColor": "#7B96E5",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue0be",
"SamplesList": [
]
}]
},
"CategoriesListWithImagesItemTemplate.xaml": {
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": {
"Count": "7"
}
},
"CategoriesListWithImagesPage.xaml": {
"SamplesCategories": [{
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": {
"Count": "7"
}
}, {
"Name": "Articles",
"BackgroundColor": "#B31250",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue24d",
"SamplesList": {
"Count": "7"
}
}, {
"Name": "Social",
"BackgroundColor": "#CD195E",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"Icon": "\ue24d",
"SamplesList": {
"Count": "7"
}
}, {
"Name": "Dashboards",
"BackgroundColor": "#56329A",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"Icon": "\ue871",
"SamplesList": [
]
}, {
"Name": "Navigation",
"BackgroundColor": "#6A40B9",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"Icon": "\ue5d2",
"SamplesList": [
]
}, {
"Name": "Logins",
"BackgroundColor": "#7C4ECD",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"Icon": "\ue897",
"SamplesList": [
]
}, {
"Name": "Ecommerce",
"BackgroundColor": "#525ABB",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"Icon": "\ue8cc",
"SamplesList": [
]
}, {
"Name": "Walkthroughs",
"BackgroundColor": "#5F7DD4",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue8eb",
"SamplesList": [
]
}, {
"Name": "Messages",
"BackgroundColor": "#7B96E5",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue0be",
"SamplesList": [
]
}]
},
"CategoriesListWithIconsPage.xaml": {
"SamplesCategories": [{
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": [
]
}, {
"Name": "Articles",
"BackgroundColor": "#B31250",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue24d",
"SamplesList": [
]
}, {
"Name": "Social",
"BackgroundColor": "#CD195E",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"Icon": "\ue24d",
"SamplesList": [
]
}, {
"Name": "Dashboards",
"BackgroundColor": "#56329A",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"Icon": "\ue871",
"SamplesList": [
]
}, {
"Name": "Navigation",
"BackgroundColor": "#6A40B9",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"Icon": "\ue5d2",
"SamplesList": [
]
}, {
"Name": "Logins",
"BackgroundColor": "#7C4ECD",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"Icon": "\ue897",
"SamplesList": [
]
}, {
"Name": "Ecommerce",
"BackgroundColor": "#525ABB",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"Icon": "\ue8cc",
"SamplesList": [
]
}, {
"Name": "Walkthroughs",
"BackgroundColor": "#5F7DD4",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue8eb",
"SamplesList": [
]
}, {
"Name": "Messages",
"BackgroundColor": "#7B96E5",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"Icon": "\ue0be",
"SamplesList": [
]
}]
},
"NotificationsListItemTemplate.xaml": {
"Title": "Confirmation",
"Description": "Please confirm your email address",
"BackgroundColor": "Red",
"Icon": "\uf0e0",
"SamplesList": {
"Count": "7"
}
},
"NotificationsPage.xaml": {
"Notifications": [{
"Title": "Confirmation",
"Description": "Please confirm your email address",
"BackgroundColor": "#1976d2",
"Type": 0
}, {
"Title": "Error",
"Description": "Your account is blocked",
"BackgroundColor": "#c62828",
"Type": 3
}, {
"Title": "Warning",
"Description": "Can't reach your current location",
"BackgroundColor": "#fbc02d",
"Type": 4
}, {
"Title": "Warning",
"Description": "Please contact support center",
"BackgroundColor": "#ffd600",
"Type": 4
}, {
"Title": "Notification",
"Description": "You have new message",
"BackgroundColor": "#1976d2",
"Type": 1
}, {
"Title": "Notification",
"Description": "New contact request",
"BackgroundColor": "#1976d2",
"Type": 1
}, {
"Title": "Success",
"Description": "Profile information completed",
"BackgroundColor": "#2e7d32",
"Type": 2
}, {
"Title": "Success",
"Description": "Payment method accepted",
"BackgroundColor": "#2e7d32",
"Type": 2
}, {
"Title": "Warning",
"Description": "Please contact support center",
"BackgroundColor": "#fbc02d",
"Type": 4
}]
},
"CategoriesListWithIconsItemTemplate.xaml": {
"Name": "Social",
"BackgroundColor": "#921243",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"Icon": "\ue7fd",
"SamplesList": [
]
},
"ProductsCarouselPage.xaml": {
"Data": {
"Name": "Logo Tee",
"Description": "Cotton blend lends for ultimate comfort.",
"Image": "product_item_0.jpg",
"Price": "$39",
"ThumbnailHeight": "100",
"Manufacturer": "UXdivers"
}
},
"ProductsCatalogPage.xaml": [{
"Name": "Logo Tee",
"Description": "Cotton/ploy blend lends for ultimate comfort.",
"Image": "product_item_0.jpg",
"Price": "$39",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Big Logo Shirt",
"Description": "This Logo UA Tech T-Shirt is built with a system that wicks away sweat to keep your little one dry and comfortable.",
"Image": "product_item_1.jpg",
"Price": "$29",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Classic Tee",
"Description": "The V-Neck Embroidered T-Shirt keeps you looking fresh with its simple yet classic look. 100% cotton. Imported.",
"Image": "product_item_2.jpg",
"Price": "$39",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Loose Fit Tee",
"Description": "Our newest swim tees with a much looser fit than traditional rash guard for yet more comfort and versatility, is well known for great fit, function and colors.",
"Image": "product_item_3.jpg",
"Price": "$29",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Cotton Tee",
"Description": "Standard fit tee shirt, graphic printed with soft hand ink",
"Image": "product_item_4.jpg",
"Price": "$29",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Sports Tee",
"Description": "Comfortable fit whilst the flat-seam construction helps to minimise chafing and they also feature side panels, enhancing your range of movement.",
"Image": "product_item_5.jpg",
"Price": "$39",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Classic T-Shirt",
"Description": "All you need for a comfort day.",
"Image": "product_item_6.jpg",
"Price": "$29",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}, {
"Name": "Product Name 8",
"Description": "The long sleeves provide extra coverage and warmth and the sweat-wicking Dri-FIT fabric keeps you comfortable. The lightweight layer contours to your body and strategic mesh panels increase airflow. 92% polyester, 8% spandex.",
"Image": "product_item_7.jpg",
"Price": "$29",
"RatingValue": "3",
"RatingMax": "5",
"ThumbnailHeight": "100"
}]
,
"CircleIcon.xaml": {
"ShowBackgroundColor": "true"
},
"DashboardScrollablePage.xaml": {
"Items": [{
"Name": "Social",
"BackgroundImage": "dashboard_thumbnail_6.jpg",
"BackgroundColor": "#921243",
"Icon": "\ue7fd"
}, {
"Name": "Articles",
"BackgroundImage": "dashboard_thumbnail_4.jpg",
"BackgroundColor": "#B31250",
"Icon": "\ue24d"
}, {
"Name": "Dashboards",
"BackgroundImage": "dashboard_thumbnail_3.jpg",
"BackgroundColor": "#CD195E",
"Icon": "\ue871"
}, {
"Name": "Navigation",
"BackgroundImage": "dashboard_thumbnail_2.jpg",
"BackgroundColor": "#56329A",
"Icon": "\ue5d2"
}, {
"Name": "Logins",
"BackgroundImage": "dashboard_thumbnail_5.jpg",
"BackgroundColor": "#6A40B9",
"Icon": "\ue897"
}, {
"Name": "Ecommerce",
"BackgroundImage": "dashboard_thumbnail_1.jpg",
"BackgroundColor": "#7C4ECD",
"Icon": "\ue8cc"
}, {
"Name": "Walkthroughs",
"BackgroundImage": "dashboard_thumbnail_7.jpg",
"BackgroundColor": "#525ABB",
"Icon": "\ue8eb"
}, {
"Name": "Messages",
"BackgroundImage": "dashboard_thumbnail_8.jpg",
"BackgroundColor": "#5F7DD4",
"Icon": "\ue0be"
}, {
"Name": "Grial Theme",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"BackgroundColor": "#7B96E5",
"Icon": "\ue3b7"
}]
},
"DashboardCardItemTemplate.xaml": {
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"ShowBackgroundColor": "true",
"Icon": "\uf0c2",
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": " ACTUALITY ",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundColor": "#B31250"
},
"DashboardCardsPage.xaml": {
"DashboardCardsList": [{
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": " ACTUALITY ",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"BackgroundColor": "#B31250"
}, {
"Title": "Olympic dream",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": " SPORTS ",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"BackgroundColor": "#CD195E"
}, {
"Title": "Wheels of fortune",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": " FREE TIME ",
"Author": "Regina Joplin",
"Avatar": "friend_thumbnail_34.jpg",
"BackgroundImage": "article_image_2.jpg",
"BackgroundColor": "#56329A"
}, {
"Title": "Sweet leaf",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": " NATURE ",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"BackgroundImage": "article_image_4.jpg",
"BackgroundColor": "#6A40B9"
}, {
"Title": "The search for healthy food begins",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors. This is how we design a great article sample.",
"Section": " HEALTH ",
"Author": "Skyler Harrisson",
"Avatar": "friend_thumbnail_75.jpg",
"BackgroundImage": "article_image_5.jpg",
"BackgroundColor": "#7C4ECD"
}]
},
"FrontPageNewsItemTemplate.xaml": {
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
},
"FrontPageHeaderItemTemplate.xaml": {
"MainNews": {
"Section": "NATURE",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus."
}
},
"FrontPageNewsPage.xaml": {
"MainNews": {
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc. \nSed ultricies sed augue sit amet maximus. In vel tellus sed ipsum volutpat venenatis et sit amet diam. Suspendisse feugiat mollis nibh, in facilisis diam convallis sit amet. \n\nMaecenas lectus turpis, rhoncus et est at, lacinia placerat urna. Praesent malesuada consectetur justo, scelerisque fermentum enim lobortis ullamcorper. Duis commodo sit amet ligula vitae luctus. Nulla commodo ipsum a lorem efficitur luctus.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
},
"NewsList": [{
"Title": "Wheels of fortune",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc.",
"BackgroundImage": "article_image_2.jpg",
"Section": "FREE TIME",
"Author": "Cassy Norton",
"Avatar": "friend_thumbnail_93.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "Olympic dream",
"Body": "In connection with this appellative of 'Whalebone whales,' it is of great leap of yer happiness leadership colors.",
"Section": "SPORTS",
"Author": "Pat Davies",
"Avatar": "friend_thumbnail_27.jpg",
"BackgroundImage": "article_image_1.jpg",
"When": "JUN 17, 2015"
}, {
"Title": "United by faith ",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc.",
"Section": "ACTUALITY",
"Author": "UXDIVERS",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundImage": "article_image_0.jpg",
"Quote": "Donec euismod nulla et sem lobortis ultrices. Cras id imperdiet metus. Sed congue luctus arcu.",
"QuoteAuthor": "Jaco Morrison",
"When": "JUN 17, 2015",
"Likes": "92",
"Followers": "2.4K"
}, {
"Title": "Last adventure",
"Body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent et aliquet nunc.",
"BackgroundImage": "article_image_3.jpg",
"Section": "SCIENCE",
"Author": "Margaret Whites",
"Avatar": "friend_thumbnail_71.jpg",
"When": "JUN 17, 2015"
}]
},
"DashboardMultipleScrollSectionTemplate.xaml": {
"Title": "Actor of the Month",
"Content": [{
"Title": "Inception",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Django",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjIyNTQ5NjQ1OV5BMl5BanBnXkFtZTcwODg1MDU4OA@@._V1_UY190_CR0,0,128,190_AL_.jpg"
}],
"Scroll": "0"
},
"DashboardMultipleScrollItemTemplate.xaml": {
"Source": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_UX182_CR0,0,182,268_AL_.jpg"
},
"MovieSelectionPage.xaml": {
"Title": "Inception",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_UX182_CR0,0,182,268_AL_.jpg",
"Seasons": "2010",
"RatingValue": "4.4",
"RatingMax": "5",
"Director": "Christopher Nolan",
"Plot": "A thief, who steals corporate secrets through use of dream-sharing technology, is given the inverse task of planting an idea into the mind of a CEO.",
"Cast": "Leonardo DiCaprio, Joseph Gordon-Levitt, Ellen Page "
},
"DashboardMultipleScrollPage.xaml": {
"Sections": [{
"Title": "Actor of the Month",
"Content": [{
"Title": "Inception",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Django",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjIyNTQ5NjQ1OV5BMl5BanBnXkFtZTcwODg1MDU4OA@@._V1_UY190_CR0,0,128,190_AL_.jpg"
}, {
"Title": "The Revenant",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjU4NDExNDM1NF5BMl5BanBnXkFtZTgwMDIyMTgxNzE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "The Departed",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTI1MTY2OTIxNV5BMl5BanBnXkFtZTYwNjQ4NjY3._V1_UX148_CR0,0,148,216_AL_.jpg"
}, {
"Title": "Titanic",
"Source": "http://ia.media-imdb.com/images/M/MV5BMzg1MDA0MTU2Nl5BMl5BanBnXkFtZTcwMTMzMjkxNw@@._V1_UX148_CR0,0,148,216_AL_.jpg"
}, {
"Title": "The Audition",
"Source": "http://ia.media-imdb.com/images/M/MV5BODVlNGQ1ODUtYTMxNi00OTM3LTlmMzEtYjM2NzAwZTYwZTgzXkEyXkFqcGdeQXVyNjUwODIzOTI@._V1_UY268_CR4,0,182,268_AL_.jpg"
}, {
"Title": "Gatsby",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTkxNTk1ODcxNl5BMl5BanBnXkFtZTcwMDI1OTMzOQ@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Shutter Island",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTMxMTIyNzMxMV5BMl5BanBnXkFtZTcwOTc4OTI3Mg@@._V1_UX128_CR0,0,128,190_AL_.jpg"
}, {
"Title": "Blood Diamond",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTY5MTYyNjkwNV5BMl5BanBnXkFtZTcwODE3MTI0MQ@@._V1_UY190_CR0,0,128,190_AL_.jpg"
}, {
"Title": "Catch Me If You Can",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTY5MzYzNjc5NV5BMl5BanBnXkFtZTYwNTUyNTc2._V1_UY190_CR0,0,128,190_AL_.jpg"
}]
}, {
"Title": "Latest Best Picture-Winning Titles",
"Content": [{
"Title": "Spotlight",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjIyOTM5OTIzNV5BMl5BanBnXkFtZTgwMDkzODE2NjE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Birdman",
"Source": "http://ia.media-imdb.com/images/M/MV5BODAzNDMxMzAxOV5BMl5BanBnXkFtZTgwMDMxMjA4MjE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "12 Years As A Slave",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjExMTEzODkyN15BMl5BanBnXkFtZTcwNTU4NTc4OQ@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Argo",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTc3MjI0MjM0NF5BMl5BanBnXkFtZTcwMTYxMTQ1OA@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "The Artist",
"Source": "http://ia.media-imdb.com/images/M/MV5BMzk0NzQxMTM0OV5BMl5BanBnXkFtZTcwMzU4MDYyNQ@@._V1_UY268_CR9,0,182,268_AL_.jpg"
}, {
"Title": "The King's Speech",
"Source": "http://ia.media-imdb.com/images/M/MV5BMzU5MjEwMTg2Nl5BMl5BanBnXkFtZTcwNzM3MTYxNA@@._V1_UY268_CR0,0,182,268_AL_.jpg"
}, {
"Title": "The Hurt Locker",
"Source": "http://ia.media-imdb.com/images/M/MV5BNzEwNzQ1NjczM15BMl5BanBnXkFtZTcwNTk3MTE1Mg@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Slumdog Millionaire",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTU2NTA5NzI0N15BMl5BanBnXkFtZTcwMjUxMjYxMg@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "No Country For Old Men",
"Source": "http://ia.media-imdb.com/images/M/MV5BMjA5Njk3MjM4OV5BMl5BanBnXkFtZTcwMTc5MTE1MQ@@._V1_UY268_CR0,0,182,268_AL_.jpg"
}, {
"Title": "The Departed",
"Source": "http://ia.media-imdb.com/images/M/MV5BMTI1MTY2OTIxNV5BMl5BanBnXkFtZTYwNjQ4NjY3._V1_UX182_CR0,0,182,268_AL_.jpg"
}]
}, {
"Title": "Sci-Fi Classic Titles",
"Content": [{
"Title": "Blade Runner",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BZWZlYmEyYTItNGRjYy00ZmMxLWEzMWItM2Q2NjZlNTMwMjQ3XkEyXkFqcGdeQXVyNDYyMDk5MTU@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Back to the Future",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BZmU0M2Y1OGUtZjIxNi00ZjBkLTg1MjgtOWIyNThiZWIwYjRiXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Back to the Future Part II",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BZTMxMGM5MjItNDJhNy00MWI2LWJlZWMtOWFhMjI5ZTQwMWM3XkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Back to the Future Part III",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTk3ODgyMTgzNF5BMl5BanBnXkFtZTcwODE3MzYwMg@@._V1_UY268_CR7,0,182,268_AL_.jpg"
}, {
"Title": "The Terminator",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BODE1MDczNTUxOV5BMl5BanBnXkFtZTcwMTA0NDQyNA@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Terminator 2: Judgment Day",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BZDM2YjYwYWMtMWZlNi00ZDQxLWExMDctMDAzNzQ0OTkzZjljXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_UX182_CR0,0,182,268_AL_.jpg"
}]
}, {
"Title": "Sci-Fi Titles",
"Content": [{
"Title": "Mad Max: Fury Road",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTUyMTE0ODcxNF5BMl5BanBnXkFtZTgwODE4NDQzNTE@._V1_UY268_CR1,0,182,268_AL_.jpg"
}, {
"Title": "The Martian",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTc2MTQ3MDA1Nl5BMl5BanBnXkFtZTgwODA3OTI4NjE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Limitless",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BYmViZGM0MGItZTdiYi00ZDU4LWIxNDYtNTc1NWQ5Njc2N2YwXkEyXkFqcGdeQXVyNDk3NzU2MTQ@._V1_UY268_CR2,0,182,268_AL_.jpg"
}, {
"Title": "TRON: Legacy",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTk4NTk4MTk1OF5BMl5BanBnXkFtZTcwNTE2MDIwNA@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Gravity",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BNjE5MzYwMzYxMF5BMl5BanBnXkFtZTcwOTk4MTk0OQ@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Oblivion",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTQwMDY0MTA4MF5BMl5BanBnXkFtZTcwNzI3MDgxOQ@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Ghost In The Shell",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BM2NmZjQ4MjUtZGQ1YS00NjY0LTgzMDQtZjM4ZjJmMjNmZGY3XkEyXkFqcGdeQXVyNjA2MDM5MjU@._V1_UY268_CR120,0,182,268_AL_.jpg"
}, {
"Title": "Elysium",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BNDc2NjU0MTcwNV5BMl5BanBnXkFtZTcwMjg4MDg2OQ@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Terminator Genisys",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMjM1NTc0NzE4OF5BMl5BanBnXkFtZTgwNDkyNjQ1NTE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Looper",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTY3NTY0MjEwNV5BMl5BanBnXkFtZTcwNTE3NDA1OA@@._V1_UY268_CR12,0,182,268_AL_.jpg"
}]
}, {
"Title": "Marvel Universe Titles",
"Content": [{
"Title": "X-Men Origins: Wolverine",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BZWRhMzdhMzEtZTViNy00YWYyLTgxZmUtMTMwMWM0NTEyMjk3XkEyXkFqcGdeQXVyNTIzOTk5ODM@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Iron Man",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTczNTI2ODUwOF5BMl5BanBnXkFtZTcwMTU0NTIzMw@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Iron Man 2",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTM0MDgwNjMyMl5BMl5BanBnXkFtZTcwNTg3NzAzMw@@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Iron Man 3",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTkzMjEzMjY1M15BMl5BanBnXkFtZTcwNTMxOTYyOQ@@._V1_UY268_CR3,0,182,268_AL_.jpg"
}, {
"Title": "Fantastic 4",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTk0OTMyMDA0OF5BMl5BanBnXkFtZTgwMzY5NTkzNTE@._V1_UX182_CR0,0,182,268_AL_.jpg"
}, {
"Title": "Hulk",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTQxNzUxNTE4Nl5BMl5BanBnXkFtZTYwMjcyNTk5._V1_UY268_CR4,0,182,268_AL_.jpg"
}, {
"Title": "The Incredible Hulk",
"Source": "https://images-na.ssl-images-amazon.com/images/M/MV5BMTUyNzk3MjA1OF5BMl5BanBnXkFtZTcwMTE1Njg2MQ@@._V1_UY190_CR0,0,128,190_AL_.jpg"
}]
}],
"HighlightMovieTitle": "The Wolf of Wall Street (2013)",
"HighlightMovieDescription": "Based on the true story of Jordan Belfort, from his rise to a wealthy stock-broker living the high life to his fall involving crime, corruption and the federal government.",
"HighlightMovieImage": "http://ia.media-imdb.com/images/M/MV5BYWRhMjlmNGUtYTIwYS00OTYyLThjYmMtMTU2MWU3MmRhNGNkXkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SY1000_SX1500_AL_.jpg"
},
"ProductsCatalogItemTemplate.xaml": {
"Name": "Logo Tee",
"Description": "Cotton blend lends for ultimate comfort.",
"Image": "product_item_0.jpg",
"Price": "$39",
"ThumbnailHeight": "100",
"Manufacturer": "UXdivers"
},
"DashboardVariantItemTemplate.xaml": {
"BackgroundColor": "#AAc01e5c",
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"ShowBackgroundColor": "true",
"Icon": "\ue838",
"Title": "Dashboard Item"
},
"DashboardAppNotificationItemTemplate.xaml" : {
"BackgroundImage": "dashboard_thumbnail_0.jpg",
"ShowBackgroundColor": "true",
"Icon": "\ue944",
"Body": "Hey buddy :), what's up? I'm currently working on this amazing stuff called Grial. Have you heard about it? You shoud give it a try....it really rocks!!!!!.",
"Avatar": "friend_thumbnail_55.jpg",
"BackgroundColor": "#B31250",
"Title" : "Twitter"
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.GrialDarkTheme">
<!--
THEME COLORS
The colors below will be automatically updated on each platform project by the build task.
IMPORTANT: To avoid issues on Android please make sure your accent color is not transparent!
Just add "FF" inmediately after the "#" to your color.
So these are not valid (both are equivalent and means a transparent color):
#169CEE
#00169CEE
...but this is:
#FF169CEE
-->
<!-- Grial Theme Exported Colors -->
<Color x:Key="AccentColor">#FFDA125F</Color>
<Color x:Key="BaseTextColor">#D6E1F1</Color>
<!-- GENERAL COLORS -->
<Color x:Key="InverseTextColor">White</Color>
<Color x:Key="BrandColor">#ad1457</Color>
<Color x:Key="BrandNameColor">#FFFFFF</Color>
<Color x:Key="BaseLightTextColor">#7b7b7b</Color>
<Color x:Key="OverImageTextColor">#FFFFFF</Color>
<Color x:Key="EcommercePromoTextColor">#FFFFFF</Color>
<Color x:Key="SocialHeaderTextColor">#62527A</Color>
<Color x:Key="ArticleHeaderBackgroundColor">#1B1D22</Color>
<Color x:Key="CustomNavBarTextColor">#FFFFFF</Color>
<Color x:Key="ListViewItemTextColor">#FFFFFF</Color>
<Color x:Key="AboutHeaderBackgroundColor">#FFFFFF</Color>
<Color x:Key="BasePageColor">#282C37</Color>
<Color x:Key="BaseTabbedPageColor">#213D55</Color>
<Color x:Key="MainWrapperBackgroundColor">#1B1D22</Color>
<Color x:Key="CategoriesListIconColor">#55000000</Color>
<Color x:Key="DashboardIconColor">#FFFFFF</Color>
<!-- COMPLEMENT COLORS -->
<Color x:Key="ComplementColor">#525ABB</Color>
<Color x:Key="TranslucidBlack">#44000000</Color>
<Color x:Key="TranslucidWhite">#22ffffff</Color>
<!-- INDICATOR COLORS -->
<Color x:Key="OkColor">#22c064</Color>
<Color x:Key="ErrorColor">Red</Color>
<Color x:Key="WarningColor">#ffc107</Color>
<Color x:Key="NotificationColor">#1274d1</Color>
<!-- BUTTONS & ENTRY COLORS -->
<Color x:Key="SaveButtonColor">#22c064</Color>
<Color x:Key="DeleteButtonColor">#D50000</Color>
<Color x:Key="LabelButtonColor">#ffffff</Color>
<Color x:Key="PlaceholderColor">#FFFFFF</Color>
<Color x:Key="PlaceholderColorEntry">#505971</Color>
<Color x:Key="RoundedLabelBackgroundColor">#525ABB</Color>
<!-- MAIN MENU COLORS -->
<Color x:Key="MainMenuHeaderBackgroundColor">Transparent</Color>
<Color x:Key="MainMenuBackgroundColor">#1B1F2A</Color>
<Color x:Key="MainMenuSeparatorColor">Transparent</Color>
<Color x:Key="MainMenuTextColor">#D6E1F1</Color>
<Color x:Key="MainMenuIconColor">#D6E1F1</Color>
<!-- SEPARATORS COLORS -->
<Color x:Key="ListViewSeparatorColor">#151C22</Color>
<Color x:Key="BaseSeparatorColor">#7b7b7b</Color>
<!-- CHAT COLORS -->
<Color x:Key="ChatRightBalloonBackgroundColor">#525ABB</Color>
<Color x:Key="ChatBalloonFooterTextColor">#FFFFFF</Color>
<Color x:Key="ChatRightTextColor">#FFFFFF</Color>
<Color x:Key="ChatLeftTextColor">#FFFFFF</Color>
</ResourceDictionary>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class GrialDarkTheme
{
public GrialDarkTheme()
{
InitializeComponent();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.GrialEnterpriseTheme">
<!--
THEME COLORS
The colors below will be automatically updated on each platform project by the build task.
IMPORTANT: To avoid issues on Android please make sure your accent color is not transparent!
Just add "FF" inmediately after the "#" to your color.
So these are not valid (both are equivalent and means a transparent color):
#169CEE
#00169CEE
...but this is:
#FF169CEE
-->
<!-- Grial Theme Exported Colors -->
<Color x:Key="AccentColor">#FF25BC99</Color>
<Color x:Key="BaseTextColor">#FFFFFF</Color>
<!-- GENERAL COLORS -->
<Color x:Key="InverseTextColor">White</Color>
<Color x:Key="BrandColor">#1F8269</Color>
<Color x:Key="BrandNameColor">#FFFFFF</Color>
<Color x:Key="BaseLightTextColor">#7b7b7b</Color>
<Color x:Key="OverImageTextColor">#FFFFFF</Color>
<Color x:Key="EcommercePromoTextColor">#FFFFFF</Color>
<Color x:Key="SocialHeaderTextColor">#666666</Color>
<Color x:Key="ArticleHeaderBackgroundColor">#344860</Color>
<Color x:Key="CustomNavBarTextColor">#FFFFFF</Color>
<Color x:Key="ListViewItemTextColor">#666666</Color>
<Color x:Key="AboutHeaderBackgroundColor">#FFFFFF</Color>
<Color x:Key="BasePageColor">#1A2634</Color>
<Color x:Key="BaseTabbedPageColor">#fafafa</Color>
<Color x:Key="MainWrapperBackgroundColor">#1B1D22</Color>
<Color x:Key="CategoriesListIconColor">#55000000</Color>
<Color x:Key="DashboardIconColor">#FFFFFF</Color>
<!-- COMPLEMENT COLORS -->
<Color x:Key="ComplementColor">#525ABB</Color>
<Color x:Key="TranslucidBlack">#44000000</Color>
<Color x:Key="TranslucidWhite">#22ffffff</Color>
<!-- INDICATOR COLORS -->
<Color x:Key="OkColor">#22c064</Color>
<Color x:Key="ErrorColor">Red</Color>
<Color x:Key="WarningColor">#ffc107</Color>
<Color x:Key="NotificationColor">#1274d1</Color>
<!-- BUTTONS & ENTRY COLORS -->
<Color x:Key="SaveButtonColor">#22c064</Color>
<Color x:Key="DeleteButtonColor">#D50000</Color>
<Color x:Key="LabelButtonColor">#ffffff</Color>
<Color x:Key="PlaceholderColor">#ffffff</Color>
<Color x:Key="PlaceholderColorEntry">#344860</Color>
<Color x:Key="RoundedLabelBackgroundColor">#122336</Color>
<!-- MAIN MENU COLORS -->
<Color x:Key="MainMenuHeaderBackgroundColor">#384F63</Color>
<Color x:Key="MainMenuBackgroundColor">#344860</Color>
<Color x:Key="MainMenuSeparatorColor">Transparent</Color>
<Color x:Key="MainMenuTextColor">#FFFFFF</Color>
<Color x:Key="MainMenuIconColor">#FFFFFF</Color>
<!-- SEPARATORS COLORS -->
<Color x:Key="ListViewSeparatorColor">#1B1D22</Color>
<Color x:Key="BaseSeparatorColor">#7b7b7b</Color>
<!-- CHAT COLORS -->
<Color x:Key="ChatRightBalloonBackgroundColor">#525ABB</Color>
<Color x:Key="ChatBalloonFooterTextColor">#FFFFFF</Color>
<Color x:Key="ChatRightTextColor">#FFFFFF</Color>
<Color x:Key="ChatLeftTextColor">#FFFFFF</Color>
</ResourceDictionary>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class GrialEnterpriseTheme
{
public GrialEnterpriseTheme()
{
InitializeComponent();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.GrialLightTheme">
<!--
THEME COLORS
The colors below will be automatically updated on each platform project by the build task.
IMPORTANT: To avoid issues on Android please make sure your accent color is not transparent!
Just add "FF" inmediately after the "#" to your color.
So these are not valid (both are equivalent and means a transparent color):
#169CEE
#00169CEE
...but this is:
#FF169CEE
-->
<!-- Grial Theme Exported Colors -->
<Color x:Key="AccentColor">#FFDA125F</Color>
<Color x:Key="BaseTextColor">#666666</Color>
<!-- GENERAL COLORS -->
<Color x:Key="InverseTextColor">White</Color>
<Color x:Key="BrandColor">#ad1457</Color>
<Color x:Key="BrandNameColor">#FFFFFF</Color>
<Color x:Key="BaseLightTextColor">#7b7b7b</Color>
<Color x:Key="OverImageTextColor">#FFFFFF</Color>
<Color x:Key="EcommercePromoTextColor">#FFFFFF</Color>
<Color x:Key="SocialHeaderTextColor">#666666</Color>
<Color x:Key="ArticleHeaderBackgroundColor">#F1F3F5</Color>
<Color x:Key="CustomNavBarTextColor">#FFFFFF</Color>
<Color x:Key="ListViewItemTextColor">#666666</Color>
<Color x:Key="AboutHeaderBackgroundColor">#FFFFFF</Color>
<Color x:Key="BasePageColor">#FFFFFF</Color>
<Color x:Key="BaseTabbedPageColor">#fafafa</Color>
<Color x:Key="MainWrapperBackgroundColor">#EFEFEF</Color>
<Color x:Key="CategoriesListIconColor">#55000000</Color>
<Color x:Key="DashboardIconColor">#FFFFFF</Color>
<!-- COMPLEMENT COLORS -->
<Color x:Key="ComplementColor">#525ABB</Color>
<Color x:Key="TranslucidBlack">#44000000</Color>
<Color x:Key="TranslucidWhite">#22ffffff</Color>
<!-- INDICATOR COLORS -->
<Color x:Key="OkColor">#22c064</Color>
<Color x:Key="ErrorColor">Red</Color>
<Color x:Key="WarningColor">#ffc107</Color>
<Color x:Key="NotificationColor">#1274d1</Color>
<!-- BUTTONS & ENTRY COLORS -->
<Color x:Key="SaveButtonColor">#22c064</Color>
<Color x:Key="DeleteButtonColor">#D50000</Color>
<Color x:Key="LabelButtonColor">#ffffff</Color>
<Color x:Key="PlaceholderColor">#22ffffff</Color>
<Color x:Key="PlaceholderColorEntry">#FFFFFF</Color>
<Color x:Key="RoundedLabelBackgroundColor">#525ABB</Color>
<!-- MAIN MENU COLORS -->
<Color x:Key="MainMenuHeaderBackgroundColor">#384F63</Color>
<Color x:Key="MainMenuBackgroundColor">#F1F3F5</Color>
<Color x:Key="MainMenuSeparatorColor">Transparent</Color>
<Color x:Key="MainMenuTextColor">#666666</Color>
<Color x:Key="MainMenuIconColor">#666666</Color>
<!-- SEPARATORS COLORS -->
<Color x:Key="ListViewSeparatorColor">#D3D3D3</Color>
<Color x:Key="BaseSeparatorColor">#7b7b7b</Color>
<!-- CHAT COLORS -->
<Color x:Key="ChatRightBalloonBackgroundColor">#525ABB</Color>
<Color x:Key="ChatBalloonFooterTextColor">#FFFFFF</Color>
<Color x:Key="ChatRightTextColor">#FFFFFF</Color>
<Color x:Key="ChatLeftTextColor">#FFFFFF</Color>
</ResourceDictionary>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class GrialLightTheme
{
public GrialLightTheme()
{
InitializeComponent();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ResourceDictionary
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.MyAppTheme">
<!--
THEME COLORS
The colors below will be automatically updated on each platform project by the build task.
IMPORTANT: To avoid issues on Android please make sure your accent color is not transparent!
Just add "FF" inmediately after the "#" to your color.
So these are not valid (both are equivalent and means a transparent color):
#169CEE
#00169CEE
...but this is:
#FF169CEE
-->
<!-- Grial Theme Exported Colors -->
<Color x:Key="AccentColor">#FFa2c300</Color>
<Color x:Key="BaseTextColor">#666666</Color>
<!-- GENERAL COLORS -->
<Color x:Key="InverseTextColor">White</Color>
<Color x:Key="BrandColor">#ad1457</Color>
<Color x:Key="BrandNameColor">#FFFFFF</Color>
<Color x:Key="BaseLightTextColor">#7b7b7b</Color>
<Color x:Key="OverImageTextColor">#000000</Color>
<Color x:Key="EcommercePromoTextColor">#FFFFFF</Color>
<Color x:Key="SocialHeaderTextColor">#666666</Color>
<Color x:Key="ArticleHeaderBackgroundColor">#F1F3F5</Color>
<Color x:Key="CustomNavBarTextColor">#FFFFFF</Color>
<Color x:Key="ListViewItemTextColor">#666666</Color>
<Color x:Key="AboutHeaderBackgroundColor">#FFFFFF</Color>
<Color x:Key="BasePageColor">#FFFFFF</Color>
<Color x:Key="BaseTabbedPageColor">#fafafa</Color>
<Color x:Key="MainWrapperBackgroundColor">#EFEFEF</Color>
<Color x:Key="CategoriesListIconColor">#55000000</Color>
<Color x:Key="DashboardIconColor">#FFFFFF</Color>
<!-- COMPLEMENT COLORS -->
<Color x:Key="ComplementColor">#d480d6</Color>
<Color x:Key="TranslucidBlack">#44000000</Color>
<Color x:Key="TranslucidWhite">#22ffffff</Color>
<!-- INDICATOR COLORS -->
<Color x:Key="OkColor">#22c064</Color>
<Color x:Key="ErrorColor">Red</Color>
<Color x:Key="WarningColor">#ffc107</Color>
<Color x:Key="NotificationColor">#1274d1</Color>
<!-- BUTTONS & ENTRY COLORS -->
<Color x:Key="SaveButtonColor">#22c064</Color>
<Color x:Key="DeleteButtonColor">#D50000</Color>
<Color x:Key="LabelButtonColor">#ffffff</Color>
<Color x:Key="PlaceholderColor">#22ffffff</Color>
<Color x:Key="PlaceholderColorEntry">#FFFFFF</Color>
<Color x:Key="RoundedLabelBackgroundColor">#525ABB</Color>
<!-- MAIN MENU COLORS -->
<Color x:Key="MainMenuHeaderBackgroundColor">#384F63</Color>
<Color x:Key="MainMenuBackgroundColor">#F1F3F5</Color>
<Color x:Key="MainMenuSeparatorColor">Transparent</Color>
<Color x:Key="MainMenuTextColor">#666666</Color>
<Color x:Key="MainMenuIconColor">#666666</Color>
<!-- SEPARATORS COLORS -->
<Color x:Key="ListViewSeparatorColor">#D3D3D3</Color>
<Color x:Key="BaseSeparatorColor">#7b7b7b</Color>
<!-- CHAT COLORS -->
<Color x:Key="ChatRightBalloonBackgroundColor">#525ABB</Color>
<Color x:Key="ChatBalloonFooterTextColor">#FFFFFF</Color>
<Color x:Key="ChatRightTextColor">#FFFFFF</Color>
<Color x:Key="ChatLeftTextColor">#FFFFFF</Color>
</ResourceDictionary>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class MyAppTheme
{
public MyAppTheme()
{
InitializeComponent();
}
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class ArticleDetailViewModel : ModelBasedViewModel
{
public ArticleDetailViewModel( Article artic) : base (artic)
{
//Title = Generic?.Title;
//Subtitle = Generic?.Body;
}
public Article Article => Model as Article;
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
using System.Collections.Generic;
using System.Diagnostics;
namespace inutralia.ViewModels
{
public class ArticleListViewModel : BaseViewModel
{
public ArticleListViewModel()
{
}
// Lista de articulos
ObservableRangeCollection<Article> _Articles;
// Comando de update del listadd
Command _RefreshArticlesCommand;
// Acceso a la lista de articulos
public ObservableRangeCollection<Article> Articles
{
// Getter (lazy load), crea la lista si no existe
get { return _Articles ?? (_Articles = new ObservableRangeCollection<Article>()); }
// Setter. cambiar el valor y notifica a la vista de dicho cambio
set
{
_Articles = value;
OnPropertyChanged("Articles");
}
}
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadArticlesCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (Articles.Count < 1)
await FetchArticles();
}
/// <summary>
/// Acceso al comando de actualización del listado
/// </summary>
public Command RefreshArticlesCommand
{
// Getter (lazy load), crea el comando si no existe
get { return _RefreshArticlesCommand ?? (_RefreshArticlesCommand = new Command(async () => await ExecuteRefreshArticlesCommand())); }
}
/// <summary>
/// Proceso de ejecución del comando de actualización del listado
/// </summary>
async Task ExecuteRefreshArticlesCommand()
{
// Hace que el comando no se pueda ejecutar de nuevo
RefreshArticlesCommand.ChangeCanExecute();
// Realiza el proceso de actualización
await FetchArticles();
// Hace que el comando pueda volver a ejecutarse
RefreshArticlesCommand.ChangeCanExecute();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchArticles()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
Articles = new ObservableRangeCollection<Article>(await App.API.RefreshListAsync<Article>());
}
catch (System.Exception e)
{
Debug.WriteLine(e.Message);
Articles.Clear();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
}
}
\ No newline at end of file
using MvvmHelpers;
using Xamarin.Forms;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace inutralia
{
/// <summary>
/// Implements the INavigation interface on top of BaseViewModel.
/// </summary>
public abstract class BaseNavigationViewModel : BaseViewModel, INavigation
{
INavigation _Navigation
{
get
{
Page mainPage = Application.Current?.MainPage;
if (mainPage is MasterDetailPage)
return (mainPage as MasterDetailPage).Detail?.Navigation;
return mainPage?.Navigation;
}
}
#region INavigation implementation
public void RemovePage(Page page)
{
_Navigation?.RemovePage(page);
}
public void InsertPageBefore(Page page, Page before)
{
_Navigation?.InsertPageBefore(page, before);
}
public async Task PushAsync(Page page)
{
var task = _Navigation?.PushAsync(page);
if (task != null)
await task;
}
public async Task<Page> PopAsync()
{
var task = _Navigation?.PopAsync();
return task != null ? await task : await Task.FromResult(null as Page);
}
public async Task PopToRootAsync()
{
var task = _Navigation?.PopToRootAsync();
if (task != null)
await task;
}
public async Task PushModalAsync(Page page)
{
var task = _Navigation?.PushModalAsync(page);
if (task != null)
await task;
}
public async Task<Page> PopModalAsync()
{
var task = _Navigation?.PopModalAsync();
return task != null ? await task : await Task.FromResult(null as Page);
}
public async Task PushAsync(Page page, bool animated)
{
var task = _Navigation?.PushAsync(page, animated);
if (task != null)
await task;
}
public async Task<Page> PopAsync(bool animated)
{
var task = _Navigation?.PopAsync(animated);
return task != null ? await task : await Task.FromResult(null as Page);
}
public async Task PopToRootAsync(bool animated)
{
var task = _Navigation?.PopToRootAsync(animated);
if (task != null)
await task;
}
public async Task PushModalAsync(Page page, bool animated)
{
var task = _Navigation?.PushModalAsync(page, animated);
if (task != null)
await task;
}
public async Task<Page> PopModalAsync(bool animated)
{
var task = _Navigation?.PopModalAsync(animated);
return task != null ? await task : await Task.FromResult(null as Page);
}
public IReadOnlyList<Page> NavigationStack => _Navigation?.NavigationStack;
public IReadOnlyList<Page> ModalStack => _Navigation?.ModalStack;
#endregion
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
namespace inutralia.ViewModels
{
public class CustomMenuViewModel : MenuBaseViewModel
{
public CustomMenuViewModel () : this ( new Models.Menu())
{
}
public CustomMenuViewModel (Models.Menu menu) : base (menu)
{
}
/// <summary>
/// El menú guardado en el almacenamiento local
/// </summary>
protected LocalMenu _LocalMenu = null;
/// <summary>
/// El ViewModel devuelve el menú local como menú semanal
/// </summary>
public override MenuBase WeekMenu => _LocalMenu;
/// <summary>
/// Indica si existe menú en el almacenamiento local
/// </summary>
public bool HasMenu => _LocalMenu != null;
/// <summary>
/// Indica que no hay datos de menú
/// </summary>
public bool NoMenuPanel => !HasMenu && IsNotBusy;
/// <summary>
/// Los índices de plato seleccionado en el día mostrado
/// </summary>
public LocalMenu.MealSelections CurrentSelections
{
get
{
if ((Index >= 0) && (Index < _LocalMenu?.DaySelections?.Length))
{
var retVal = _LocalMenu.DaySelections [Index];
if(retVal == null)
{
retVal = new LocalMenu.MealSelections ();
_LocalMenu.DaySelections [Index] = retVal;
} //endif
return retVal;
} //endif
return null;
}
}
#region Opciones seleccionadas
public bool IsLunchFirstOption1
{
get { return CurrentSelections?.LunchFirstIndex == 0; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.LunchFirstIndex == 0;
if (value != current)
{
CurrentSelections.LunchFirstIndex = value ? 0 : -1;
SelectionChanged ();
OnPropertyChanged ("IsLunchFirstOption1");
OnPropertyChanged ("IsLunchFirstOption2");
} //endif
} //endif
}
}
public bool IsLunchFirstOption2
{
get { return CurrentSelections?.LunchFirstIndex == 1; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.LunchFirstIndex == 1;
if (value != current)
{
CurrentSelections.LunchFirstIndex = value ? 1 : -1;
SelectionChanged ();
OnPropertyChanged ("IsLunchFirstOption1");
OnPropertyChanged ("IsLunchFirstOption2");
} //endif
} //endif
}
}
public bool IsLunchSecondOption1
{
get { return CurrentSelections?.LunchSecondIndex == 0; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.LunchSecondIndex == 0;
if (value != current)
{
CurrentSelections.LunchSecondIndex = value ? 0 : -1;
SelectionChanged ();
OnPropertyChanged ("IsLunchSecondOption1");
OnPropertyChanged ("IsLunchSecondOption2");
} //endif
} //endif
}
}
public bool IsLunchSecondOption2
{
get { return CurrentSelections?.LunchSecondIndex == 1; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.LunchSecondIndex == 1;
if (value != current)
{
CurrentSelections.LunchSecondIndex = value ? 1 : -1;
SelectionChanged ();
OnPropertyChanged ("IsLunchSecondOption1");
OnPropertyChanged ("IsLunchSecondOption2");
} //endif
} //endif
}
}
public bool IsDinnerFirstOption1
{
get { return CurrentSelections?.DinnerFirstIndex == 0; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.DinnerFirstIndex == 0;
if (value != current)
{
CurrentSelections.DinnerFirstIndex = value ? 0 : -1;
SelectionChanged ();
OnPropertyChanged ("IsDinnerFirstOption1");
OnPropertyChanged ("IsDinnerFirstOption2");
} //endif
} //endif
}
}
public bool IsDinnerFirstOption2
{
get { return CurrentSelections?.DinnerFirstIndex == 1; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.DinnerFirstIndex == 1;
if (value != current)
{
CurrentSelections.DinnerFirstIndex = value ? 1 : -1;
SelectionChanged ();
OnPropertyChanged ("IsDinnerFirstOption1");
OnPropertyChanged ("IsDinnerFirstOption2");
} //endif
} //endif
}
}
public bool IsDinnerSecondOption1
{
get { return CurrentSelections?.DinnerSecondIndex == 0; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.DinnerSecondIndex == 0;
if (value != current)
{
CurrentSelections.DinnerSecondIndex = value ? 0 : -1;
SelectionChanged ();
OnPropertyChanged ("IsDinnerSecondOption1");
OnPropertyChanged ("IsDinnerSecondOption2");
} //endif
} //endif
}
}
public bool IsDinnerSecondOption2
{
get { return CurrentSelections?.DinnerSecondIndex == 1; }
set
{
if (CurrentSelections != null)
{
bool current = CurrentSelections.DinnerSecondIndex == 1;
if (value != current)
{
CurrentSelections.DinnerSecondIndex = value ? 1 : -1;
SelectionChanged ();
OnPropertyChanged ("IsDinnerSecondOption1");
OnPropertyChanged ("IsDinnerSecondOption2");
} //endif
} //endif
}
}
#endregion
protected bool _SelectionHasBeenChanged = false;
public async Task LoadData ()
{
bool ShouldLoadRecipes = false;
IsBusy = true;
OnPropertyChanged ("NoMenuPanel");
// Obtener menú local
var lista = await App.LocalData.RefreshListAsync<LocalMenu> ();
if (lista.Count > 0)
{
_LocalMenu = lista [0];
OnDataRefreshed ();
OnPropertyChanged ("HasMenu");
} //endif
// Obtener menú del servidor
if (await App.API.RefreshItemAsync (Model))
{
Models.Menu ServerMenu = Model as Models.Menu;
if (_LocalMenu == null)
{
// No hay menú local, copiar directamente el del servidor
_LocalMenu = new LocalMenu ();
_LocalMenu.AssignFromMenu (ServerMenu);
await App.LocalData.UpdateItemAsync (_LocalMenu, true);
// Indicar que hay que cargar recetas
ShouldLoadRecipes = true;
}
else
{
// Hay menú local. Comprobar si el del servidor es superior al último recibido
if(_LocalMenu.LastReceivedMenuId != ServerMenu.Id)
{
// En ese caso, preguntar si se quiere utilizar el nuevo ...
if (await Application.Current?.MainPage.DisplayAlert("Nuevo menú semanal", "Hay un nuevo menú semanal disponible", "Utilizarlo", "Descartarlo"))
{
//Eliminamos el dato local, ya que le UpdateItemAsync no es capaz de reconocer que se trata del mismo dato, ya que cambia el ID
await App.LocalData.DeleteItemAsync(_LocalMenu);
// No hay menú local, copiar directamente el del servidor
_LocalMenu = new LocalMenu();
// Asignamos el menú como el actual
_LocalMenu.AssignFromMenu(ServerMenu);
//Creamos el dato nuevo
await App.LocalData.UpdateItemAsync(_LocalMenu, true);
// Indicar que hay que cargar recetas
ShouldLoadRecipes = true;
} //endif
// Guardar el id del menú semanal recibido, para no volver a preguntar
_LocalMenu.LastReceivedMenuId = ServerMenu.Id;
// Guardar el menú local
await App.LocalData.UpdateItemAsync(_LocalMenu, false);
} //endif
} //endif
} //endif
// Si es necesario, cargar recetas y actualizar
if (ShouldLoadRecipes)
{
await LoadAllRecipesAsync ();
await App.LocalData.UpdateItemAsync (_LocalMenu, false);
} //endif
// Actualizar día seleccionado
OnDataRefreshed ();
OnPropertyChanged ("HasMenu");
_SelectionHasBeenChanged = false;
IsBusy = false;
OnPropertyChanged ("NoMenuPanel");
}
protected void SelectionChanged ()
{
_SelectionHasBeenChanged = true;
}
public async Task UpdateShoppingListAsync ()
{
if (_SelectionHasBeenChanged)
{
IsBusy = true;
// Esperar a que las recetas estén listas
while (IsLoadingRecipes)
await Task.Delay (200);
// Preparar la lista de ingredientes a partir de las recetas seleccionadas
var ingredients = new HashSet<string> ();
for (int i = 0; i < _LocalMenu?.DaySelections?.Length; i++)
{
if (i < _LocalMenu.Days.Count)
{
var Day = _LocalMenu.Days [i];
var meals = _LocalMenu.DaySelections [i];
if (meals != null)
{
AddRecipe (ingredients, Day.LunchFirst, meals.LunchFirstIndex);
AddRecipe (ingredients, Day.LunchSecond, meals.LunchSecondIndex);
AddRecipe (ingredients, Day.DinnerFirst, meals.DinnerFirstIndex);
AddRecipe (ingredients, Day.DinnerSecond, meals.DinnerSecondIndex);
} //endif
} //endif
} //endfor
// Eliminar de la lista de la compra los ingredientes que no estén en los encontrados
var listaCompra = await App.LocalData.RefreshListAsync<ShoppingList> ();
foreach (var ing in listaCompra.Where (sl => sl.FromMenus && !ingredients.Contains (sl.Text)))
{
await App.LocalData.DeleteItemAsync (ing);
} //endforeach
// Añadir a la lista de la compra los que falten
foreach (string ing in ingredients.Where (i => listaCompra.Find (sl => sl.FromMenus && sl.Text.Equals (i)) == null))
{
await App.LocalData.UpdateItemAsync (new ShoppingList () { FromMenus = true, Select = false, Text = ing }, true);
} //endforeach
await App.LocalData.UpdateItemAsync (_LocalMenu);
IsBusy = false;
_SelectionHasBeenChanged = false;
} //endif
}
protected void AddRecipe ( HashSet<string> ingredients, IList<Recipe> recipes, int index)
{
if( (index >= 0) && (index < recipes.Count) )
{
if (recipes [index].Ingredients != null)
{
foreach (var ing in recipes [index].Ingredients)
{
ingredients.Add (ing.Name);
} //endforeach
} //endif
} //endif
}
protected override void OnDataRefreshed ()
{
base.OnDataRefreshed ();
OnPropertyChanged ("CurrentSelections");
OnPropertyChanged ("IsLunchFirstOption1");
OnPropertyChanged ("IsLunchFirstOption2");
OnPropertyChanged ("IsLunchSecondOption1");
OnPropertyChanged ("IsLunchSecondOption2");
OnPropertyChanged ("IsDinnerFirstOption1");
OnPropertyChanged ("IsDinnerFirstOption2");
OnPropertyChanged ("IsDinnerSecondOption1");
OnPropertyChanged ("IsDinnerSecondOption2");
}
protected override void OnIndexChanged ()
{
base.OnIndexChanged ();
OnPropertyChanged ("CurrentSelections");
OnPropertyChanged ("IsLunchFirstOption1");
OnPropertyChanged ("IsLunchFirstOption2");
OnPropertyChanged ("IsLunchSecondOption1");
OnPropertyChanged ("IsLunchSecondOption2");
OnPropertyChanged ("IsDinnerFirstOption1");
OnPropertyChanged ("IsDinnerFirstOption2");
OnPropertyChanged ("IsDinnerSecondOption1");
OnPropertyChanged ("IsDinnerSecondOption2");
}
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
using System;
namespace inutralia.ViewModels
{
public class GenericDetailViewModel : MenuBaseViewModel
{
public GenericDetailViewModel(Generic gener) : base (gener)
{
}
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class GenericListViewModel : BaseViewModel
{
public GenericListViewModel()
{
}
//Lista de menús genéricos
ObservableRangeCollection<Generic> _Generics;
// Comando de update del listado
Command _RefreshGenericsCommand;
// Acceso a la lista de menús genéricos
public ObservableRangeCollection<Generic> Generics
{
// Getter (lazy load), crea la lista si no existe
get { return _Generics ?? (_Generics = new ObservableRangeCollection<Generic>()); }
// Setter. Cambia el valor y notifica a la vista de dicho cambio
set
{
_Generics = value;
OnPropertyChanged("Generics");
}
}
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadGenericsCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (Generics.Count < 1)
await FetchGenerics();
}
/// <summary>
/// Acceso al comando de actualización del listado
/// </summary>
public Command RefreshGenericsCommand
{
// Getter (lazy load), crea el comando si no existe
get { return _RefreshGenericsCommand ?? (_RefreshGenericsCommand = new Command(async () => await ExecuteRefreshGenericsCommand())); }
}
/// <summary>
/// Proceso de ejecución del comando de actualización del listado
/// </summary>
async Task ExecuteRefreshGenericsCommand()
{
// Hace que el comando no se pueda ejecutar de nuevo
RefreshGenericsCommand.ChangeCanExecute();
// Realiza el proceso de actualización
await FetchGenerics();
// Hace que el comando pueda volver a ejecutarse
RefreshGenericsCommand.ChangeCanExecute();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchGenerics()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
Generics = new ObservableRangeCollection<Generic>(await App.API.RefreshListAsync<Generic>());
}
catch (System.Exception)
{
Generics.Clear();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
}
}
\ No newline at end of file
using inutralia.Models;
using inutralia.Views;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
using System;
namespace inutralia.ViewModels
{
/// <summary>
/// ViewModel de un menú semanal
/// </summary>
public abstract class MenuBaseViewModel : ModelBasedViewModel
{
public MenuBaseViewModel ( MenuBase menu) : base (menu)
{
Title = WeekMenu?.Title;
}
#region Properties
/// <summary>
/// El menú semanal mostrado
/// </summary>
public virtual MenuBase WeekMenu => Model as MenuBase;
/// <summary>
/// Backup variable para el índice del día seleccionado
/// </summary>
protected int _Index = -1;
/// <summary>
/// Índice del día seleccionado
/// </summary>
public int Index
{
get { return _Index; }
set
{
if( (_Index != value) && (value >= 0) && (value < WeekMenu?.Days?.Count) )
{
_Index = value;
OnPropertyChanged ("Index");
OnPropertyChanged ("CurrentDay");
OnIndexChanged ();
} //endif
}
}
/// <summary>
/// Retorna el día seleccionado
/// </summary>
public Day CurrentDay
{
get
{
return ( (Index >= 0) && (Index < WeekMenu?.Days?.Count) ) ? WeekMenu.Days [Index] : null;
}
}
protected bool _LoadingRecipes = false;
/// <summary>
/// Indica si se están cargando recetas
/// </summary>
public bool IsLoadingRecipes
{
get { return _LoadingRecipes; }
set
{
SetProperty (ref _LoadingRecipes, value, "IsLoadingRecipes");
OnPropertyChanged ("IsNotLoadingRecipes");
}
}
/// <summary>
/// Indica si no se están cargando recetas
/// </summary>
public bool IsNotLoadingRecipes
{
get { return !_LoadingRecipes; }
set
{
SetProperty (ref _LoadingRecipes, !value, "IsLoadingRecipes");
OnPropertyChanged ("IsNotLoadingRecipes");
}
}
#endregion
#region Commands
protected Command _ShowRecipeCommand = null;
/// <summary>
/// Comando para mostrar una receta
/// </summary>
public Command ShowRecipeCommand => _ShowRecipeCommand ??
(_ShowRecipeCommand = new Command (async (parameter) => await ShowRecipe (parameter as Recipe)));
protected Command _ShowRecomendationCommand = null;
/// <summary>
/// Comando para mostrar las recomendaciones
/// </summary>
public Command ShowRecomendationCommand => _ShowRecomendationCommand ??
(_ShowRecomendationCommand = new Command (async () => await ShowRecomendation()));
#endregion
#region Tasks
/// <summary>
/// Actualiza los datos de todas las recetas
/// </summary>
public async Task LoadAllRecipesAsync ()
{
IsLoadingRecipes = true;
// Obtener las recetas completas
foreach (var d in WeekMenu.Days)
{
foreach (var r in d.LunchFirst)
await App.API.RefreshItemAsync (r);
foreach (var r in d.LunchSecond)
await App.API.RefreshItemAsync (r);
foreach (var r in d.DinnerFirst)
await App.API.RefreshItemAsync (r);
foreach (var r in d.DinnerSecond)
await App.API.RefreshItemAsync (r);
} //endforeach
IsLoadingRecipes = false;
}
/// <summary>
/// Navega a la vista de receta
/// </summary>
/// <param name="recipe">La receta a mostrar</param>
protected async Task ShowRecipe(Recipe recipe)
{
await PushAsync (new RecipeDetailView () { BindingContext = new RecipeViewModel(recipe) });
}
/// <summary>
/// Navega a la vista de recomendaciones
/// </summary>
protected async Task ShowRecomendation ()
{
await PushAsync (new RecomendationView () { BindingContext = WeekMenu });
}
#endregion
/// <summary>
/// Llamado cuando se han actualizado los datos
/// </summary>
protected override void OnDataRefreshed ()
{
base.OnDataRefreshed ();
// Informar que ha cambiado el menú
OnPropertyChanged ("WeekMenu");
// Cambiar título
Title = WeekMenu?.Title;
// Si no tenemos un día seleccionado, seleccionar automáticamente
// el día de la semana en el que estemos
if (Index < 0)
{
DayOfWeek dw = DateTime.Now.DayOfWeek;
// Como DayOfWeek empieza con el 0 en Domingo, le "restamos 1 modulo 7"
Index = ( (int) dw + 6) % 7;
} //endif
// Informar que ha cambiado el día actual (aunque no cambie el índice
// puede haber cambiado el contenido)
OnPropertyChanged ("CurrentDay");
}
/// <summary>
/// Llamado cuando ha cambiado el índice del día seleccionado
/// </summary>
protected virtual void OnIndexChanged ()
{
}
}
}
using inutralia.Models;
using MvvmHelpers;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class RecipeListViewModel : BaseNavigationViewModel
{
public RecipeListViewModel()
{
Title = "Recetas";
Filters = new RecipeListOptionsViewModel();
}
public RecipeListOptionsViewModel Filters
{ get; private set; }
// Lista de articulos
ObservableRangeCollection<Recipe> _Recipes;
// Comando de update del listadd
Command _RefreshRecipesCommand;
// Acceso a la lista de articulos
public ObservableRangeCollection<Recipe> Recipes
{
// Getter (lazy load), crea la lista si no existe
get { return _Recipes ?? (_Recipes = new ObservableRangeCollection<Recipe>()); }
// Setter. cambiar el valor y notifica a la vista de dicho cambio
set
{
_Recipes = value;
OnPropertyChanged("Recipes");
}
}
// Indica si hay resultados
public bool IsEmpty => IsNotBusy && (Recipes.Count < 1);
public bool IsNotEmpty => IsNotBusy && (Recipes.Count > 0);
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadRecipesCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (Recipes.Count < 1)
await FetchRecipes();
}
/// <summary>
/// Acceso al comando de actualización del listado
/// </summary>
public Command RefreshRecipesCommand
{
// Getter (lazy load), crea el comando si no existe
get { return _RefreshRecipesCommand ?? (_RefreshRecipesCommand = new Command(async () => await ExecuteRefreshRecipesCommand())); }
}
/// <summary>
/// Proceso de ejecución del comando de actualización del listado
/// </summary>
async Task ExecuteRefreshRecipesCommand()
{
// Hace que el comando no se pueda ejecutar de nuevo
RefreshRecipesCommand.ChangeCanExecute();
// Realiza el proceso de actualización
await FetchRecipes();
// Hace que el comando pueda volver a ejecutarse
RefreshRecipesCommand.ChangeCanExecute();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchRecipes()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
OnPropertyChanged("IsEmpty");
OnPropertyChanged("IsNotEmpty");
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
string flags = string.Empty;
string orFlags = string.Empty;
foreach (var gr in Filters.Groups)
{
foreach (var cat in gr.Group.Options)
{
if (cat.Selected)
{
if (gr.Group.Id == 1)
{
if (orFlags.Length > 0)
orFlags += ",";
orFlags += cat.Id.ToString ();
}
else
{
if (flags.Length > 0)
flags += ",";
flags += cat.Id.ToString ();
} //endif
} //endif
} //endforeach
} //endforeach
if (string.IsNullOrEmpty (flags) && string.IsNullOrEmpty (orFlags) && string.IsNullOrEmpty(Filters?.Desc) )
{
Recipes = new ObservableRangeCollection<Recipe> (await App.API.RefreshListAsync<Recipe> ());
}
else
{
var options = new Dictionary<string, string> ();
if (!string.IsNullOrEmpty (flags)) options.Add ("flags", flags);
if (!string.IsNullOrEmpty (orFlags)) options.Add ("flags_or", orFlags);
if (!string.IsNullOrEmpty (Filters?.Desc)) options.Add ("desc", Filters.Desc);
var recipes = await App.API.RawMessage<List<Recipe>> (HttpMethod.Post, "recipes", options);
Recipes = new ObservableRangeCollection<Recipe> (recipes);
} //endif
}
catch (System.Exception e)
{
Recipes.Clear();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
OnPropertyChanged("IsEmpty");
OnPropertyChanged("IsNotEmpty");
}
}
}
using inutralia.Models;
using MvvmHelpers;
using System.Threading.Tasks;
namespace inutralia.ViewModels
{
public class RecipeViewModel : BaseNavigationViewModel
{
public RecipeViewModel ( Recipe recipe)
{
Recipe = recipe;
Title = Recipe.Name;
if(Recipe.Ingredients == null)
Recipe.Ingredients = new Ingredient[0];
}
public Recipe Recipe { get; private set; }
public async Task RefreshData ()
{
if (Recipe == null)
return;
IsBusy = true;
if (await App.API.RefreshItemAsync (Recipe))
{
OnPropertyChanged ("Recipe");
// Cambiar título
Title = Recipe.Name;
} //endif
IsBusy = false;
}
}
}
using inutralia.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.ViewModels
{
/// <summary>
/// ViewModel con task RefreshData
/// </summary>
public abstract class ModelBasedViewModel : BaseNavigationViewModel
{
public ModelBasedViewModel ( ObservableEntityData model)
{
Model = model;
}
/// <summary>
/// El modelo asociado
/// </summary>
public ObservableEntityData Model { get; private set; }
/// <summary>
/// Refresca los datos del modelo asociado
/// </summary>
public async Task RefreshData ()
{
if (Model == null)
return;
IsBusy = true;
if (await App.API.RefreshItemAsync (Model))
{
// Informar que el modelo ha cambiado
OnPropertyChanged ("Model");
// Comportamiento específico de clases hijas
OnDataRefreshed ();
} //endif
IsBusy = false;
}
/// <summary>
/// Permite a las clases hijas realizar acciones específicas
/// </summary>
protected virtual void OnDataRefreshed ()
{
}
}
}
using inutralia.Models;
using System.Threading.Tasks;
using MvvmHelpers; // Este namespace está en el paquete Refractored.MvvmHelpers
using Xamarin.Forms;
using System;
namespace inutralia.ViewModels
{
public class ProfileViewModel : BaseNavigationViewModel
{
public ProfileViewModel()
{
Profile = new Profile();
}
public Profile Profile { private set; get;}
public string Code => Profile?.Code;
public int Gender
{
get
{
return Profile.Gender == 'H' ? 0 : 1;
}
set
{
Profile.Gender = value == 0 ?'H':'M';
}
}
public int Physical
{
get
{
return Profile.Physical > 0 ? (Profile.Physical -1) : 0;
}
set
{
Profile.Physical = value + 1;
}
}
public int Preference
{
get
{
return Profile.Preference -1 ;
}
set
{
Profile.Preference = value + 1;
}
}
public async Task RefreshData()
{
IsBusy = true;
if (await App.API.RefreshItemAsync(Profile))
{
OnPropertyChanged("Preference");
OnPropertyChanged("Profile");
OnPropertyChanged("Physical");
OnPropertyChanged("Gender");
}
IsBusy = false;
}
public async Task saveData()
{
IsBusy = true;
await App.API.UpdateItemAsync(Profile);
IsBusy = false;
}
}
}
using inutralia.Models;
using MvvmHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class RecipeListOptionsViewModel : BaseNavigationViewModel
{
public RecipeListOptionsViewModel ()
{
Title = "Filtrado de Recetas";
}
public string Desc { get; set; }
ObservableRangeCollection<RecipeOptionGroupViewModel> _Groups;
public ObservableRangeCollection<RecipeOptionGroupViewModel> Groups
{
get { return _Groups ?? (_Groups = new ObservableRangeCollection<RecipeOptionGroupViewModel> ()); }
set
{
SetProperty (ref _Groups, value);
}
}
/// <summary>
/// Método que realiza la carga inicial de las opciones de filtrado
/// </summary>
public async Task ExecuteLoadOptionsCommand ()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (Groups.Count < 1)
await FetchOptions ();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchOptions ()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
var groups = App.FilterOptions;
var groupList = new ObservableRangeCollection<RecipeOptionGroupViewModel> ();
foreach (var group in groups)
groupList.Add (new RecipeOptionGroupViewModel (group));
Groups = groupList;
}
catch (System.Exception e)
{
Groups.Clear ();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
}
}
using inutralia.Models;
using MvvmHelpers;
namespace inutralia.ViewModels
{
public class RecipeOptionGroupViewModel : ObservableRangeCollection<RecipeOption>
{
public string Name { get; private set; }
public RecipeOptionGroup Group { get; private set; }
public RecipeOptionGroupViewModel ( RecipeOptionGroup group)
{
Name = group.Name;
Group = group;
AddRange (group.Options);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.ViewModels
{
class ShoppingList
{
}
}
using inutralia.Models;
using MvvmHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class ShoppingListViewModel : BaseNavigationViewModel
{
public ShoppingListViewModel()
{
}
ObservableRangeCollection<ShoppingList> _ShoppingList;
// Comando de update del listado
Command _RefreshShoppingListCommand;
// Comando de borrado de elemento
Command _DeleteShoppingListCommand;
// Acceso a la lista de ingredientes
public ObservableRangeCollection<ShoppingList> ShoppingList
{
// Getter (lazy load), crea la lista si no existe
get { return _ShoppingList ?? (_ShoppingList = new ObservableRangeCollection<ShoppingList>()); }
// Setter. Cambia el valor y notifica a la vista de dicho cambio
set
{
_ShoppingList = value;
OnPropertyChanged("ShoppingList");
}
}
public async Task AddItem (ShoppingList item)
{
// Añadir elemento y refrescar lista
if (await App.LocalData.UpdateItemAsync (item, true) != null)
await FetchShoppingList ();
}
public async Task DeleteSelected ()
{
IsBusy = true;
foreach (var item in ShoppingList)
if(item.Select)
await App.LocalData.DeleteItemAsync (item);
ShoppingList.Clear ();
await FetchShoppingList ();
}
public async Task DeleteAll ()
{
IsBusy = true;
foreach (var item in ShoppingList)
await App.LocalData.DeleteItemAsync (item);
ShoppingList.Clear ();
await FetchShoppingList ();
}
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task ExecuteLoadShoppingListCommand()
{
// Realiza el proceso de actualización si hay menos de un
// elemento en el listado
if (ShoppingList.Count < 1)
await FetchShoppingList();
}
/// <summary>
/// Acceso al comando de actualización del listado
/// </summary>
public Command RefreshShoppingListCommand
{
// Getter (lazy load), crea el comando si no existe
get { return _RefreshShoppingListCommand ?? (_RefreshShoppingListCommand = new Command(async () => await ExecuteRefreshShoppingListCommand())); }
}
/// <summary>
/// Proceso de ejecución del comando de actualización del listado
/// </summary>
async Task ExecuteRefreshShoppingListCommand()
{
// Hace que el comando no se pueda ejecutar de nuevo
RefreshShoppingListCommand.ChangeCanExecute();
// Realiza el proceso de actualización
await FetchShoppingList();
// Hace que el comando pueda volver a ejecutarse
RefreshShoppingListCommand.ChangeCanExecute();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchShoppingList()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada a LocalData para coger el listado (provoca que se actualize la vista del listado)
// Nota: Al obtener el listado, el controlador Rest del servidor no retorna el cuerpo de
// la notificación (campo Body)
try
{
// Obtener lista
var list = await App.LocalData.RefreshListAsync<ShoppingList> ();
// Ordenarla
list.Sort ((a, b) => { return a.Text.CompareTo (b.Text); });
// Asignarla a la que utiliza la vista
ShoppingList = new ObservableRangeCollection<ShoppingList>(list);
}
catch (System.Exception)
{
ShoppingList.Clear();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
public Command DeleteShoppingListCommand
{
// Getter (lazy load), crea el comando si no existe. Nótese que, a diferencia del comando
// de Refresh, éste recibe una notificación como parámetro
get
{
return _DeleteShoppingListCommand ??
(_DeleteShoppingListCommand = new Command(async (parameter) => await ExecuteDeleteShoppingListCommand(parameter as ShoppingList)));
}
}
/// <summary>
/// Proceso de ejecución de comando de borrado
/// </summary>
/// <param name="shoplist"></param>
/// <returns></returns>
///
async Task ExecuteDeleteShoppingListCommand(ShoppingList shoplist)
{
// Verificar parámetro
if (shoplist != null)
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamamos a LocalData para borrar la notificación
await App.LocalData.DeleteItemAsync(shoplist);
// Actualizamos la lista
await FetchShoppingList();
// Indicamos que ya no estamos ocupados
IsBusy = false;
} //endif
}
}
}
using inutralia.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace inutralia.ViewModels
{
public class TrivialGameViewModel : BaseNavigationViewModel
{
public class QuestionResult
{
public TrivialQuestion Question { get; set; }
public string ValidAnswer => Question.Options [Question.ValidIndex];
public string Answer => Question.Options [SelectedAnswer];
public int SelectedAnswer { get; set; }
public bool IsCorrect { get; set; }
public bool IsNotCorrect => !IsCorrect;
}
public TrivialGame Game { get; private set; }
public List<QuestionResult> Results { get; private set; }
public bool IsComplete =>
(Game?.Questions?.Count > 0) &&
(Game?.Questions?.Count == Game?.Answers?.Count);
public bool IsNotComplete => !IsComplete;
public TrivialQuestion CurrentQuestion
{
get
{
int n = Game.Answers.Count;
return (n >= 0) && (n < Game.Questions.Count) ? Game.Questions [n] : null;
}
}
public TrivialGameViewModel ( TrivialGame game)
{
Game = game;
Results = null;
GenerateTitle ();
GenerateResults ();
}
public async Task<bool> Answer ( int answer)
{
bool retVal = Game.Answer (answer);
await App.LocalData.UpdateItemAsync (Game);
GenerateTitle ();
GenerateResults ();
OnPropertyChanged ("CurrentQuestion");
OnPropertyChanged ("IsComplete");
OnPropertyChanged ("IsNotComplete");
return retVal;
}
protected void GenerateResults ()
{
if(IsComplete)
{
if(Results == null)
{
Results = new List<QuestionResult> ();
for(int i = 0; i < Game.Questions.Count; i++)
{
TrivialQuestion q = Game.Questions [i];
int answer = Game.Answers [i];
Results.Add (new QuestionResult ()
{
Question = q,
SelectedAnswer = answer,
IsCorrect = (q.ValidIndex == answer)
});
} //endfor
OnPropertyChanged ("Results");
} //endif
} //endif
}
protected void GenerateTitle ()
{
if(IsComplete)
{
Title = "Trivial: Partida completada";
}
else
{
Title = $"Trivial: Pregunta {Game.Answers.Count + 1} de {Game.Questions.Count}";
} //endif
}
}
}
using inutralia.Models;
using inutralia.Views;
using MvvmHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.ViewModels
{
public class TrivialListViewModel : BaseNavigationViewModel
{
public TrivialListViewModel ()
{
}
// Lista de partidas
ObservableRangeCollection<TrivialGame> _Games;
// Acceso a la lista de partidas
public ObservableRangeCollection<TrivialGame> Games
{
// Getter (lazy load), crea la lista si no existe
get { return _Games ?? (_Games = new ObservableRangeCollection<TrivialGame> ()); }
// Setter. cambiar el valor y notifica a la vista de dicho cambio
set
{
_Games = value;
OnPropertyChanged ("Games");
}
}
#region Crear partida
Command _NewGameCommand;
public Command NewGameCommand =>
_NewGameCommand ?? (_NewGameCommand = new Command(async () => await ExecuteNewGameCommand ()));
protected async Task ExecuteNewGameCommand ()
{
NewGameCommand.ChangeCanExecute ();
List<TrivialQuestion> questions = null;
try
{
questions = await App.API.RefreshListAsync<TrivialQuestion> ();
}
catch (Exception e)
{ }
if (questions == null)
questions = new List<TrivialQuestion> ()
{
new TrivialQuestion ()
{
Id = -1,
Image = "",
Text = "¿Cuantas manzanas hay en la foto?",
Options = new List<string> () { "Ninguna", "Una", "Cuatro", "Más de cuatro" },
ValidIndex = 0
}
};
var game = TrivialGame.Create (questions);
await App.LocalData.UpdateItemAsync (game, true);
await PushAsync (new TrivialGameView ()
{
BindingContext = new TrivialGameViewModel (game)
});
NewGameCommand.ChangeCanExecute ();
}
#endregion
#region Borrar partida
Command _DeleteGameCommand;
public Command DeleteGameCommand =>
_DeleteGameCommand ?? (_DeleteGameCommand = new Command (async (parameter) => await ExecuteDeleteGameCommand (parameter as TrivialGame)));
protected async Task ExecuteDeleteGameCommand (TrivialGame game)
{
// Verificar parámetro
if (game != null)
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamamos al API para borrar la notificación
await App.LocalData.DeleteItemAsync (game);
// Actualizamos la lista
Games.Remove (game);
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
} //endif
}
#endregion
/// <summary>
/// Método que realiza la carga inicial del listado
/// </summary>
public async Task RefreshList ()
{
await FetchGames ();
}
/// <summary>
/// Proceso de actualización del listado
/// </summary>
async Task FetchGames ()
{
// Indicamos que estamos ocupados (provoca que aparezca el indicador de carga)
IsBusy = true;
// Llamada al API para coger el listado (provoca que se actualize la vista del listado)
try
{
Games = new ObservableRangeCollection<TrivialGame> (await App.LocalData.RefreshListAsync<TrivialGame> ());
}
catch (System.Exception e)
{
Games.Clear ();
}
// Indicamos que ya no estamos ocupados (provoca que desaparezca el indicador de carga)
IsBusy = false;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Esta es la página con el listado de menus genericos.
Tiene una lista con las siguientes características:
- Utiliza un ViewModel (paradigma MVVM) como BindingContext
- Muestra el listado de los menús genéricos
- Actualiza el listado al deslizar hacia abajo (pull-to-refresh)
- Tiene menú contextual (slide-right en iOS, mantener pulsado en Android)
con un botón para borrar una notificación
-->
<!-- Importante: La página necesita x:Name para poder referenciarla en la descripción
de los elementos del menú contextual
-->
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:conv="clr-namespace:inutralia.Converters;assembly=inutralia"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
x:Class="inutralia.Views.ArticleListView"
x:Name="ArticleListView"
BackgroundColor="White"
Title="Articulos"
>
<ContentPage.Resources>
<ResourceDictionary>
<conv:ImageTransformator x:Key="cnvImg"></conv:ImageTransformator>
</ResourceDictionary>
</ContentPage.Resources>
<!-- Este es el componente para el listado. Primero configura de dónde obtiene los datos
y el método al que llamar cuando se hace tap en un elemento de la lista. Luego
configura el pull-to-refresh. Por último algunas opciones de visionado y gestión
de memoria
-->
<ListView
SeparatorVisibility="None"
SeparatorColor="{ DynamicResource ListViewSeparatorColor }"
Footer=""
ItemsSource="{Binding Articles}"
RowHeight="240"
ItemTapped="ItemTapped"
HasUnevenRows="false"
x:Name="listArticle">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:ArticleItemTemplate/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
using inutralia.Models;
using inutralia.ViewModels;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ArticleListView : ContentPage
{
// Accesor al ViewModel
protected ArticleListViewModel ViewModel => BindingContext as ArticleListViewModel;
public ArticleListView()
{
InitializeComponent();
BindingContext = new ArticleListViewModel();
}
/// <summary>
/// Método llamado al hacer tap en un elemento de la lista. Navega a la página de detalle
/// de la notificación seleccionada
/// </summary>
/// <param name="sender">La ListView</param>
/// <param name="e">Argumentos del evento</param>
void ItemTapped(object sender, ItemTappedEventArgs e)
{
// e.Item apunta a la notificación seleccionada. A partir de ella se crea su ViewModel
// y con él se crea la página de detalle y se navega a ella
Navigation.PushAsync(
new ArticleViewPage()
{
BindingContext = new ArticleDetailViewModel((Article)e.Item)
}
);
// Deselecciona el item para que no le cambie el color de fondo
((ListView)sender).SelectedItem = null;
}
/// <summary>
/// Método llamado cada vez que una página pasa a ser visible
/// </summary>
protected override async void OnAppearing()
{
base.OnAppearing();
// Le decimos al ViewModel que realice la primera carga del listado
await ViewModel.ExecuteLoadArticlesCommand();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.ArticleViewPage"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
BackgroundColor="{ DynamicResource MainWrapperBackgroundColor }">
<ScrollView x:Name="outerScrollView">
<Grid
x:Name="layeringGrid"
RowSpacing="0"
VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="*" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<!--GRID IMAGEN -->
<StackLayout>
<Grid Grid.Row="0"
Grid.RowSpan="2"
Padding="0">
<!-- MAIN IMAGE -->
<ffimageloading:CachedImage
x:Name="img"
Source="{ Binding Article.Photo }"
Aspect="AspectFill"
BackgroundColor="Black"
HorizontalOptions="FillAndExpand"
VerticalOptions="Start"
HeightRequest="180"
WidthRequest="200"
Opacity=".8"/>
</Grid>
<!-- MAIN HEADER -->
<Grid
Grid.Row="0"
VerticalOptions="EndAndExpand"
x:Name="headers"
AnchorX="0"
AnchorY="0"
BackgroundColor="#66000000">
<!-- HEADERS -->
<Label
Text="{ Binding Article.Title }"
LineBreakMode="WordWrap"
TextColor="#FFFFFFFF"
FontSize="Medium"
FontAttributes="Bold"
HeightRequest="80"
Margin="10"
HorizontalOptions="CenterAndExpand"
VerticalOptions="Center"/>
<!--<Label
Text="{ Binding Article.Subtitle }"
LineBreakMode="WordWrap"
TextColor="{ DynamicResource OverImageTextColor }"
FontSize="16"/>
<BoxView
Style="{StaticResource BrandNameOrnamentStyle}"
Margin="0,20,0,0"/>-->
</Grid>
</StackLayout>
<!--GRID CUERPO DEPUES DE LA IMAGEN -->
<Grid
Grid.Row="1"
BackgroundColor="{ DynamicResource BasePageColor }">
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="Auto" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<!--HEADER BACKGROUND-->
<BoxView
Grid.Row="0"
BackgroundColor="{ DynamicResource ArticleHeaderBackgroundColor }" />
<!--HEADER INFO-->
<StackLayout
Orientation="Horizontal"
Grid.Row="0"
Padding="20,0"
VerticalOptions="Center"
Spacing="10">
<!--DESCRIPCIÓN (ARTICULO)-->
<Label
Text="Articulo"
FontSize="14"
TextColor="{ DynamicResource BaseTextColor }"
HorizontalOptions="StartAndExpand"
VerticalTextAlignment="Center"/>
<!--DESCRIPCIÓN (FECHA)-->
<Label
Text="{ Binding Article.Date }"
FontSize="14"
TextColor="{ DynamicResource BaseTextColor }"
HorizontalOptions="End"/>
</StackLayout>
<!-- SEPARATOR (CAJA EN LA QUE SE INCLUYEN LAS DOS VARIABLES ANTERIORES (ARTICULO Y FECHA)) -->
<BoxView
Grid.Row="0"
VerticalOptions="End"
Style="{ StaticResource Horizontal1ptLineStyle}" />
<!-- TEXT (CUERPO DEL ARTICULO) -->
<Grid
Grid.Row="1"
Padding="20,20,20,0"
VerticalOptions="Center"
RowSpacing="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- MAIN PARAGRAPH -->
<!-- RESUMEN -->
<Label
Grid.Row="0"
Text="{ Binding Article.Excerpt }"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"
FontAttributes="Bold"/>
<!-- BODY-->
<Label
Grid.Row="2"
Text="{ Binding Article.Body }"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
</Grid>
</Grid>
<!-- POSTED -->
<StackLayout
Grid.Row="2"
Orientation="Horizontal"
VerticalOptions="Fill"
HorizontalOptions="Center">
<Label
Text="Publicado por : "
TextColor="{ DynamicResource AccentColor }"
VerticalTextAlignment="Center"
HorizontalOptions="End"/>
<Image
Source="inutralia.png"
HorizontalOptions="End"/>
</StackLayout>
</Grid>
</ScrollView>
</ContentPage>
using inutralia.ViewModels;
using System;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ArticleViewPage : ContentPage
{
public ArticleViewPage()
{
InitializeComponent();
}
public ArticleViewPage (ArticleDetailViewModel viewModel)
{
InitializeComponent ();
BindingContext = viewModel;
}
protected override void OnAppearing (){
base.OnAppearing ();
outerScrollView.Scrolled += OnScroll;
}
protected override void OnDisappearing ()
{
base.OnDisappearing ();
outerScrollView.Scrolled -= OnScroll;
}
public void OnScroll (object sender, ScrolledEventArgs e) {
var imageHeight = img.Height * 2;
var scrollRegion = layeringGrid.Height - outerScrollView.Height;
var parallexRegion = imageHeight - outerScrollView.Height;
var factor = outerScrollView.ScrollY - parallexRegion * (outerScrollView.ScrollY / scrollRegion);
if (factor < 0)
{
factor = 0;
}
else
{
if (img.TranslationY > img.Height)
{
factor = img.Height;
}
else if( img.TranslationY > outerScrollView.ScrollY ){
img.TranslationY = outerScrollView.ScrollY;
}
}
img.TranslationY = factor;
img.Opacity = 1 - ( factor / imageHeight ) ;
//headers.Scale = 1 - ( (factor ) / (imageHeight * 2) ) ;
}
public void OnMore (object sender, EventArgs e) {
var mi = ((MenuItem)sender);
DisplayAlert("More Context Action", mi.CommandParameter + " more context action", "OK");
}
public void OnDelete (object sender, EventArgs e) {
var mi = ((MenuItem)sender);
DisplayAlert("Delete Context Action", mi.CommandParameter + " delete context action", "OK");
}
public void OnPrimaryActionButtonClicked (object sender, EventArgs e){
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
x:Class="inutralia.Views.ArticleItemTemplate"
x:Name="ArticleItemTemplate"
BackgroundColor="White">
<!--<ContentPage.Resources>
<ResourceDictionary>
<local:ImageTransformator x:Key="cnvImg"></local:ImageTransformator>
</ResourceDictionary>
</ContentPage.Resources>-->
<Grid BackgroundColor="Black">
<ffimageloading:CachedImage
FadeAnimationEnabled="true"
Source="{ Binding Photo }"
Aspect="AspectFill"
Opacity="0.5"/>
<Grid
ColumnSpacing="0"
RowSpacing="6"
Padding="20">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="10" />
</Grid.RowDefinitions>
<!--PARTE SUPERIOR-->
<StackLayout
Grid.Row="0"
VerticalOptions="End"
HorizontalOptions="Start"
>
<StackLayout
Grid.Row="1"
Orientation="Horizontal"
HorizontalOptions="Fill"
VerticalOptions="FillAndExpand"
Padding="5"
>
<!--TITULO-->
<Label
FontSize="Large"
FontAttributes="Bold"
Text="{Binding Title}"
LineBreakMode="WordWrap"
TextColor="{ DynamicResource InverseTextColor }"/>
</StackLayout>
</StackLayout>
<!--PARTE INFERIOR-->
<StackLayout
Grid.Row="1"
Orientation="Horizontal"
HorizontalOptions="Fill"
VerticalOptions="FillAndExpand">
<!--RESUMEN -->
<Label
Text="{ Binding ExcerptCompress }"
TextColor="{ DynamicResource InverseTextColor }"
HorizontalOptions="FillAndExpand"
VerticalOptions="End"
FontSize="Small"/>
<!--FECHA-->
<Label
Text="{Binding Date}"
TextColor="{ DynamicResource InverseTextColor }"
VerticalOptions="End"
HorizontalOptions="End"
FontSize="Micro"/>
</StackLayout>
<BoxView
Grid.Row="2"
Style="{StaticResource BrandNameOrnamentStyle}"/>
</Grid>
</Grid>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ArticleItemTemplate : ContentView
{
public ArticleItemTemplate ()
{
InitializeComponent ();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:converter="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared.Base"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
x:Class="inutralia.Views.Badge"
x:Name="Root">
<ContentView.Resources>
<ResourceDictionary>
<converter:IsNotStringEmptyConverter
x:Key="isBadgeVisibleConverter" />
</ResourceDictionary>
</ContentView.Resources>
<ContentView.Content>
<AbsoluteLayout
IsVisible="{Binding Source={x:Reference Root}, Path=BadgeText, Converter={StaticResource isBadgeVisibleConverter}}">
<Label
FontSize="28"
Text="{ x:Static local:GrialShapesFont.Circle }"
TextColor="{Binding Source={x:Reference Root}, Path=BadgeBackgroundColor}"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
AbsoluteLayout.LayoutBounds="0,0,28,28"
/>
<Label
Text="{Binding Source={x:Reference Root}, Path=BadgeText}"
TextColor="{Binding Source={x:Reference Root}, Path=BadgeTextColor}"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
FontSize="12"
FontAttributes="Bold"
AbsoluteLayout.LayoutBounds="0,0,28,28"
/>
</AbsoluteLayout>
</ContentView.Content>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class Badge : ContentView
{
public Badge ()
{
InitializeComponent ();
}
/* CIRCLE */
public static BindableProperty BadgeBackgroundColorProperty =
BindableProperty.Create (
nameof ( BadgeBackgroundColor ),
typeof ( Color ),
typeof ( Badge ),
defaultValue : Color.Default,
defaultBindingMode : BindingMode.OneWay
);
public Color BadgeBackgroundColor {
get { return ( Color )GetValue( BadgeBackgroundColorProperty ); }
set { SetValue ( BadgeBackgroundColorProperty, value ); }
}
/* ICON */
public static BindableProperty BadgeTextColorProperty =
BindableProperty.Create (
nameof( BadgeTextColor ),
typeof ( Color ),
typeof ( Badge ),
defaultValue : Color.White,
defaultBindingMode : BindingMode.OneWay
);
public Color BadgeTextColor {
get { return ( Color )GetValue( BadgeTextColorProperty ); }
set { SetValue ( BadgeTextColorProperty, value ); }
}
public static BindableProperty BadgeTextProperty =
BindableProperty.Create (
nameof( BadgeText ),
typeof ( string ),
typeof ( Badge ),
defaultValue : "",
defaultBindingMode : BindingMode.OneWay
);
public string BadgeText {
get { return ( string ) GetValue( BadgeTextProperty ); }
set { SetValue ( BadgeTextProperty, value ); }
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.BrandBlock"
Padding="20">
<Grid
ColumnSpacing="10"
Padding="0"
Style="{ StaticResource BrandContainerStyle }">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
HeightRequest="64"
WidthRequest="64"
Source="{ StaticResource BrandImage }"
BackgroundColor="{ DynamicResource AccentColor }"
/>
<StackLayout
Grid.Column="1"
Orientation="Vertical"
HorizontalOptions="Start"
VerticalOptions="Center"
Spacing="0">
<Label
Style="{ DynamicResource BrandNameStyle }"
Text="GRIAL"
FontAttributes="Bold"
VerticalTextAlignment="Start"/>
<Label
Style="{ DynamicResource BrandNameStyle }"
Text="UI.KIT"
VerticalTextAlignment="Start"/>
</StackLayout>
</Grid>
</ContentView>
using Xamarin.Forms;
namespace inutralia
{
public partial class BrandBlock : ContentView
{
public BrandBlock ()
{
InitializeComponent ();
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
x:Class="inutralia.CircleIcon">
<Grid>
<Label
Text="{ x:Static local:GrialShapesFont.Circle }"
IsVisible="{ Binding ShowBackgroundColor }"
Style="{ StaticResource FontIconBase }"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
Opacity="1"
FontSize="60"
TextColor="{ DynamicResource OkColor }"
/>
<Label
Text="{ x:Static local:GrialShapesFont.ShoppingCart }"
FontSize="25"
Style="{ StaticResource FontIcon }"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
TextColor="{ DynamicResource InverseTextColor }"
/>
</Grid>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class CircleIcon : ContentView
{
public CircleIcon ()
{
InitializeComponent ();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
x:Class="inutralia.CustomActivityIndicator"
>
<ContentView.Content>
<Grid
x:Name="Wrapper">
<BoxView
HeightRequest="64"
WidthRequest="64"
BackgroundColor="{DynamicResource AccentColor}" />
<Label
Text="{ x:Static local:GrialShapesFont.LogoGrial }"
Style="{ DynamicResource FontIconBase }"
TextColor="White"
FontSize="45"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"/>
</Grid>
</ContentView.Content>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class CustomActivityIndicator : ContentView
{
public CustomActivityIndicator()
{
InitializeComponent();
spinY(Wrapper, 1000);
}
static void spinY(View child, uint duration)
{
var animation = new Animation(
callback: d => child.RotationY = d,
start: 0,
end: 360,
easing: Easing.Linear);
animation.Commit(child, "Loop", length: duration, repeat:()=>true);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Rating">
<ContentView.Content>
<Label
x:Name="RatingLabel"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Start"
Text="{ Binding Value }"
TextColor="#ffb300"
Style="{ StaticResource FontIconBase }"
FontSize="{ artina:OnOrientationDouble
PortraitPhone=24,
LandscapePhone=24,
PortraitTablet=34,
LandscapeTablet=34 }"/>
</ContentView.Content>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class Rating : ContentView
{
private string RATING_EMPTY_ICON_CHAR = GrialShapesFont.StarBorder;
private string RATING_PARTIAL_ICON_CHAR = GrialShapesFont.StarHalf;
private string RATING_FULL_ICON_CHAR = GrialShapesFont.Star;
public Rating()
{
InitializeComponent();
}
public static BindableProperty ValueProperty =
BindableProperty.Create(
nameof(Value),
typeof(double),
typeof(Rating),
0.0,
defaultBindingMode: BindingMode.OneWay,
propertyChanged: (bindable, oldValue, newValue) =>
{
var ctrl = (Rating)bindable;
ctrl.RatingLabel.Text = ctrl.Update();
}
);
public double Value
{
get { return (double)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static BindableProperty MaxProperty =
BindableProperty.Create(
nameof(Max),
typeof(double),
typeof(Rating),
5.0,
defaultBindingMode: BindingMode.OneWay,
propertyChanged: (bindable, oldValue, newValue) =>
{
var ctrl = (Rating)bindable;
ctrl.RatingLabel.Text = ctrl.Update();
}
);
public double Max
{
get { return (double)GetValue(MaxProperty); }
set { SetValue(MaxProperty, value); }
}
public string Update()
{
var str = string.Empty;
var value = Value;
if (Value > Max)
{
value = Max;
}
else if (Value < 0)
{
value = 0;
}
for (var i = 1; i <= Max; i++)
{
if (i < value || Math.Abs((double)i - value) < 0.01) // i <= value
{
str += RATING_FULL_ICON_CHAR;
}
else {
if (i - value > 1.0)
{
str += RATING_EMPTY_ICON_CHAR;
}
else {
var decimals = value - Math.Floor(value);
if (decimals < 0.2)
{
str += RATING_EMPTY_ICON_CHAR;
}
else if (decimals > 0.8)
{
str += RATING_FULL_ICON_CHAR;
}
else {
str += RATING_PARTIAL_ICON_CHAR;
}
}
}
}
return str;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Name="Root"
xmlns:effects="clr-namespace:UXDivers.Effects;assembly=UXDivers.Effects"
x:Class="inutralia.RoundedLabel"
Padding="0">
<ContentView.Content>
<AbsoluteLayout
effects:Effects.CornerRadius="{ Binding Source={ x:Reference Root }, Path=RoundedLabelCornerRadius }"
BackgroundColor="{ Binding Source={ x:Reference Root }, Path=RoundedLabelBackgroundColor }"
>
<Label
VerticalOptions="Center"
LineBreakMode="TailTruncation"
Margin="{ Binding Source={ x:Reference Root }, Path=RoundedLabelPadding }"
FontSize="{ Binding Source={ x:Reference Root }, Path=RoundedLabelFontSize }"
Text="{ Binding Source={ x:Reference Root }, Path=RoundedLabelText }"
TextColor="{ Binding Source={ x:Reference Root }, Path=RoundedLabelTextColor }"
AbsoluteLayout.LayoutBounds="0, 0.5, AutoSize, AutoSize"
AbsoluteLayout.LayoutFlags="XProportional, YProportional" />
</AbsoluteLayout>
</ContentView.Content>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class RoundedLabel : ContentView
{
public RoundedLabel()
{
InitializeComponent();
}
public static BindableProperty RoundedLabelBackgroundColorProperty =
BindableProperty.Create (
nameof ( RoundedLabelBackgroundColor ),
typeof ( Color ),
typeof ( RoundedLabel ),
defaultValue : Color.Green,
defaultBindingMode : BindingMode.OneWay
);
public Color RoundedLabelBackgroundColor {
get { return ( Color )GetValue( RoundedLabelBackgroundColorProperty ); }
set { SetValue ( RoundedLabelBackgroundColorProperty, value ); }
}
public static BindableProperty RoundedLabelTextColorProperty =
BindableProperty.Create (
nameof( RoundedLabelTextColor ),
typeof ( Color ),
typeof ( RoundedLabel ),
defaultValue : Color.White,
defaultBindingMode : BindingMode.OneWay
);
public Color RoundedLabelTextColor {
get { return ( Color )GetValue( RoundedLabelTextColorProperty ); }
set { SetValue ( RoundedLabelTextColorProperty, value ); }
}
public static BindableProperty RoundedLabelTextProperty =
BindableProperty.Create (
nameof( RoundedLabelText ),
typeof ( string ),
typeof ( RoundedLabel ),
defaultValue : "",
defaultBindingMode : BindingMode.OneWay
);
public string RoundedLabelText {
get { return (string) GetValue( RoundedLabelTextProperty ); }
set { SetValue ( RoundedLabelTextProperty, value ); }
}
public static BindableProperty RoundedLabelPaddingProperty =
BindableProperty.Create (
nameof ( RoundedLabelPadding ),
typeof ( Thickness ),
typeof ( RoundedLabel ),
defaultValue : new Thickness(6,0),
defaultBindingMode : BindingMode.OneWay
);
public Thickness RoundedLabelPadding {
get { return ( Thickness )GetValue( RoundedLabelPaddingProperty ); }
set { SetValue ( RoundedLabelPaddingProperty, value ); }
}
public static BindableProperty RoundedLabelCornerRadiusProperty =
BindableProperty.Create (
nameof ( RoundedLabelCornerRadius ),
typeof ( Double ),
typeof ( RoundedLabel ),
defaultValue : 6.0,
defaultBindingMode : BindingMode.OneWay
);
public Double RoundedLabelCornerRadius {
get { return ( Double )GetValue( RoundedLabelCornerRadiusProperty ); }
set { SetValue ( RoundedLabelCornerRadiusProperty, value ); }
}
public static BindableProperty RoundedLabelFontSizeProperty =
BindableProperty.Create (
nameof ( RoundedLabelFontSize ),
typeof ( Double ),
typeof ( RoundedLabel ),
defaultValue : 10.0,
defaultBindingMode : BindingMode.OneWay
);
public Double RoundedLabelFontSize {
get { return ( Double )GetValue( RoundedLabelFontSizeProperty ); }
set { SetValue ( RoundedLabelFontSizeProperty, value ); }
}
public static BindableProperty RoundedLabelFontAttributesProperty =
BindableProperty.Create (
nameof ( RoundedLabelFontAttributes ),
typeof ( Enum ),
typeof ( RoundedLabel ),
defaultValue : null,
defaultBindingMode : BindingMode.OneWay
);
public Enum RoundedLabelFontAttributes {
get { return ( Enum )GetValue( RoundedLabelFontAttributesProperty ); }
set { SetValue ( RoundedLabelFontAttributesProperty, value ); }
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.HomeView"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
NavigationPage.HasNavigationBar="false"
Padding ="0,40,0,10">
<StackLayout>
<!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*LOGO-*-*-*-*-*-*-*-*-*-*-*-* -->
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Image Source="logo_empresa.png" Aspect="AspectFit" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" >
<Image.WidthRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="210"
Android="200"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="380"
Android="400"/>
</OnIdiom.Tablet>
</OnIdiom>
</Image.WidthRequest>
</Image>
</StackLayout>
<!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*MENÚ CUADRADOS-*-*-*-*-*-*-*-*-*-*-*-* -->
<Grid HorizontalOptions="Center" VerticalOptions="FillAndExpand" Padding="15,20,15,10" ColumnSpacing="10" RowSpacing="10">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="img1.png" Grid.Row="0" Grid.Column="0" HorizontalOptions="CenterAndExpand" >
<Image.WidthRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="200"
Android="200"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="350"
Android="350"/>
</OnIdiom.Tablet>
</OnIdiom>
</Image.WidthRequest>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureProfile"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<Image Source="img2.png" Grid.Row="0" Grid.Column="1" HorizontalOptions="CenterAndExpand" >
<Image.WidthRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="200"
Android="200"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="350"
Android="350"/>
</OnIdiom.Tablet>
</OnIdiom>
</Image.WidthRequest>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureMenu"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<Image Source="img3.png" Grid.Row="1" Grid.Column="0" HorizontalOptions="CenterAndExpand" >
<Image.WidthRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="200"
Android="200"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="380"
Android="350"/>
</OnIdiom.Tablet>
</OnIdiom>
</Image.WidthRequest>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureGeneric"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<Image Source="img4.png" Grid.Row="1" Grid.Column="1" HorizontalOptions="CenterAndExpand">
<Image.WidthRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="200"
Android="200"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="380"
Android="350"/>
</OnIdiom.Tablet>
</OnIdiom>
</Image.WidthRequest>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureTrivial"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
</Grid>
<!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*MENÚ LISTADO-*-*-*-*-*-*-*-*-*-*-*-* -->
<Grid Padding="15,0,10,20" VerticalOptions="End">
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="40"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="1" />
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="40"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="1" />
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="40"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="1" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition>
<ColumnDefinition.Width>
<OnIdiom x:TypeArguments="GridLength"
Phone="45"
Tablet="90"/>
</ColumnDefinition.Width>
</ColumnDefinition>
<!-- <ColumnDefinition Width="45" />-->
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Width>
<OnIdiom x:TypeArguments="GridLength"
Phone="45"
Tablet="90"/>
</ColumnDefinition.Width>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 0. item list recetario-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->
<!--label clickable que englobal las 3 columnas del item del menú-->
<Label HorizontalOptions="Fill" VerticalOptions="Fill" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecipe"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon recetario-->
<Label Text="{ x:Static local:IoniciconsFont.IosBookmarksOutline}" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="0" Grid.Column="0" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecipe"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--text recetario-->
<Label Text="Recetario" Grid.Row="0" Grid.Column="1" YAlign="Center" FontSize="15" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecipe"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon ir-->
<Label Text="{ x:Static local:IoniciconsFont.IosArrowRight }" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="0" Grid.Column="2" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureRecipe"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 1. separator-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->
<BoxView Grid.Row="1" HeightRequest="1" Grid.ColumnSpan="3" BackgroundColor="{ DynamicResource ListViewSeparatorColor }" HorizontalOptions="FillAndExpand" />
<!---*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-2. item list boletín saludable-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->
<!--label clickable que englobal las 3 columnas del item del menú-->
<Label HorizontalOptions="Fill" VerticalOptions="Fill" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureArticle"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon boletin saludable-->
<Label Text="{ x:Static local:IoniciconsFont.AndroidFavoriteOutline}" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="2" Grid.Column="0" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureArticle"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--text boletin saludable-->
<Label Text="Boletín Saludable" Grid.Row="2" Grid.Column="1" YAlign="Center" FontSize="15" TextColor="{ DynamicResource ListViewItemTextColor }" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureArticle"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon ir-->
<Label Text="{ x:Static local:IoniciconsFont.IosArrowRight }" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="2" Grid.Column="2" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureArticle"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!---*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-3. separator-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -->
<BoxView Grid.Row="3" Grid.ColumnSpan="3" HeightRequest="1" BackgroundColor="{ DynamicResource ListViewSeparatorColor }" HorizontalOptions="FillAndExpand" />
<!---*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-4. item list lista de la compra-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-* -->
<!--label clickable que englobal las 3 columnas del item del menú-->
<Label HorizontalOptions="Fill" VerticalOptions="Fill" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" >
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureShoppingList"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon lista compra-->
<Label Text="{ x:Static local:IoniciconsFont.IosCartOutline }" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="4" Grid.Column="0" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureShoppingList"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--text boletin saludable-->
<Label Text="Lista de la Compra" Grid.Row="4" Grid.Column="1" YAlign="Center" FontSize="15" TextColor="{ DynamicResource ListViewItemTextColor }" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureShoppingList"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!--icon ir-->
<Label Text="{ x:Static local:IoniciconsFont.IosArrowRight }" FontSize="30" Style="{StaticResource FontIcon}" Grid.Row="4" Grid.Column="2" XAlign="Center" YAlign="Center" TextColor="{ DynamicResource ListViewItemTextColor }">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnTapGestureShoppingList"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!---*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-5. item separator-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-* -->
<BoxView Grid.Row="5" HeightRequest="1" Grid.ColumnSpan="3" BackgroundColor="{ DynamicResource ListViewSeparatorColor }" HorizontalOptions="FillAndExpand" />
</Grid>
</StackLayout>
</ContentPage>
using inutralia.Views;
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class HomeView : ContentPage
{
protected RootPage RootPage => Application.Current.MainPage as RootPage;
public HomeView()
{
InitializeComponent();
}
void OnTapGestureProfile(object sender, EventArgs args)
{
RootPage?.Navigate<ProfileView> ();
}
void OnTapGestureMenu (object sender, EventArgs args)
{
RootPage?.Navigate<CustomMenuView> ();
}
void OnTapGestureGeneric (object sender, EventArgs args)
{
RootPage?.Navigate<GenericListView> ();
}
void OnTapGestureTrivial (object sender, EventArgs args)
{
RootPage?.Navigate<TrivialListView> ();
}
void OnTapGestureArticle (object sender, EventArgs args)
{
RootPage?.Navigate<ArticleListView> ();
}
void OnTapGestureShoppingList(object sender, EventArgs args)
{
RootPage?.Navigate<ShoppingListView> ();
}
void OnTapGestureRecipe(object sender, EventArgs args)
{
RootPage?.Navigate<RecipeListView> ();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.LoginView"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
Title="Acceso a la Aplicación ..."
NavigationPage.HasNavigationBar="False"
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Content>
<AbsoluteLayout>
<!-- GRADIENT-->
<Image
AbsoluteLayout.LayoutBounds="0,0,1,44"
AbsoluteLayout.LayoutFlags="WidthProportional"
Style="{ StaticResource StatusBarShimStyle }"
VerticalOptions="Start"/>
<ScrollView
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
VerticalOptions="FillAndExpand"
Padding="{ DynamicResource MainWrapperPadding }">
<!-- MAIN CONTAINER -->
<Grid
ColumnSpacing="0"
RowSpacing="0"
Padding="20,30,20,10"
HorizontalOptions="Fill"
VerticalOptions="FillAndExpand" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- HEADER -->
<StackLayout
Grid.Row="0"
Spacing="5"
Padding="0,20,0,0"
InputTransparent="true">
<!-- LOGO -->
<Grid
Grid.Row="1"
WidthRequest="150"
VerticalOptions="Center"
HorizontalOptions="Center">
<Image Source="logo_empresa.png" WidthRequest="150"></Image>
</Grid>
<!-- WELCOME TEXT -->
<Label
Text="{ StaticResource LoginWelcomeText }"
FontSize="{ artina:OnOrientationDouble
PortraitPhone=22,
LandscapePhone=22,
PortraitTablet=28,
LandscapeTablet=28 }"
HorizontalTextAlignment="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Text="Por favor, ingrese usuario y password"
HorizontalTextAlignment="Center"
FontSize="{ artina:OnOrientationDouble
PortraitPhone=15,
LandscapePhone=15,
PortraitTablet=18,
LandscapeTablet=18 }"/>
<!--SEPARATOR-->
<BoxView
WidthRequest="80"
HeightRequest="1"
HorizontalOptions="Center"
VerticalOptions="End"
BackgroundColor="{DynamicResource BaseTextColor}"/>
</StackLayout>
<!---FIELDS CONTAINER-->
<Grid
Grid.Row="1"
RowSpacing="30"
Padding="0,20,0,20"
VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- ICON BACKGROUND -->
<Label
Grid.Column="0"
Grid.Row="0"
FontSize="40"
Style="{StaticResource RoundShape}"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- ICON -->
<Label
Grid.Column="0"
Grid.Row="0"
FontSize="14"
Text="{ x:Static local:GrialShapesFont.Email }"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!--EMAIL FIELD-->
<Entry
Grid.Column="1"
Grid.Row="0"
HeightRequest="40"
x:Name = "userEntry"
Placeholder="Usuario"
BackgroundColor="{ DynamicResource PlaceholderColorEntry }"
PlaceholderColor="{ DynamicResource BaseTextColor }"/>
<!-- ICON BACKGROUND -->
<Label
Grid.Column="0"
Grid.Row="1"
FontSize="40"
Style="{StaticResource RoundShape}"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- ICON -->
<Label
Grid.Column="0"
Grid.Row="1"
FontSize="14"
Text="{ x:Static local:GrialShapesFont.Lock }"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- PASSWORD ENTRY -->
<Entry
Grid.Column="1"
Grid.Row="1"
HeightRequest="40"
x:Name = "passwordEntry"
Placeholder="Contraseña"
IsPassword="True"
BackgroundColor="{ DynamicResource PlaceholderColorEntry }"
PlaceholderColor="{ DynamicResource BaseTextColor }"/>
</Grid>
<!-- BUTTONS -->
<StackLayout
Grid.Row="2"
Spacing="10"
Padding="0,10,0,0"
HorizontalOptions="FillAndExpand"
VerticalOptions="End" >
<!-- LOGIN -->
<artina:Button x:Name="loginButton"
Clicked="OnLoginButtonClicked"
Style="{DynamicResource PrimaryActionButtonStyle}"
VerticalOptions="End"
Text="Login"
WidthRequest="{ artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>
<!--<Label
Text="Si todavía no se ha registrado ..."
FontSize="13"
HorizontalTextAlignment="Center"/>
--><!-- FACEBOOK --><!--
<artina:Button
Style="{ DynamicResource PrimaryActionButtonStyle }"
BackgroundColor="#3b5998"
VerticalOptions="End"
x:Name="registerButton"
Text = "Registrar"
Clicked="OnRegisterButtonClicked"
WidthRequest="{ artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>-->
<!--SEPARATOR-->
<BoxView
Grid.Row="4"
HeightRequest="1"
VerticalOptions="Start"
HorizontalOptions="Center"
WidthRequest="300"
BackgroundColor="{DynamicResource BaseTextColor}"/>
<!--
<Label
Grid.Row="4"
HorizontalOptions="Center"
VerticalOptions="Center"
FontSize="14"
x:Name="rememberButton"
Text = "Recordar Contraseña"
Clicked="OnRememberButtonClicked"/>
-->
</StackLayout>
</Grid>
</ScrollView>
</AbsoluteLayout>
</ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using inutralia.Models;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class LoginView : ContentPage
{
private bool processing
{
set
{
loginButton.IsEnabled = !value;
}
}
public LoginView()
{
InitializeComponent();
if (Application.Current.Properties.ContainsKey("Username")) userEntry.Text = Application.Current.Properties["Username"].ToString();
if (Application.Current.Properties.ContainsKey("Password")) passwordEntry.Text = Application.Current.Properties["Password"].ToString();
}
async void OnLoginButtonClicked(object sender, EventArgs e)
{
processing = true;
Application.Current.Properties["Username"] = userEntry.Text;
Application.Current.Properties["Password"] = passwordEntry.Text;
var Username = userEntry.Text;
var Password = passwordEntry.Text;
//passwordEntry.Text = string.Empty;
App.API.CredentialsSet(Username, Password);
try
{
var users = await App.API.RefreshListAsync<User>();
if (users.Count > 0)
{
App.IsUserLoggedIn = true;
Page nextView = new RootPage() as Page;
// Cambiar de vista
Application.Current.MainPage = nextView;
}
else
{
throw new Exception();
}
}
catch (Exception err)
{
await DisplayAlert("Error", "El usuario o la contraseña no son correctos", "Entendido");
}
processing = false;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
}
//async void OnRegisterButtonClicked(object sender, EventArgs e)
//{
// Page nextView = new RegisterView() as Page;
// // Cambiar de vista
// await Navigation.PushModalAsync (nextView);
//}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.MenuView"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
Icon="hamburguer_icon.png"
Padding="0,40,0,0"
Title="Inutralia">
<ContentPage.Content>
<StackLayout VerticalOptions="FillAndExpand" BackgroundColor="{DynamicResource CorporativeColor}">
<Image Source="logo_empresa.png" WidthRequest="100" HorizontalOptions="Center"/>
<StackLayout>
<Label />
<BoxView HeightRequest="1" BackgroundColor="Black" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout VerticalOptions="FillAndExpand" BackgroundColor="{DynamicResource CorporativeColor}">
<StackLayout x:Name="btnHome" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.IosHomeOutline }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }"/>
<Label FontSize="Medium" Text="Inicio" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="{ DynamicResource ListViewItemTextColor }" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout x:Name="btnMyProfile" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.IosContactOutline }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Mi Perfil" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout x:Name="btnMyMenu" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.Clipboard }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Mi Menú" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout x:Name="btnShoppingList" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.IosCartOutline }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Lista de la Compra" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="{ DynamicResource ListViewItemTextColor }" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout x:Name="btnGenericMenus" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.IosPaperOutline }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Menús Saludables" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="{ DynamicResource ListViewItemTextColor }" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout x:Name="btnRecipeBook" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.IosBookmarksOutline }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Recetario" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="{ DynamicResource ListViewItemTextColor }" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout x:Name="btnLoginOut" Orientation="Horizontal" Padding="10,0,0,0" Spacing="25" >
<Label Text="{ x:Static local:IoniciconsFont.LogOut }" FontSize="40" Style="{StaticResource FontIcon}" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{ DynamicResource ListViewItemTextColor }" />
<Label FontSize="Medium" Text="Salir" TextColor="{ DynamicResource ListViewItemTextColor }" VerticalTextAlignment="Center" />
</StackLayout>
<!--<ButtonText="Inicio" Clicked="onBtnHomeClicked"/>-->
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
using inutralia.Views;
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class MenuView : ContentPage
{
public MenuView()
{
InitializeComponent();
btnHome.GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnHomeClicked())
});
btnLoginOut .GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onLoginOutClicked())
});;
btnMyMenu .GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnMyMenuClicked())
});;
btnMyProfile .GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnMyProfileClicked())
});;
btnRecipeBook .GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnRecipeBookClicked())
});;
btnShoppingList.GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnShoppingListClicked())
}); ;
btnGenericMenus.GestureRecognizers.Add(new TapGestureRecognizer
{
Command = new Command(() => onBtnGenericMenusClicked())
}); ;
}
void onBtnHomeClicked()
{
//await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PopToRootAsync();
(App.Current.MainPage as RootPage).Navigate<HomeView>();
}
void onBtnMyMenuClicked()
{
(App.Current.MainPage as RootPage).Navigate<CustomMenuView>();
}
void onBtnMyProfileClicked()
{
(App.Current.MainPage as RootPage).Navigate<ProfileView>();
}
void onBtnRecipeBookClicked()
{
(App.Current.MainPage as RootPage).Navigate<RecipeListView>();
}
void onBtnGenericMenusClicked()
{
(App.Current.MainPage as RootPage).Navigate<GenericListView>();
}
void onBtnShoppingListClicked()
{
(App.Current.MainPage as RootPage).Navigate<ShoppingListView>();
}
void onLoginOutClicked()
{
App.IsUserLoggedIn = false;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia.Views;assembly=inutralia"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
x:Class="inutralia.Views.RootPage">
<MasterDetailPage.Master>
<local:MenuView x:Name="MenuView" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<x:Arguments>
<views:HomeView />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RootPage : MasterDetailPage
{
public RootPage()
{
InitializeComponent();
}
public void Navigate<T>() where T:ContentPage
{
NavigationPage p = Detail as NavigationPage;
if(p?.Navigation?.NavigationStack?[0]?.GetType() != typeof(T) )
Detail = new NavigationPage(Activator.CreateInstance(typeof(T)) as Page);
IsPresented = false;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.WelcomeStarterPage"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
Title="Welcome Starter"
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Content>
<!-- MAIN WRAPPER -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid
Grid.Row="0"
VerticalOptions="Center"
HorizontalOptions="Center">
<Grid.RowDefinitions>
<RowDefinition Height="60*"/>
<RowDefinition Height="40*"/>
</Grid.RowDefinitions>
<!--ICON BACKGROUND-->
<Label
Grid.Row="0"
Style="{StaticResource RoundShape}"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="250"
Opacity="0.1"/>
<!--ICON BACKGROUND-->
<Label
Grid.Row="0"
Style="{StaticResource RoundShape}"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="180"
Opacity="0.1"/>
<!--ICON-->
<Label
Grid.Row="0"
Text="{ x:Static local:GrialShapesFont.Whatshot }"
Style="{StaticResource FontIconBase}"
FontSize="100"
HorizontalTextAlignment="Center"
TextColor="{ DynamicResource ComplementColor }"
VerticalOptions="Center"
HorizontalOptions="Center"/>
<!--TEXT -->
<StackLayout
Grid.Row="1"
VerticalOptions="Center"
Padding="60,0"
Spacing="2">
<Label
HorizontalTextAlignment="Center"
Text="Welcome to Grial.Starter"
FontSize="24"
FontAttributes="Bold"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
HorizontalTextAlignment="Center"
Opacity="0.8"
Text="Welcome to Grial 2.0 Starter. You are all setup and ready to rock!"
FontSize="16"
TextColor="{ DynamicResource BaseTextColor }"/>
</StackLayout>
</Grid>
</Grid>
</ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia
{
public partial class WelcomeStarterPage : ContentPage
{
public WelcomeStarterPage()
{
InitializeComponent();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.ProfileView"
x:Name="profileView"
Title="Mi Perfil"
NavigationPage.BackButtonTitle="Mi perfil"
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="20,20,20,10"
Android="20,20,20,15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="20,0,20,25"
Android="20,40,20,15"/>
</OnIdiom.Tablet>
</OnIdiom>
</ContentPage.Padding>
<ScrollView>
<StackLayout IsVisible="{Binding isBusy}">
<StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<StackLayout Orientation="Horizontal">
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,0"
Android="10,0,10,0"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,30,10,5"
Android="10,30,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Edad " TextColor="{DynamicResource AccentColor}" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" VerticalTextAlignment="Center" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Entry VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" x:Name = "ageEntry" Text="{Binding Profile.Age}" Placeholder="Años">
<Entry.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Entry.FontSize>
</Entry>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,0"
Android="10,0,10,0"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,10,10,5"
Android="10,10,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Peso " TextColor="{DynamicResource AccentColor}" VerticalOptions="Center" HorizontalOptions="Start" HorizontalTextAlignment="Start" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Entry VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" x:Name = "weightEntry" Text="{Binding Profile.Weight}" Placeholder="Kg.">
<Entry.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Entry.FontSize>
</Entry>
</StackLayout>
<StackLayout Orientation="Horizontal">
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,0"
Android="10,0,10,0"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,10,10,5"
Android="10,10,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Altura " TextColor="{DynamicResource AccentColor}" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Entry VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" x:Name = "heightEntry" Text="{Binding Profile.Height}" Placeholder="cm.">
<Entry.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Entry.FontSize>
</Entry>
</StackLayout>
<StackLayout Orientation="Horizontal">
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,0"
Android="10,0,10,0"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,10,10,5"
Android="10,10,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Género " TextColor="{DynamicResource AccentColor}" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Picker x:Name="genderPicker" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" SelectedIndex="{Binding Gender}" >
<Picker.Items>
<x:String>Hombre</x:String>
<x:String>Mujer</x:String>
</Picker.Items>
<Picker.SelectedIndex>0</Picker.SelectedIndex>
</Picker>
</StackLayout>
<StackLayout Orientation="Horizontal">
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,0"
Android="10,0,10,0"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,10,10,5"
Android="10,10,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Ejercicio Fisico " TextColor="{DynamicResource AccentColor}" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Picker x:Name="fisExerPicker" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" SelectedIndex="{Binding Physical}" >
<Picker.Items>
<x:String>Sedentario</x:String>
<x:String>Ligero</x:String>
<x:String>Moderado</x:String>
<x:String>Intenso</x:String>
<x:String>Muy Intenso</x:String>
</Picker.Items>
<Picker.SelectedIndex>0</Picker.SelectedIndex>
</Picker>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,0,10,15"
Android="10,0,10,15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,10,10,5"
Android="10,10,10,5"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Label Text="Preferencias " TextColor="{DynamicResource AccentColor}" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<Picker x:Name="preferencePicker" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" SelectedIndex="{Binding Preference}">
<Picker.Items>
<x:String>Normal</x:String>
<x:String>Vegetariano</x:String>
<x:String>Vegano</x:String>
</Picker.Items>
<Picker.SelectedIndex>0</Picker.SelectedIndex>
</Picker>
</StackLayout>
</StackLayout>
<StackLayout >
<StackLayout.Padding>
<OnIdiom x:TypeArguments="Thickness">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="Thickness"
iOS="0,5,0,15"
Android="0,5,0,15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="Thickness"
iOS="10,20,10,20"
Android="10,20,10,20"/>
</OnIdiom.Tablet>
</OnIdiom>
</StackLayout.Padding>
<Grid Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="¿Padeces, estás o tienes ..." >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<StackLayout Grid.Row="1" Orientation="Horizontal" Padding="0,20,0,0">
<Switch IsToggled="{Binding Profile.Cv}" />
<Label Text=" ... una enfermedad cardiovascular ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="2" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Hypertension}"/>
<Label Text=" ... hipertensión ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="3" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Menopause}" />
<Label Text=" ... menopausia ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="4" Orientation="Horizontal">
<Switch IsToggled="{Binding Profile.Pregnancy}"/>
<Label Text=" ... embarazo ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="5" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Lactation}"/>
<Label Text=" ... lactancia ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="6" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Celiac}"/>
<Label Text=" ... celiaco ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="7" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Lactose}"/>
<Label Text=" ... intoleracia a la lactosa ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="8" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Diabetes}"/>
<Label Text=" ... diabetes ?" >
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="9" Orientation="Horizontal" >
<Switch IsToggled="{Binding Profile.Cholesterol}"/>
<Label Text=" ... colesterol ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="10" Orientation="Horizontal">
<Switch IsToggled="{Binding Profile.Triglycerides}"/>
<Label Text=" ... trigliceridos ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="11" Orientation="Horizontal">
<Switch IsToggled="{Binding Profile.Al_fish}"/>
<Label Text=" ... alergia al pescado/marisco ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="12" Orientation="Horizontal">
<Switch IsToggled="{Binding Profile.Al_egg}"/>
<Label Text=" ... alergia al huevo ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
<StackLayout Grid.Row="13" Orientation="Horizontal">
<Switch IsToggled="{Binding Profile.Al_nuts}"/>
<Label Text=" ... alergia a los frutos secos ?">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="15"
Android="15"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="20"
Android="25"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
</Grid>
</StackLayout>
<artina:Button x:Name="saveButton"
Clicked="OnSaveButtonClicked"
Style="{DynamicResource PrimaryActionButtonStyle}"
VerticalOptions="Center"
FontSize="{artina:OnOrientationDouble
PortraitPhone=18,
LandscapePhone=18,
PortraitTablet=30,
LandscapeTablet=30 }"
Text="GUARDAR PERFIL"
HeightRequest="{artina:OnOrientationDouble
LandscapePhone=20,
LandscapeTablet=40 }"
HorizontalOptions="FillAndExpand"/>
</StackLayout>
</ScrollView>
</ContentPage>
\ No newline at end of file
using System;
using System.Collections.Generic;
using inutralia.ViewModels;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ProfileView : ContentPage
{
protected ProfileViewModel ViewModel => BindingContext as ProfileViewModel;
public ProfileView()
{
InitializeComponent();
BindingContext = new ProfileViewModel();
}
protected override async void OnAppearing()
{
try
{
await ViewModel.RefreshData();
base.OnAppearing();
}
catch(Exception e)
{
}
}
async void OnSaveButtonClicked(object sender, EventArgs e)
{
try
{
await ViewModel.saveData();
await DisplayAlert("Exito", "La grabación se ha realizado correctamente.", "Entendido");
(App.Current.MainPage as RootPage).Navigate<HomeView>();
}
catch (Exception err)
{
await DisplayAlert("Error", "Se ha producido un error. Por favbor, intentelo más tarde", "Entendido");
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.RecipeDetailView"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
BackgroundColor="{ DynamicResource MainWrapperBackgroundColor }"
Title="{Binding Title}">
<StackLayout>
<ScrollView
x:Name="outerScrollView">
<Grid x:Name="layeringGrid" RowSpacing="0" VerticalOptions="FillAndExpand" >
<Grid.RowDefinitions>
<RowDefinition Height="240" />
<RowDefinition Height="*" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<!--GRID IMAGEN -->
<Grid Grid.Row="0"
Grid.RowSpan="2"
Padding="0"
BackgroundColor="Black">
<!-- MAIN IMAGE -->
<ffimageloading:CachedImage
x:Name="img"
Source="{ Binding Recipe.Image }"
Aspect="AspectFill"
BackgroundColor="Black"
HeightRequest="270"
WidthRequest="200"
HorizontalOptions="FillAndExpand"
VerticalOptions="Start"
Opacity=".8"/>
</Grid>
<!--GRID CUERPO DEPUES DE LA IMAGEN -->
<Grid Grid.Row="1" BackgroundColor="{ DynamicResource BasePageColor }">
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="Auto" />
<RowDefinition Height="80" />
</Grid.RowDefinitions>
<!--HEADER BACKGROUND-->
<BoxView Grid.Row="0" BackgroundColor="{ DynamicResource ArticleHeaderBackgroundColor }" />
<StackLayout Orientation="Horizontal" Grid.Row="0" Padding="20">
<!--HEADER INFO-->
<StackLayout Orientation="Horizontal" Grid.Row="0" HorizontalOptions="StartAndExpand">
<Label Text="{ x:Static local:IoniciconsFont.IosTimeOutline }" FontSize="Large" TextColor="{ DynamicResource BaseTextColor }" HorizontalOptions="Center" Style="{StaticResource FontIcon}"/>
<Label Text="{ Binding Recipe.Time , StringFormat='{0:N} min' }" FontSize="Small" TextColor="{ DynamicResource BaseTextColor }" HorizontalOptions="Center"/>
</StackLayout>
<StackLayout Orientation="Horizontal" Grid.Row="0" HorizontalOptions="EndAndExpand">
<!--DESCRIPCIÓN (FECHA)-->
<Label Text="{ x:Static local:IoniciconsFont.Fork }" FontSize="Large" TextColor="{ DynamicResource BaseTextColor }" HorizontalOptions="Center" Style="{StaticResource FontIcon}"/>
<Label Text="{ Binding Recipe.Difficulty, StringFormat='Dificultad : {0:N}'}" FontSize="Small" TextColor="{ DynamicResource BaseTextColor }" HorizontalOptions="Center"/>
</StackLayout>
</StackLayout>
<!-- SEPARATOR (CAJA EN LA QUE SE INCLUYEN LAS DOS VARIABLES ANTERIORES (ARTICULO Y FECHA)) -->
<BoxView Grid.Row="0" VerticalOptions="End" Style="{ StaticResource Horizontal1ptLineStyle}" />
<!--************************* MAIN PARAGRAPH *************************-->
<!-- TEXT (CUERPO DE LA RECETA) -->
<Grid Grid.Row="1" Padding="20,20,20,0" VerticalOptions="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!--++++++++++++++++++ RESUMEN ++++++++++++++++++++++-->
<Label Grid.Row="0" Text="{ Binding Recipe.ExcerptQuotes }" Margin="0,20" VerticalOptions="Fill" HorizontalOptions="Center" TextColor="{ DynamicResource BaseTextColor }" FontAttributes="Italic,Bold" x:Name="Excerpt"/>
<!--++++++++++++++++++ FIN RESUMEN ++++++++++++++++++++++-->
<!--++++++++++++++++++ INGREDIENTES ++++++++++++++++++++++-->
<!-- INGREDIENTE CABECERA -->
<StackLayout Orientation="Horizontal" BackgroundColor="#FF62b9ae" Grid.Row="1" Margin="0,5" Padding="10,5,10,5">
<Label HorizontalOptions="Start"
FontSize="50"
Text="{ x:Static local:IoniciconsFont.IosNutrition }"
Style="{StaticResource FontIcon}"
TextColor="#FFFFFFFF"/>
<Label Text=" Ingredientes (4 personas)" VerticalOptions="Center" TextColor="#FFFFFFFF"/>
</StackLayout>
<!--INGREDIENTE CUERPO-->
<ListView
SeparatorVisibility="None"
Grid.Row="2"
ItemsSource="{Binding Recipe.Ingredients}"
x:Name="listTable"
HasUnevenRows="False"
Footer=""
RowHeight="30"
ItemTapped="UnSelectedItem"
VerticalOptions="FillAndExpand">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal" HorizontalOptions="Fill">
<Label Text="{Binding Name , StringFormat='-{0:N}'}" />
<Label Text="{Binding Cuantity , StringFormat='({0:N})'}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<!--++++++++++++++++++FIN INGREDIENTES++++++++++++++++++++++-->
<Label/>
<Label/>
<!--++++++++++++++++++ PREPARACIÓN ++++++++++++++++++++++-->
<!--CABECERA-->
<StackLayout Orientation="Horizontal" BackgroundColor="#FF62b9ae" Grid.Row="3" Margin="0,5" Padding="10,5,10,5">
<Label HorizontalOptions="Start"
FontSize="50"
Text="{ x:Static local:IoniciconsFont.ErlenmeyerFlaskBubbles }"
Style="{StaticResource FontIcon}"
TextColor="#FFFFFFFF"/>
<Label Text="Preparación" VerticalOptions="Center" TextColor="#FFFFFFFF"/>
</StackLayout>
<!-- CUERPO -->
<Label
Grid.Row="4"
Text="{ Binding Recipe.Description }"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!--++++++++++++++++++ FIN PREPARACIÓN ++++++++++++++++++++++-->
<!--++++++++++++++++++ TABLA INFORMACIÓN NUTRICIONAL ++++++++++++++++++++++-->
<!-- CABECERA -->
<StackLayout Orientation="Horizontal" BackgroundColor="#FF62b9ae" Grid.Row="5" Margin="0,5" Padding="10,5,10,5">
<Label
HorizontalOptions="Start"
FontSize="50"
Text="{ x:Static local:IoniciconsFont.IosInformation }"
Style="{StaticResource FontIcon}"
TextColor="#FFFFFFFF"/>
<Label
Text="Información nutricional por ración"
VerticalOptions="Center"
TextColor="#FFFFFFFF"/>
</StackLayout>
<!-- TABLA -->
<!-- INFORMATION CUERPO-->
<Grid
HorizontalOptions="StartAndExpand"
Grid.Row="6">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- COLUMN 1 (ENERGÍA)-->
<Label
Grid.Column="0"
Grid.Row="0"
Text="Energía"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Margin="30,0"
Grid.Row="0"
Text="{Binding Recipe.Energy}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!-- COLUMN 2 (PROTEINAS)-->
<Label
Grid.Column="0"
Grid.Row="1"
Text="Proteinas"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Margin="30,0"
Grid.Row="1"
Text="{Binding Recipe.Protein}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!-- COLUMN 3 (HIDRATOS DE CARBONO)-->
<Label
Grid.Column="0"
Grid.Row="2"
Text="Hidratos de Carbono"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Grid.Row="2"
Margin="30,0"
Text="{Binding Recipe.Carbohydrates}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!-- COLUMN 4 (LÍQUIDOS)-->
<Label
Grid.Column="0"
Grid.Row="3"
Text="Líquidos"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Grid.Row="3"
Margin="30,0"
Text="{Binding Recipe.Lipids}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!-- COLUMN 5 (FIBRA)-->
<Label
Grid.Column="0"
Grid.Row="4"
Text="Fibra"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Grid.Row="4"
Margin="30,0"
Text="{Binding Recipe.Fiber}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<!-- COLUMN 6 (COLESTEROL)-->
<Label
Grid.Column="0"
Grid.Row="5"
Text="Colesterol"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
<Label
Grid.Column="1"
Grid.Row="5"
Margin="30,0"
Text="{Binding Recipe.Cholesterol}"
VerticalOptions="Center"
TextColor="{ DynamicResource BaseTextColor }"/>
</Grid>
<!--++++++++++++++++++ FIN INFORMACIÓN ++++++++++++++++++++++-->
</Grid>
</Grid>
</Grid>
</ScrollView>
<!-- POSTED -->
<StackLayout
Padding="0,0,0,5"
Orientation="Horizontal"
VerticalOptions="FillAndExpand"
HorizontalOptions="Center">
<Label
Text="Publicado por : "
TextColor="{ DynamicResource AccentColor }"
VerticalTextAlignment="Center"
HorizontalOptions="End"/>
<Image
Source="inutralia.png"
HorizontalOptions="End"/>
</StackLayout>
</StackLayout>
</ContentPage>
\ No newline at end of file
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RecipeDetailView : ContentPage
{
protected RecipeViewModel ViewModel => BindingContext as RecipeViewModel;
public RecipeDetailView()
{
try
{
InitializeComponent();
}
catch(Exception e)
{
}
}
protected override async void OnAppearing()
{
base.OnAppearing();
await ViewModel.RefreshData();
//setTimeout(Excerpt.Text = "\""+ Excerpt.Text+ "\"");
//await Task.Run(async () =>
//{
// await Task.Delay(5000);
// Device.BeginInvokeOnMainThread(() =>
// {
// });
//});
outerScrollView.Scrolled += OnScroll;
}
public void UnSelectedItem()
{
((ListView)listTable).SelectedItem = null;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
outerScrollView.Scrolled -= OnScroll;
}
public void OnScroll(object sender, ScrolledEventArgs e)
{
var imageHeight = img.Height * 2;
var scrollRegion = layeringGrid.Height - outerScrollView.Height;
var parallexRegion = imageHeight - outerScrollView.Height;
var factor = outerScrollView.ScrollY - parallexRegion * (outerScrollView.ScrollY / scrollRegion);
if (factor < 0)
{
factor = 0;
}
else
{
if (img.TranslationY > img.Height)
{
factor = img.Height;
}
else if (img.TranslationY > outerScrollView.ScrollY)
{
img.TranslationY = outerScrollView.ScrollY;
}
}
img.TranslationY = factor;
img.Opacity = 1 - (factor / imageHeight);
//headers.Scale = 1 - ( (factor ) / (imageHeight * 2) ) ;
}
public void OnMore(object sender, EventArgs e)
{
var mi = ((MenuItem)sender);
}
public void OnDelete(object sender, EventArgs e)
{
var mi = ((MenuItem)sender);
}
/// <summary>
/// Llamado cuando cambia el contexto asociado
/// </summary>
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
// Le decimos al ViewModel que queremos ser informados cuando cambie
// cualquiera de sus propiedades
ViewModel.PropertyChanged += OnViewModelPropertyChanged;
}
/// <summary>
/// Llamado cuando cambia el valor de una propiedad del ViewModel
/// </summary>
private void OnViewModelPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
// Cuando cambia el índice del día seleccionado, cambiamos el color de los botones
if (e.PropertyName == "Recipe")
{
listTable.HeightRequest = (30 * ViewModel.Recipe.Ingredients.Count());
} //endif
}
public void OnPrimaryActionButtonClicked(object sender, EventArgs e)
{
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.ModalFiltersRecipe"
x:Name="modalFiltersRecipe"
BackgroundColor="{DynamicResource BasePageColor}"
Title="Recetas">
<StackLayout Padding="20"
VerticalOptions="FillAndExpand"
>
<StackLayout VerticalOptions="Start" Orientation="Horizontal" Padding="0,0,0,10">
<Entry HorizontalOptions="FillAndExpand" Text="{Binding Desc}" Placeholder="Introduzca búsqueda" />
</StackLayout>
<ListView ItemTapped="ItemTapped"
ItemsSource="{Binding Groups}"
Footer=""
HasUnevenRows="True"
IsGroupingEnabled="True">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<StackLayout BackgroundColor="{DynamicResource ComplementColor}" Padding="15,5,15,5">
<Label Text="{Binding Name}" TextColor="White" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<SwitchCell Text="{Binding Name}" On="{Binding Selected}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<artina:Button x:Name="applyButton"
Grid.Row="1"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center} "
VerticalOptions="End"
Clicked="ApplyModalButton"
Style="{DynamicResource PrimaryActionButtonStyle}"
Text= "Aplicar"
/>
</StackLayout>
</ContentPage>
\ No newline at end of file
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
public partial class ModalFiltersRecipe : ContentPage
{
protected RecipeListOptionsViewModel ViewModel => BindingContext as RecipeListOptionsViewModel;
protected RecipeListView ListView;
public ModalFiltersRecipe( RecipeListView listView)
{
InitializeComponent();
ListView = listView;
}
void ItemTapped(object sender, ItemTappedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
private async void ApplyModalButton(object sender, EventArgs e)
{
await ListView.ApplyFilters ();
}
protected override async void OnAppearing()
{
base.OnAppearing();
await ViewModel.ExecuteLoadOptionsCommand();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
x:Class="inutralia.Views.RecipeItemTemplate"
x:Name="RecipeItemTemplate"
BackgroundColor="White">
<!--<ContentPage.Resources>
<ResourceDictionary>
<local:ImageTransformator x:Key="cnvImg"></local:ImageTransformator>
</ResourceDictionary>
</ContentPage.Resources>-->
<Grid BackgroundColor="Black">
<!-- TODO: Cambiar icon.png por imagen adecuada -->
<ffimageloading:CachedImage
FadeAnimationEnabled="true"
Source="{ Binding Image }"
Aspect="AspectFill"
Opacity="0.5"/>
<Grid
ColumnSpacing="0"
RowSpacing="6"
Padding="20">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="10" />
</Grid.RowDefinitions>
<!--PARTE SUPERIOR-->
<StackLayout
Grid.Row="0"
VerticalOptions="End"
HorizontalOptions="Start">
<StackLayout
Grid.Row="1"
Orientation="Horizontal"
HorizontalOptions="Fill"
VerticalOptions="FillAndExpand"
Padding="5"
>
<!--TITULO-->
<Label
FontSize="30"
FontAttributes="Bold"
Text="{Binding ShortName}"
LineBreakMode="WordWrap"
TextColor="{ DynamicResource InverseTextColor }"/>
</StackLayout>
</StackLayout>
<!--PARTE INFERIOR-->
<StackLayout
Grid.Row="1"
Orientation="Horizontal"
HorizontalOptions="FillAndExpand"
VerticalOptions="End">
<!--RESUMEN -->
<Label
Text="{ Binding Excerpt}"
TextColor="{ DynamicResource InverseTextColor }"
HorizontalOptions="FillAndExpand" />
<!--KCAL-->
<!-- <Label
Text="{Binding Energy}"
TextColor="{ DynamicResource InverseTextColor }"
FontSize="Small"
LineBreakMode="NoWrap"
HorizontalOptions="End" />-->
</StackLayout>
<BoxView
Grid.Row="2"
Style="{StaticResource BrandNameOrnamentStyle}"/>
</Grid>
</Grid>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RecipeItemTemplate : ContentView
{
public RecipeItemTemplate ()
{
InitializeComponent ();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Esta es la página con el listado de menus genericos.
Tiene una lista con las siguientes características:
- Utiliza un ViewModel (paradigma MVVM) como BindingContext
- Muestra el listado de los menús genéricos
- Actualiza el listado al deslizar hacia abajo (pull-to-refresh)
- Tiene menú contextual (slide-right en iOS, mantener pulsado en Android)
con un botón para borrar una notificación
-->
<!-- Importante: La página necesita x:Name para poder referenciarla en la descripción
de los elementos del menú contextual
-->
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:conv="clr-namespace:inutralia.Converters;assembly=inutralia"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
x:Class="inutralia.Views.RecipeListView"
x:Name="RecipeListView"
BackgroundColor="White"
Title="Recetas"
>
<ContentPage.ToolbarItems>
<ToolbarItem Icon="icon_filter.png" Clicked="ToolbarFiltersClicked" />
</ContentPage.ToolbarItems>
<ContentPage.Resources>
<ResourceDictionary>
<conv:ImageTransformator x:Key="cnvImg"></conv:ImageTransformator>
</ResourceDictionary>
</ContentPage.Resources>
<!-- Este es el componente para el listado. Primero configura de dónde obtiene los datos
y el método al que llamar cuando se hace tap en un elemento de la lista. Luego
configura el pull-to-refresh. Por último algunas opciones de visionado y gestión
de memoria
-->
<StackLayout VerticalOptions="FillAndExpand">
<ActivityIndicator HorizontalOptions="FillAndExpand" IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}"/>
<Label Text="Buscando recetas..."
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
IsVisible="{Binding IsBusy}"
/>
<Label Margin="8,0,8,0"
Text="No se encontraron resultados. Cambie los filtros y pulse Aplicar"
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
IsVisible="{Binding IsEmpty}"
/>
<ListView VerticalOptions="FillAndExpand"
SeparatorVisibility="None"
SeparatorColor="{ DynamicResource ListViewSeparatorColor }"
Footer=""
ItemsSource="{Binding Recipes}"
RowHeight="240"
ItemTapped="ItemTapped"
HasUnevenRows="false"
x:Name="listRecipe"
IsVisible="{Binding IsNotEmpty}"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:RecipeItemTemplate/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
using inutralia.Models;
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RecipeListView : ContentPage
{
protected RecipeListViewModel ViewModel => BindingContext as RecipeListViewModel;
protected bool firstTime = true;
protected ModalFiltersRecipe filtersPage = null;
public RecipeListView()
{
InitializeComponent();
BindingContext = new RecipeListViewModel();
}
/// <summary>
/// Método llamado al hacer tap en un elemento de la lista. Navega a la página de detalle
/// de la receta seleccionada
/// </summary>
/// <param name="sender">La ListView</param>
/// <param name="e">Argumentos del evento</param>
void ItemTapped(object sender, ItemTappedEventArgs e)
{
// e.Item apunta a la receta seleccionada. A partir de ella se crea su ViewModel
// y con él se crea la página de detalle y se navega a ella
Navigation.PushAsync(
new RecipeDetailView() { BindingContext = new RecipeViewModel(e.Item as Recipe) }
);
}
public async Task ApplyFilters ()
{
await Navigation.PopAsync ();
ViewModel.Recipes.Clear ();
ViewModel.RefreshRecipesCommand.Execute (BindingContext);
}
/// <summary>
/// Método llamado cada vez que una página pasa a ser visible
/// </summary>
protected override async void OnAppearing()
{
base.OnAppearing();
// La primera vez forzamos la aparición del modal de filtrado
if (firstTime)
{
firstTime = false;
await DoFiltersAsync ();
} //endif
}
/// <summary>
/// Método llamado al pulsar el toolbar 'Filtros'
/// </summary>
private async void ToolbarFiltersClicked (object sender, EventArgs e)
{
if(ViewModel.IsNotBusy)
await DoFiltersAsync ();
}
/// <summary>
/// Tarea de filtrado. Muestra el modal, espera a que se cierre, y actualiza el listado
/// </summary>
protected async Task DoFiltersAsync ()
{
// Crear la página de filtros si todavía no existe
if (filtersPage == null)
{
filtersPage = new ModalFiltersRecipe (this)
{
BindingContext = ViewModel.Filters
};
} //endif
// Mostrarla
await Navigation.PushAsync (filtersPage);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.RegisterConditionsView"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
Title="Registro en la aplicación ..."
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Content>
<StackLayout Padding="{ DynamicResource MainWrapperPadding }">
<StackLayout Padding="20" >
<WebView x:Name="ConditionsWebView"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
WidthRequest="1000"
HeightRequest="1000" />
<!-- Volver -->
<artina:Button Style="{ DynamicResource PrimaryActionButtonStyle }"
BackgroundColor="#3b5998"
VerticalOptions="End"
x:Name="backButton"
Text = "Volver"
Clicked="OnBackButtonClicked"
WidthRequest="{artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RegisterConditionsView : ContentPage
{
public RegisterConditionsView()
{
InitializeComponent();
var htmlSource = new HtmlWebViewSource ();
var assembly = typeof (App).GetTypeInfo ().Assembly;
Stream stream = assembly.GetManifestResourceStream ("inutralia.LegalConditions.html");
using (var reader = new StreamReader (stream))
{
htmlSource.Html = reader.ReadToEnd ();
}
ConditionsWebView.Source = htmlSource;
}
async void OnBackButtonClicked(object sender, EventArgs e)
{
await Navigation.PopModalAsync ();
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.RegisterView"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
Title="Registro en la aplicación ..."
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Content>
<AbsoluteLayout>
<!-- GRADIENT-->
<Image
AbsoluteLayout.LayoutBounds="0,0,1,44"
AbsoluteLayout.LayoutFlags="WidthProportional"
Style="{ StaticResource StatusBarShimStyle }"
VerticalOptions="Start"/>
<ScrollView
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
VerticalOptions="FillAndExpand"
Padding="{ DynamicResource MainWrapperPadding }">
<!-- MAIN CONTAINER -->
<Grid
ColumnSpacing="0"
RowSpacing="0"
Padding="20,30,20,10"
HorizontalOptions="Fill"
VerticalOptions="FillAndExpand" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- HEADER -->
<StackLayout
Grid.Row="0"
Spacing="5"
Padding="0,20,0,0"
InputTransparent="true">
<!-- LOGO -->
<Grid
Grid.Row="1"
WidthRequest="150"
VerticalOptions="Center"
HorizontalOptions="Center">
<Image Source="logo_empresa.png" WidthRequest="150"></Image>
</Grid>
<!--SEPARATOR-->
<BoxView
WidthRequest="80"
HeightRequest="1"
HorizontalOptions="Center"
VerticalOptions="End"
BackgroundColor="{DynamicResource BaseTextColor}"/>
</StackLayout>
<!---FIELDS CONTAINER-->
<Grid
Grid.Row="1"
RowSpacing="30"
Padding="0,20,0,20"
VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- ICON BACKGROUND -->
<Label
Grid.Column="0"
Grid.Row="0"
FontSize="40"
Style="{StaticResource RoundShape}"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- ICON -->
<Label
Grid.Column="0"
Grid.Row="0"
FontSize="14"
Text="{ x:Static local:GrialShapesFont.Email }"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!--EMAIL FIELD-->
<Entry
Grid.Column="1"
Grid.Row="0"
HeightRequest="40"
x:Name = "userNameEntry"
Placeholder="Usuario"
BackgroundColor="{ DynamicResource PlaceholderColorEntry }"
PlaceholderColor="{ DynamicResource BaseTextColor }"/>
<!-- ICON BACKGROUND -->
<Label
Grid.Column="0"
Grid.Row="1"
FontSize="40"
Style="{StaticResource RoundShape}"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- ICON -->
<Label
Grid.Column="0"
Grid.Row="1"
FontSize="14"
Text="{ x:Static local:GrialShapesFont.Lock }"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- PASSWORD ENTRY -->
<Entry
Grid.Column="1"
Grid.Row="1"
HeightRequest="40"
x:Name = "passWordEntry"
Placeholder="Contraseña"
IsPassword="True"
BackgroundColor="{ DynamicResource PlaceholderColorEntry }"
PlaceholderColor="{ DynamicResource BaseTextColor }"/>
<!-- ICON BACKGROUND -->
<Label
Grid.Column="0"
Grid.Row="2"
FontSize="40"
Style="{StaticResource RoundShape}"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource ComplementColor}"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- ICON -->
<Label
Grid.Column="0"
Grid.Row="2"
FontSize="14"
Text="{ x:Static local:GrialShapesFont.Star }"
Style="{StaticResource FontIconBase}"
HorizontalTextAlignment="Center"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Center"
/>
<!-- PASSWORD ENTRY -->
<Entry
Grid.Column="1"
Grid.Row="2"
HeightRequest="40"
x:Name = "companyCodeEntry"
Placeholder="Código de Descarga"
IsPassword="True"
BackgroundColor="{ DynamicResource PlaceholderColorEntry }"
PlaceholderColor="{ DynamicResource BaseTextColor }"/>
</Grid>
<!-- BUTTONS -->
<StackLayout
Grid.Row="2"
Spacing="10"
Padding="0,10,0,0"
HorizontalOptions="FillAndExpand"
VerticalOptions="End" >
<StackLayout Orientation="Horizontal" IsVisible="False">
<Switch x:Name="ConditionsSwitch" Toggled="ConditionsSwitch_Toggled" />
<Label Text="Confirmo haber leído y aceptado la política de privacidad y las condiciones de uso">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="ConditionsLabelTapped"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
</StackLayout>
<!-- LOGIN -->
<artina:Button x:Name="RegisterButton"
Clicked="OnRegisterButtonClicked"
Style="{DynamicResource PrimaryActionButtonStyle}"
VerticalOptions="End"
Text="Registrar"
WidthRequest="{ artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>
<!-- Volver -->
<artina:Button
Style="{ DynamicResource PrimaryActionButtonStyle }"
BackgroundColor="#3b5998"
VerticalOptions="End"
x:Name="backButton"
Text = "Volver al Login"
Clicked="OnBackButtonClicked"
WidthRequest="{ artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>
<!--SEPARATOR-->
<BoxView
Grid.Row="4"
HeightRequest="1"
VerticalOptions="Start"
HorizontalOptions="Center"
WidthRequest="300"
BackgroundColor="{DynamicResource BaseTextColor}"/>
</StackLayout>
</Grid>
</ScrollView>
</AbsoluteLayout>
</ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;
using System.Net;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RegisterView : ContentPage
{
public RegisterView()
{
InitializeComponent();
// RegisterButton.IsEnabled = false;
}
async void OnRegisterButtonClicked(object sender, EventArgs e)
{
var companyCode = companyCodeEntry.Text;
var userName = userNameEntry.Text;
var passWord = passWordEntry.Text;
HttpStatusCode? errorCode = await App.API.RegisterUser (companyCode, userName, passWord);
if (errorCode == null)
{
await DisplayAlert("Correcto" , "Se ha registrado correctamente. Puede acceder a la aplicación." , "Entendido");
// Cambiar de vista
await Navigation.PopModalAsync ();
}
else
{
string msg = (errorCode == HttpStatusCode.Conflict) ?
"Ya existe un usuario con ese nombre, pruebe con otro." :
"Se ha producido un error en la grabación, por favor, inténtelo más tarde.";
await DisplayAlert("Error", msg, "Entendido");
} //endif
}
async void OnBackButtonClicked(object sender, EventArgs e)
{
await Navigation.PopModalAsync ();
}
private void ConditionsSwitch_Toggled (object sender, ToggledEventArgs e)
{
RegisterButton.IsEnabled = e.Value;
}
private async void ConditionsLabelTapped (object sender, EventArgs e)
{
// Vista con las condiciones legales
await Navigation.PushModalAsync (new RegisterConditionsView () as Page);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.RememberView">
<StackLayout Padding = "25,50" >
<Label x:Name="messageLabel" HorizontalOptions = "Center"/>
<Entry x:Name = "userEntry" Placeholder="Usuario" HorizontalOptions = "Fill"
VerticalOptions = "CenterAndExpand" />
<Button x:Name="RememberButton" Text = "Recuperar" Clicked="OnRememberButtonClicked" HorizontalOptions = "Fill"
VerticalOptions = "EndAndExpand" FontSize="24" BorderRadius="10" BorderWidth="1"/>
</StackLayout>
</ContentPage>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class RememberView : ContentPage
{
public RememberView()
{
InitializeComponent();
}
void OnRememberButtonClicked(object sender, EventArgs e)
{
Page nextView = new LoginView() as Page;
// Cambiar de vista
Application.Current.MainPage = nextView;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.ShoppingList.InfoPopup"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
BackgroundColor="Transparent">
<pages:PopupPage.Animation>
<animations:ScaleAnimation
PositionIn="Center"
PositionOut="Center"
ScaleIn="1.2"
ScaleOut="0.8"
DurationIn="400"
DurationOut="300"
EasingIn="SinOut"
EasingOut="SinIn"
HasBackgroundAnimation="False"/>
</pages:PopupPage.Animation>
<StackLayout VerticalOptions="Center" Padding="20,0" HorizontalOptions="FillAndExpand" >
<Frame CornerRadius="10" Padding="0" BackgroundColor="{DynamicResource AccentColor}" >
<StackLayout Padding="10">
<Label Text="COMO SE UTILIZA LA LISTA DE LA COMPRA" TextColor="White" HorizontalOptions="Start"/>
<Label Text="La lista de la compra mostrará por defecto los ingredientes a utilizar por orden alfabético." TextColor="#333333" FontSize="Small" HorizontalOptions="CenterAndExpand"></Label>
<Label Text="BOTONES A UTILIZAR" TextColor="White" HorizontalOptions="Start"></Label>
<Label Text="· Añadir Productos" HorizontalOptions="Start" TextColor="#FFFFFF" FontSize="Small"></Label>
<Label Text="Desde esta opción podremos añadir el producto que queramos, siempre que sean relativos a la nutrición" TextColor="#333333" FontSize="Small" HorizontalOptions="CenterAndExpand"></Label>
<Label Text="· Comprar en DELSUPER" HorizontalOptions="Start" TextColor="#FFFFFF" FontSize="Small"></Label>
<Label Text="Este botón se pulsará, siempre que se quiera realizar la compra a través de un supermercado de forma online. Para ello nuestra alianza con el marketplace DelSuper nos facilitará esta opción, integrando nuestra lista en el supermercado que elijamos, para que nos la traigan a casa*" TextColor="#333333" FontSize="Small" HorizontalOptions="CenterAndExpand"></Label>
<Label Text="* Ver códigos postales de reparto." TextColor="#333333" FontSize="Micro" HorizontalOptions="CenterAndExpand"></Label>
<Label Text="· Borrar marcados" HorizontalOptions="Start" TextColor="#FFFFFF" FontSize="Small"></Label>
<Label Text="Esta opción tiene 2 funcionalidades, la primera, si vas hacer la compra personalmente, puedes ir marcándolos según los vayas echando a la cesta, y la segunda, tiene una función de eliminación, de tal forma que si vas a hacer la compra online y un producto no lo quieres adquirir, lo deberás marcar y borrar. Puedes hacerlo uno por uno o de forma masiva." TextColor="#333333" FontSize="Small" HorizontalOptions="CenterAndExpand"></Label>
<Label Text="· Borrar todos" HorizontalOptions="Start" TextColor="#FFFFFF" FontSize="Small"></Label>
<Label Text="Esta opción tiene como objetivo borrar todos los productos de una sola vez" TextColor="#333333" FontSize="Small" HorizontalOptions="CenterAndExpand"></Label>
<StackLayout Orientation="Horizontal" VerticalOptions="End" Padding="10,20,10,0">
<artina:Button Text="Cerrar"
Clicked="Button_Clicked"
FontSize="Medium"
Style="{DynamicResource DeleteButtonStyle}"
VerticalOptions="Center"
HorizontalOptions="FillAndExpand" />
</StackLayout>
</StackLayout>
</Frame>
</StackLayout>
</pages:PopupPage>
using Rg.Plugins.Popup.Pages;
using Rg.Plugins.Popup.Services;
using System;
using Xamarin.Forms.Xaml;
namespace inutralia.Views.ShoppingList
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class InfoPopup : PopupPage
{
public InfoPopup()
{
InitializeComponent();
}
private async void Button_Clicked(object sender, EventArgs e)
{
await PopupNavigation.PopAsync(true);
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.ListDelSuper"
x:Name="listDelSuper"
Title=" TU COMPRA DELSUPER" >
<StackLayout Margin="10,10" VerticalOptions="FillAndExpand" IsVisible="{Binding isBusy}">
<ListView
ItemsSource="{Binding ShoppingList}"
ItemTapped="ItemTapped"
IsPullToRefreshEnabled="True"
RefreshCommand="{Binding RefreshShoppingListCommand}"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
BackgroundColor="Transparent"
CachingStrategy="RecycleElement"
SeparatorColor="{DynamicResource AccentColor}"
Footer=""
HasUnevenRows="False"
x:Name="ListView"
>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" >
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" Padding="10,10,10,10" >
<Label Text="{Binding Text}" HorizontalOptions="StartAndExpand" FontSize="Medium"/>
</StackLayout>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" Padding="0,10,0,10" >
<artina:Button x:Name="buyModalButton"
Text="DELSUPER"
FontSize="Medium"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
HeightRequest="60"
WidthRequest="120"
Clicked="BuyModalButton"
Style="{DynamicResource PrimaryActionButtonStyle}"
BackgroundColor="#3b5998"/>
<artina:Button x:Name="cancelModalButton"
Text="Cancelar"
FontSize="Medium"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
HeightRequest="60"
WidthRequest="110"
Clicked="CancelModalButton"
Style="{DynamicResource DeleteButtonStyle}"/>
</StackLayout>
</StackLayout>
</ContentPage>
using inutralia.Models;
using inutralia.ViewModels;
using System;
using System.Net.Http;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ListDelSuper : ContentPage
{
protected ShoppingListViewModel ViewModel => BindingContext as ShoppingListViewModel;
public ListDelSuper()
{
InitializeComponent();
}
void ItemTapped(object sender, ItemTappedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
private void BuyModalButton(object sender, WebNavigatingEventArgs e)
{
var browser = API.Constants.ApiUrl;
foreach (var element in ViewModel.ShoppingList)
{
browser += element.Id.ToString() + ',';
}
browser = browser.TrimEnd(',');
Device.OpenUri(new Uri(browser));
}
async void CancelModalButton(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
protected override async void OnAppearing()
{
base.OnAppearing();
await ViewModel.ExecuteLoadShoppingListCommand();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.ModalAddShoppingList"
x:Name="modalAddShoppingListView"
Title="Ingredientes adicionales"
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness"
iOS="0,40,0,0"
Android="10,50,10,0"/>
</ContentPage.Padding>
<ContentPage.Content>
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<StackLayout VerticalOptions="CenterAndExpand" Padding="10,20,10,20">
<Label Text="AÑADE QUE QUIERES COMPRAR" TextColor="{DynamicResource AccentColor}" HorizontalOptions="Center" FontSize="24"/>
<Entry x:Name="entryIngre" Placeholder="Añade el ingrediente" HorizontalOptions="FillAndExpand" VerticalOptions="Center" Margin="20,20" />
</StackLayout>
</StackLayout>
<StackLayout Orientation="Horizontal" VerticalOptions="EndAndExpand" HorizontalOptions="FillAndExpand" Padding="10,0,10,20" >
<artina:Button x:Name="addModalButton"
VerticalOptions="CenterAndExpand"
FontSize="Medium"
Text="Añadir"
HorizontalOptions="FillAndExpand"
HeightRequest="60"
WidthRequest="120"
Clicked="AddModalButton"
Style="{DynamicResource PrimaryActionButtonStyle}" />
<artina:Button x:Name="cancelModalButton"
FontSize="Medium"
VerticalOptions="CenterAndExpand"
HorizontalOptions="FillAndExpand"
Text="Cancelar"
HeightRequest="60"
WidthRequest="110"
Clicked="CancelModalButton"
Style="{DynamicResource DeleteButtonStyle}"/>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
\ No newline at end of file
using inutralia.Models;
using inutralia.ViewModels;
using System;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ModalAddShoppingList : ContentPage
{
protected ShoppingListViewModel ViewModel => BindingContext as ShoppingListViewModel;
public ModalAddShoppingList()
{
InitializeComponent();
entryIngre.TextChanged += AddIngreTextChanged;
entryIngre.Text = "";
entryIngre.IsEnabled = true;
}
private void AddIngreTextChanged(object sender, TextChangedEventArgs e)
{
addModalButton.IsVisible = (entryIngre.Text.Length > 0);
}
private async void AddModalButton(object sender, EventArgs e)
{
var newItem = new Models.ShoppingList() { FromMenus = false, Select = false, Text = entryIngre.Text};
await ViewModel.AddItem(newItem);
await Navigation.PopModalAsync();
}
async void CancelModalButton(object sender, EventArgs e)
{
await Navigation.PopModalAsync();
}
protected override void OnAppearing()
{
base.OnAppearing();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.ShoppingListView"
x:Name="shoppingListView"
Title="Lista de la Compra"
BackgroundColor="{DynamicResource BasePageColor}">
<ContentPage.ToolbarItems>
<ToolbarItem Icon="icon_info.png" artina:Theme.Name="Info" Clicked="InfoButtonClicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<StackLayout Margin="10,10" VerticalOptions="FillAndExpand" IsVisible="{Binding isBusy}">
<ListView
ItemsSource="{Binding ShoppingList}"
ItemTapped="ItemTapped"
IsPullToRefreshEnabled="True"
RefreshCommand="{Binding RefreshShoppingListCommand}"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
BackgroundColor="Transparent"
Footer=""
CachingStrategy="RecycleElement"
HasUnevenRows="False"
Margin="10,20"
x:Name="ListView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="0,10,0,10" VerticalOptions="CenterAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackLayout >
<Label Text="{Binding Text}" FontSize="Medium"/>
</StackLayout>
<Switch IsToggled="{Binding Select}" Grid.Column="1" />
</Grid>
</ViewCell>
<!--<SwitchCell Text="{Binding Text}" On="{Binding Select}"/>-->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" >
<!--button 1-->
<artina:Button x:Name="addButton"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Clicked="OnAddButtonClicked"
Style="{DynamicResource PrimaryActionButtonStyle}"
Text= "Añadir productos"
FontSize="Medium"/>
<artina:Button x:Name="addDelSuperButton"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Clicked="OnAddDelSuperButtonClicked"
Style="{DynamicResource PrimaryActionButtonStyle}"
BackgroundColor="#3b5998"
Text= "Comprar en DELSUPER"
FontSize="Medium"/>
</StackLayout>
<StackLayout Orientation="Horizontal">
<!--button 2-->
<artina:Button x:Name="deleteButton"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Clicked="OnDeleteButtonClicked"
Style="{DynamicResource DeleteButtonStyle}"
Text ="Borrar marcados"
FontSize="Small"/>
<!--button 3-->
<artina:Button x:Name="deleteAllButton"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Clicked="OnDeleteAllButtonClicked"
Style="{DynamicResource DeleteButtonStyle}"
Text="Borrar todos"
FontSize="Small"/>
</StackLayout>
<!--<BoxView Style="{ DynamicResource ThemeShowCaseHorizontalRuleStyle }" />-->
</StackLayout>
</ContentPage.Content>
</ContentPage>
\ No newline at end of file
using inutralia.ViewModels;
using inutralia.Views.ShoppingList;
using Rg.Plugins.Popup.Services;
using System;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class ShoppingListView : ContentPage
{
protected ShoppingListViewModel ViewModel => BindingContext as ShoppingListViewModel;
public ShoppingListView()
{
InitializeComponent();
BindingContext = new ShoppingListViewModel();
}
protected override async void OnAppearing()
{
base.OnAppearing();
await ViewModel.ExecuteLoadShoppingListCommand();
}
void ItemTapped(object sender, ItemTappedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
private async void InfoButtonClicked(object sender, EventArgs e) => await PopupNavigation.PushAsync(new InfoPopup());
async void OnAddButtonClicked(object sender, EventArgs e)
{
var addingre = new ModalAddShoppingList()
{
BindingContext = ViewModel
};
await Navigation.PushModalAsync(addingre);
}
async void OnAddDelSuperButtonClicked(object sender, EventArgs e)
{
var buy = new ListDelSuper()
{
BindingContext = ViewModel
};
await Navigation.PushAsync(buy);
}
async void OnDeleteButtonClicked(object sender, EventArgs e)
{
if(await DisplayAlert("Está a punto de borrar uno o varios ingredientes.", "¿Desea continuar?", "Aceptar", "Cancelar") )
{
await ViewModel.DeleteSelected ();
} //endif
}
async void OnDeleteAllButtonClicked(object sender, EventArgs e)
{
if(await DisplayAlert("Está a punto de borrar todos los ingredientes.", "¿Desea continuar?", "Aceptar", "Cancelar") )
{
await ViewModel.DeleteAll ();
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
x:Class="inutralia.Views.TrivialGameItemTemplate"
x:Name="TrivialGameItemTemplate"
BackgroundColor="White">
<Grid
HorizontalOptions="Fill"
VerticalOptions="Fill"
Padding="8,8,8,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Datos -->
<Label Grid.Row="1"
Grid.Column="0"
Text="{Binding StartDate}"
XAlign="Center"/>
<Label Grid.Row="1"
Grid.Column="1"
Text="{Binding Progress}"
XAlign="Center"/>
<Label Grid.Row="1"
Grid.Column="2"
Text="{Binding Score}"
XAlign="Center"/>
</Grid>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class TrivialGameItemTemplate : ContentView
{
public TrivialGameItemTemplate ()
{
InitializeComponent ();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
x:Class="inutralia.Views.TrivialGameResultTemplate"
x:Name="TrivialGameItemTemplate"
BackgroundColor="White">
<StackLayout Padding="8,8,8,8">
<Label Text="{Binding Question.Text}" HorizontalOptions="Start" />
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Label Text=" { x:Static local:IoniciconsFont.CheckmarkCircled }" IsVisible="{Binding IsCorrect}" Margin="26,0,26,0" HorizontalOptions="Start" TextColor="Green" Style="{StaticResource FontIcon}" FontSize="Small" YAlign="Center" XAlign="Start">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="20"/>
</Label.FontSize>
</Label>
<Label Text=" { x:Static local:IoniciconsFont.CloseCircled }" IsVisible="{Binding IsNotCorrect}" Margin="26,0,26,0" HorizontalOptions="Start" TextColor="Red" Style="{StaticResource FontIcon}" FontSize="Small" YAlign="Center" XAlign="Start">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="20"/>
</Label.FontSize>
</Label>
<Label Text="{Binding Answer}" HorizontalOptions="Start" YAlign="Center" />
</StackLayout>
<StackLayout IsVisible="{Binding IsNotCorrect}" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Label Text=" { x:Static local:IoniciconsFont.CheckmarkCircled }" Margin="26,0,26,0" HorizontalOptions="Start" TextColor="Green" Style="{StaticResource FontIcon}" FontSize="Small" YAlign="Center" XAlign="Start">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="20"/>
</Label.FontSize>
</Label>
<Label Text="{Binding ValidAnswer}" HorizontalOptions="Start" YAlign="Center" />
</StackLayout>
</StackLayout>
</ContentView>
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class TrivialGameResultTemplate : ContentView
{
public TrivialGameResultTemplate ()
{
InitializeComponent ();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
x:Class="inutralia.Views.TrivialGameView"
Title="{Binding Title}"
>
<!-- Contenedor principal -->
<StackLayout VerticalOptions="FillAndExpand">
<!-- Contenedor pregunta (visible cuando la partida no ha terminado) -->
<StackLayout VerticalOptions="Fill" IsVisible="{Binding IsNotComplete}">
<!-- MAIN IMAGE -->
<ffimageloading:CachedImage
x:Name="img"
Source="{ Binding CurrentQuestion.Image }"
Aspect="AspectFit"
BackgroundColor="Black"
HorizontalOptions="Center"
VerticalOptions="Start"
Opacity=".8"/>
<!-- Pregunta -->
<Label HorizontalOptions="FillAndExpand"
VerticalOptions="Start"
HorizontalTextAlignment="Center"
Text="{Binding CurrentQuestion.Text}"
BackgroundColor="{ DynamicResource ComplementColor }"
TextColor="{DynamicResource CustomNavBarTextColor }"
/>
<!-- Opciones -->
<ListView SeparatorVisibility="Default"
SeparatorColor="{ DynamicResource ListViewSeparatorColor }"
Footer=""
ItemsSource="{Binding CurrentQuestion.Options}"
VerticalOptions="EndAndExpand"
ItemTapped="ItemTapped"
HasUnevenRows="True"
x:Name="listOptions">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView>
<StackLayout Padding="10,10,10,10">
<Label Text="{Binding .}" />
</StackLayout>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
<!-- Contenedor resultado (visible cuando la partida ha terminado) -->
<StackLayout VerticalOptions="FillAndExpand" IsVisible="{Binding IsComplete}" Padding="8,8,8,8" Margin="8,8,8,8">
<!--titulo campos de cada partida-->
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" BackgroundColor="{DynamicResource ComplementColor}" Padding="8,8,8,8" Margin="0,20,0,0" Grid.Row="1">
<Label Text="Fecha" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
<Label Text="Respuestas" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
<Label Text="Puntuación" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
</StackLayout>
<!-- Resumen -->
<views:TrivialGameItemTemplate BindingContext="{Binding Game}" />
<!-- Resultados -->
<!--Título listado de resultados-->
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" BackgroundColor="#FF62b9ae" Padding="8,8,8,8" >
<Label Text="Resumen de resultados" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
</StackLayout>
<!--preguntas y acierto o fallo-->
<ListView SeparatorVisibility="Default"
SeparatorColor="{ DynamicResource ListViewSeparatorColor }"
ItemsSource="{Binding Results}"
ItemTapped="Results_ItemTapped"
HasUnevenRows="True"
x:Name="listResults">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<views:TrivialGameResultTemplate/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</StackLayout>
</ContentPage>
\ No newline at end of file
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
[XamlCompilation (XamlCompilationOptions.Compile)]
public partial class TrivialGameView : ContentPage
{
protected TrivialGameViewModel ViewModel => BindingContext as TrivialGameViewModel;
public TrivialGameView ()
{
InitializeComponent ();
}
async Task ItemTapped (object sender, ItemTappedEventArgs e)
{
// Obtiene el índice de la respuesta seleccionada
var index = ((ListView) sender).ItemsSource.Cast<object> ().ToList ().IndexOf (e.Item);
// Deselecciona el item para que no le cambie el color de fondo
((ListView) sender).SelectedItem = null;
await ViewModel.Answer (index);
}
private void Results_ItemTapped (object sender, ItemTappedEventArgs e)
{
// Deselecciona el item para que no le cambie el color de fondo
((ListView) sender).SelectedItem = null;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
x:Class="inutralia.Views.TrivialListView"
x:Name="trivialListPage"
Title="Trivial">
<ContentPage.Content>
<Grid VerticalOptions="FillAndExpand" Padding="20,20,20,20" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!--PARTIDAS-->
<StackLayout Orientation="Vertical" HorizontalOptions="Fill" BackgroundColor="{DynamicResource ComplementColor}" Padding="8,8,8,8" Grid.Row="0" Margin="0,5,0,0">
<Label Text="PARTIDAS" HorizontalOptions="Center" TextColor="{DynamicResource CustomNavBarTextColor}" />
</StackLayout>
<!--titulo campos de cada partida-->
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" BackgroundColor="#FF62b9ae" Padding="8,8,8,8" Margin="0,5,0,0" Grid.Row="1">
<Label Text="Fecha" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
<Label Text="Respuestas" IsVisible="{Binding IsCorrect}" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
<Label Text="Puntuación" IsVisible="{Binding IsCorrect}" HorizontalOptions="CenterAndExpand" TextColor="{DynamicResource CustomNavBarTextColor}" />
</StackLayout>
<ListView Grid.Row="2"
VerticalOptions="FillAndExpand"
HorizontalOptions="Fill"
SeparatorVisibility="None"
SeparatorColor="{ DynamicResource ListViewSeparatorColor }"
ItemsSource="{Binding Games}"
ItemTapped="ItemTapped"
HasUnevenRows="True"
x:Name="listGames">
<ListView.RowHeight>
<!--<OnIdiom x:TypeArguments="x:Int32"
Phone="80"
Tablet="120"/>-->
</ListView.RowHeight>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Text="Borrar" Command="{Binding Source={x:Reference trivialListPage}, Path=BindingContext.DeleteGameCommand}" CommandParameter="{Binding .}" IsDestructive="True" />
</ViewCell.ContextActions>
<views:TrivialGameItemTemplate/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<artina:Button Grid.Row="3"
Command="{Binding NewGameCommand}"
Style="{DynamicResource PrimaryActionButtonStyle}"
Text="Nueva partida"
VerticalOptions="End"
WidthRequest="{ artina:OnOrientationDouble
LandscapePhone=200,
LandscapeTablet=400 }"
HorizontalOptions="{ artina:OnOrientationLayoutOptions
PortraitPhone=Fill,
LandscapePhone=Center,
PortraitTablet=Fill,
LandscapeTablet=Center }"/>
</Grid>
</ContentPage.Content>
</ContentPage>
\ No newline at end of file
using inutralia.Models;
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
[XamlCompilation (XamlCompilationOptions.Compile)]
public partial class TrivialListView : ContentPage
{
protected TrivialListViewModel ViewModel => BindingContext as TrivialListViewModel;
public TrivialListView ()
{
InitializeComponent ();
BindingContext = new TrivialListViewModel ();
}
/// <summary>
/// Método llamado cada vez que una página pasa a ser visible
/// </summary>
protected override async void OnAppearing ()
{
base.OnAppearing ();
// Le decimos al ViewModel que realice la primera carga del listado
await ViewModel.RefreshList ();
}
/// <summary>
/// Método llamado al hacer tap en un elemento de la lista. Navega a la página de detalle
/// de la partida seleccionada
/// </summary>
/// <param name="sender">La ListView</param>
/// <param name="e">Argumentos del evento</param>
void ItemTapped (object sender, ItemTappedEventArgs e)
{
// e.Item apunta a la partida seleccionada. A partir de ella se crea su ViewModel
// y con él se crea la página de detalle y se navega a ella
Navigation.PushAsync (
new TrivialGameView ()
{
BindingContext = new TrivialGameViewModel((TrivialGame) e.Item)
}
);
// Deselecciona el item para que no le cambie el color de fondo
((ListView) sender).SelectedItem = null;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.CustomMenuView"
x:Name="customDetailView"
Title="Mi menú personalizado">
<StackLayout VerticalOptions="FillAndExpand">
<ActivityIndicator HorizontalOptions="FillAndExpand" IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}" />
<Label Text="Danos dos segundos estámos cargando tu menú personalizado..."
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource AccentColor}"
IsVisible="{Binding IsBusy}"/>
<!-- MAIN CONTAINER -->
<Grid IsVisible="{Binding IsNotBusy}" ColumnSpacing="0" RowSpacing="10" Padding="20,20,20,20" HorizontalOptions="Fill" VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="50"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="50"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
</Grid.RowDefinitions>
<!-- Botones de acceso a cada día, se crean directamente en el código al crear la página -->
<Grid x:Name="buttonList" HorizontalOptions="FillAndExpand" VerticalOptions="Fill" ColumnSpacing="0" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
<!-- El menú del día seleccionado -->
<!--***************************** COMIDA ******************************-->
<Frame Grid.Row="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0,0,0,14">
<Grid x:Name="menuGrid" RowSpacing="10" ColumnSpacing="10" VerticalOptions="FillAndExpand" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Titulo Comida -->
<Label Text="COMIDA"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="4"
HorizontalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
TextColor="#ffffffff"
BackgroundColor="{DynamicResource ComplementColor}">
<Label.HeightRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="30"
Android="30"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="60"
Android="60"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.HeightRequest>
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="18"
Android="18"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="24"
Android="24"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<!-- Primero Comida -->
<Label Text="1º"
Grid.Row="1"
Grid.Column="0"
Grid.RowSpan="2"
VerticalOptions="Center"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="18"
Tablet="25"/>
</Label.FontSize>
</Label>
<!-- Primero Comida - Opc 1 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="1"
Grid.Column="1"
IsToggled="{Binding IsLunchFirstOption1}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.LunchFirst[0].ShortName}"
Grid.Row="1"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="1"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Primero Comida - Opc 2 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="2"
Grid.Column="1"
Grid.ColumnSpan="3" >
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="2"
Grid.Column="1"
IsToggled="{Binding IsLunchFirstOption2}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.LunchFirst[1].ShortName}"
Grid.Row="2"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="2"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Comida -->
<Label Text="2º"
Grid.Row="3"
Grid.Column="0"
Grid.RowSpan="2"
VerticalOptions="Center"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
</Label>
<!-- Segundo Comida - Opc 1 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="3"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{Binding CurrentDay.LunchSecond[0].ShortName}"
Grid.Row="3"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="3"
Grid.Column="1"
IsToggled="{Binding IsLunchSecondOption1}"
VerticalOptions="Center"/>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="3"
Grid.Column="3"
HorizontalOptions="CenterAndExpand"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Comida - Opc 2 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="4"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="4"
Grid.Column="1"
IsToggled="{Binding IsLunchSecondOption2}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.LunchSecond[1].ShortName}"
Grid.Row="4"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="4"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
</Grid>
</Frame>
<!--***************************** FIN COMIDA ******************************-->
<!--******************************** CENA *********************************-->
<!-- RECUADRO FRAME -->
<Frame Grid.Row="2" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0,0,0,14">
<Grid x:Name="menuDinner" RowSpacing="10" ColumnSpacing="10" VerticalOptions="FillAndExpand" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Título Cena -->
<Label Text="CENA"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="4"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
TextColor="#ffffffff"
BackgroundColor="{DynamicResource ComplementColor}">
<Label.HeightRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="30"
Android="30"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="60"
Android="60"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.HeightRequest>
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="18"
Android="18"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="24"
Android="24"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<!-- Primero Cena -->
<Label Text="1º"
Grid.Row="1"
Grid.Column="0"
Grid.RowSpan="2"
VerticalOptions="Center"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
</Label>
<!-- Primero Cena - Opc 1 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="18"
Tablet="20"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="1"
Grid.Column="1"
IsToggled="{Binding IsDinnerFirstOption1}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.DinnerFirst[0].ShortName}"
Grid.Row="1"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="1"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Primero Cena - Opc 2 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="2"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="2"
Grid.Column="1"
IsToggled="{Binding IsDinnerFirstOption2}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.DinnerFirst[1].ShortName}"
Grid.Row="2"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="2"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Cena -->
<Label Text="2º"
Grid.Row="3"
Grid.Column="0"
Grid.RowSpan="2"
VerticalOptions="Center"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="15"
Tablet="25"/>
</Label.FontSize>
</Label>
<!-- Segundo Cena - Opc 1 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="3"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="3"
Grid.Column="1"
IsToggled="{Binding IsDinnerSecondOption1}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.DinnerSecond[0].ShortName}"
Grid.Row="3"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="3"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Cena - Opc 2 -->
<Label HorizontalOptions="Fill"
VerticalOptions="Fill"
Grid.Row="4"
Grid.Column="1"
Grid.ColumnSpan="3">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Switch Grid.Row="4"
Grid.Column="1"
IsToggled="{Binding IsDinnerSecondOption2}"
VerticalOptions="Center"/>
<Label Text="{Binding CurrentDay.DinnerSecond[1].ShortName}"
Grid.Row="4"
Grid.Column="2"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="12"
Tablet="25"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="4"
Grid.Column="3"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="3,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="20"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[1]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
</Grid>
</Frame>
<!-- Recomendaciones genéricas -->
<artina:Button Command="{Binding ShowRecomendationCommand}"
Style="{DynamicResource PrimaryActionButtonStyle}"
Grid.Row = "3"
Text="RESTO DEL DIA"
VerticalOptions="CenterAndExpand"
HeightRequest="{artina:OnOrientationDouble
LandscapePhone=20,
LandscapeTablet=30 }"
HorizontalOptions="FillAndExpand"
FontSize="{artina:OnOrientationDouble
PortraitPhone=18,
LandscapePhone=18,
PortraitTablet=30,
LandscapeTablet=30 }"/>
</Grid>
<Label IsVisible="{Binding NoMenuPanel}"
VerticalOptions="CenterAndExpand"
HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center"
Text="No hay datos de menú personalizado. ¿Quizá olvidaste rellenar tu perfil?" />
</StackLayout>
</ContentPage>
\ No newline at end of file
using inutralia.Models;
using inutralia.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
[XamlCompilation (XamlCompilationOptions.Compile)]
public partial class CustomMenuView : ContentPage
{
protected CustomMenuViewModel ViewModel => BindingContext as CustomMenuViewModel;
// Labels para los botónes de los días
private static readonly string [] DayNames = new []
{
"L", "M", "X", "J", "V", "S", "D"
};
// Constructor. Añade los botones de los días
public CustomMenuView ()
{
InitializeComponent ();
BindingContext = new CustomMenuViewModel ();
for (int i = 0; i < 7; i++)
{
var b = new UXDivers.Artina.Shared.Button
{
Style = Application.Current.Resources ["SquaredButtonStyle"] as Style,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.Fill,
FontSize = 22,
Text = DayNames [i],
};
b.Clicked += OnDayClicked;
buttonList.Children.Add (b, i, 0);
}
}
/// <summary>
/// Llamado cuando cambia el contexto asociado
/// </summary>
protected override void OnBindingContextChanged ()
{
base.OnBindingContextChanged ();
// Le decimos al ViewModel que queremos ser informados cuando cambie
// cualquiera de sus propiedades
ViewModel.PropertyChanged += OnViewModelPropertyChanged;
}
/// <summary>
/// Llamado cuando cambia el valor de una propiedad del ViewModel
/// </summary>
private void OnViewModelPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
// Cuando cambia el índice del día seleccionado, cambiamos el color de los botones
if (e.PropertyName == "Index")
{
// Coger el botón seleccionado
View but = buttonList.Children [ViewModel.Index] as View;
// Poner el fondo del seleccionado a ComplementColor y el resto a AccentColor
foreach (var b in buttonList.Children)
b.BackgroundColor = (Color) Application.Current.Resources [b == but ? "ComplementColor" : "BaseTextColor"];
} //endif
}
/// <summary>
/// Llamado cuando se pulsa un botón de día
/// </summary>
private void OnDayClicked (object sender, EventArgs e)
{
// Cambiar el índice del día seleccionado al del botón
ViewModel.Index = buttonList.Children.IndexOf (sender as View);
}
/// <summary>
/// Llamado cuando esta vista se muestra
/// </summary>
protected override async void OnAppearing ()
{
base.OnAppearing ();
// Decirle al ViewModel que refresque sus datos
await ViewModel.LoadData ();
}
protected override async void OnDisappearing ()
{
base.OnDisappearing ();
await ViewModel.UpdateShoppingListAsync ();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.GenericDetailView"
x:Name="genericDetailView"
Title="{Binding Title}">
<StackLayout VerticalOptions="FillAndExpand">
<ActivityIndicator HorizontalOptions="FillAndExpand" IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}" />
<Label Text="Danos dos segundos estámos cargando tu menú personalizado..."
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"
TextColor="{DynamicResource AccentColor}"
IsVisible="{Binding IsBusy}"/>
<!-- MAIN CONTAINER -->
<Grid IsVisible="{Binding IsNotBusy}" ColumnSpacing="0" RowSpacing="10" Padding="20,20,20,20" HorizontalOptions="Fill" VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="50"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition>
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength"
Phone="50"
Tablet="80"/>
</RowDefinition.Height>
</RowDefinition>
</Grid.RowDefinitions>
<!-- Botones de acceso a cada día, se crean directamente en el código al crear la página -->
<Grid x:Name="buttonList" HorizontalOptions="Fill" VerticalOptions="Fill" ColumnSpacing="0" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
<!-- El menú del día seleccionado -->
<!--***************************** COMIDA ******************************-->
<Frame Grid.Row="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0,0,0,14">
<Grid RowSpacing="10" ColumnSpacing="10" VerticalOptions="FillAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Titulo Comida -->
<Label Text="COMIDA"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="3"
HorizontalTextAlignment="Center"
HorizontalOptions="FillAndExpand"
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
TextColor="#ffffffff"
BackgroundColor="{DynamicResource ComplementColor}">
<Label.HeightRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="30"
Android="30"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="60"
Android="60"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.HeightRequest>
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="18"
Android="18"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="27"
Android="27"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<!-- Primero Comida -->
<Label
Text="1º"
Grid.Row="1"
Grid.Column="0"
VerticalOptions="Center"
HorizontalOptions="Start"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="23"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{Binding CurrentDay.LunchFirst[0].Name}"
Grid.Row="1"
Grid.Column="1"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="5,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="17"
Tablet="36"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label
Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="1"
Grid.Column="2"
HorizontalOptions="End"
VerticalOptions="Center"
Margin="5,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Comida -->
<Label Text="2º"
Grid.Row="2"
Grid.Column="0"
VerticalOptions="Center"
HorizontalOptions="Start"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="23"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{Binding CurrentDay.LunchSecond[0].Name}"
Grid.Row="2"
Grid.Column="1"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="5,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="17"
Tablet="36"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="2"
Grid.Column="2"
HorizontalOptions="End"
VerticalOptions="Center"
Margin="5,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.LunchSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
</Grid>
</Frame>
<!--***************************** FIN COMIDA ******************************-->
<!--******************************** CENA *********************************-->
<!-- RECUADRO FRAME -->
<Frame Grid.Row="2" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0,0,0,14">
<Grid RowSpacing="10" ColumnSpacing="10" VerticalOptions="FillAndExpand" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Título Cena -->
<Label Text="CENA"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="3"
HorizontalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
VerticalTextAlignment="Center"
TextColor="#ffffffff"
BackgroundColor="{DynamicResource ComplementColor}">
<Label.HeightRequest>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="30"
Android="30"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="60"
Android="60"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.HeightRequest>
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Double"
iOS="18"
Android="18"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Double"
iOS="27"
Android="27"/>
</OnIdiom.Tablet>
</OnIdiom>
</Label.FontSize>
</Label>
<!-- Primero Cena -->
<Label
Text="1º"
Grid.Row="1"
Grid.Column="0"
VerticalOptions="Center"
HorizontalOptions="Start"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="23"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label
Text="{Binding CurrentDay.DinnerFirst[0].Name}"
Grid.Row="1"
Grid.Column="1"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="5,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="17"
Tablet="36"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label
Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="1"
Grid.Column="2"
HorizontalOptions="End"
VerticalOptions="Center"
Margin="5,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerFirst[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<!-- Segundo Cena -->
<Label Text="2º"
Grid.Row="2"
Grid.Column="0"
VerticalOptions="Center"
HorizontalOptions="Start"
Margin="10,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="23"
Tablet="40"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{Binding CurrentDay.DinnerSecond[0].Name}"
Grid.Row="2"
Grid.Column="1"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="5,0,0,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="17"
Tablet="36"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<Label Text="{ x:Static app:IoniciconsFont.Search }"
Style="{StaticResource FontIcon}"
Grid.Row="2"
Grid.Column="2"
HorizontalOptions="End"
VerticalOptions="Center"
Margin="5,0,10,0">
<Label.FontSize>
<OnIdiom x:TypeArguments="x:Double"
Phone="30"
Tablet="50"/>
</Label.FontSize>
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding ShowRecipeCommand}"
CommandParameter="{Binding CurrentDay.DinnerSecond[0]}"
NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
</Grid>
</Frame>
<!--******************************** FIN CENA *********************************-->
<!-- Recomendaciones genéricas -->
<artina:Button Command="{Binding ShowRecomendationCommand}"
Style="{DynamicResource PrimaryActionButtonStyle}"
Grid.Row = "3"
Text="RESTO DEL DIA"
VerticalOptions="FillAndExpand"
HeightRequest="{artina:OnOrientationDouble
LandscapePhone=20,
LandscapeTablet=30 }"
HorizontalOptions="FillAndExpand"
FontSize="{artina:OnOrientationDouble
PortraitPhone=18,
LandscapePhone=18,
PortraitTablet=30,
LandscapeTablet=30 }"/>
</Grid>
</StackLayout>
</ContentPage>
\ No newline at end of file
using System;
using inutralia.ViewModels;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class GenericDetailView : ContentPage
{
protected GenericDetailViewModel ViewModel => BindingContext as GenericDetailViewModel;
// Labels para los botónes de los días
private static readonly string [] DayNames = new []
{
"L", "M", "X", "J", "V", "S", "D"
};
// Constructor. Añade los botones de los días
public GenericDetailView ()
{
InitializeComponent ();
for (int i = 0; i < 7; i++)
{
var b = new UXDivers.Artina.Shared.Button
{
Style = Application.Current.Resources ["SquaredButtonStyle"] as Style,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.Fill,
FontSize = 22,
Text = DayNames [i],
};
b.Clicked += OnDayClicked;
buttonList.Children.Add (b, i, 0);
}
}
/// <summary>
/// Llamado cuando cambia el contexto asociado
/// </summary>
protected override void OnBindingContextChanged ()
{
base.OnBindingContextChanged ();
// Le decimos al ViewModel que queremos ser informados cuando cambie
// cualquiera de sus propiedades
ViewModel.PropertyChanged += OnViewModelPropertyChanged;
}
/// <summary>
/// Llamado cuando cambia el valor de una propiedad del ViewModel
/// </summary>
private void OnViewModelPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
// Cuando cambia el índice del día seleccionado, cambiamos el color de los botones
if(e.PropertyName == "Index")
{
// Coger el botón seleccionado
View but = buttonList.Children [ViewModel.Index] as View;
// Poner el fondo del seleccionado a ComplementColor y el resto a AccentColor
foreach (var b in buttonList.Children)
b.BackgroundColor = (Color) Application.Current.Resources [b == but ? "ComplementColor" : "BaseTextColor"];
} //endif
}
/// <summary>
/// Llamado cuando se pulsa un botón de día
/// </summary>
private void OnDayClicked (object sender, EventArgs e)
{
// Cambiar el índice del día seleccionado al del botón
ViewModel.Index = buttonList.Children.IndexOf (sender as View);
}
/// <summary>
/// Llamado cuando esta vista se muestra
/// </summary>
protected override async void OnAppearing()
{
base.OnAppearing();
// Decirle al ViewModel que refresque sus datos
await ViewModel.RefreshData();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.GenericListItemTemplate"
BackgroundColor="Black"
xmlns:local="clr-namespace:inutralia;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared">
<StackLayout
BackgroundColor="{Binding BackgroundColor}"
Spacing="20"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Orientation="Horizontal" >
<Grid
BackgroundColor="#33000000"
WidthRequest="80"
HorizontalOptions="Start"
VerticalOptions="FillAndExpand">
<Grid.WidthRequest>
<OnIdiom x:TypeArguments="x:Double"
Phone="80"
Tablet="100"/>
</Grid.WidthRequest>
<Label
Text="{ x:Static local:IoniciconsFont.Clipboard }"
FontSize="40"
Style="{StaticResource FontIcon}"
HorizontalOptions="Center"
VerticalOptions="Center"
TextColor="White"
/>
</Grid>
<StackLayout VerticalOptions="Center" Spacing="2">
<Label
Text="{Binding Ds}"
TextColor="{ DynamicResource InverseTextColor }" />
</StackLayout>
</StackLayout>
</ContentView>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Esta es la página con el listado de menus genericos.
Tiene una lista con las siguientes características:
- Utiliza un ViewModel (paradigma MVVM) como BindingContext
- Muestra el listado de los menús genéricos
- Actualiza el listado al deslizar hacia abajo (pull-to-refresh)
- Tiene menú contextual (slide-right en iOS, mantener pulsado en Android)
con un botón para borrar una notificación
-->
<!-- Importante: La página necesita x:Name para poder referenciarla en la descripción
de los elementos del menú contextual
-->
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:app="clr-namespace:inutralia;assembly=inutralia"
xmlns:views="clr-namespace:inutralia.Views;assembly=inutralia"
xmlns:artina="clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared"
x:Class="inutralia.Views.GenericListView"
BackgroundColor="White"
Title="Menus Saludables"
>
<StackLayout VerticalOptions="FillAndExpand">
<!-- Este es el componente para el listado. Primero configura de dónde obtiene los datos
y el método al que llamar cuando se hace tap en un elemento de la lista. Luego
configura el pull-to-refresh. Por último algunas opciones de visionado y gestión
de memoria
-->
<ListView x:Name="ListView"
ItemsSource="{Binding Generics}"
ItemTapped="ItemTapped"
VerticalOptions="FillAndExpand"
SeparatorVisibility="None"
SeparatorColor="Transparent"
Footer=""
BackgroundColor="Transparent"
CachingStrategy="RecycleElement"
HasUnevenRows="false">
<ListView.RowHeight>
<OnIdiom x:TypeArguments="x:Int32">
<OnIdiom.Phone>
<OnPlatform x:TypeArguments="x:Int32"
iOS="115"
Android="105"/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<OnPlatform x:TypeArguments="x:Int32"
iOS="163"
Android="195"/>
</OnIdiom.Tablet>
</OnIdiom>
</ListView.RowHeight>
<!-- Aquí se configura el template para cada elemento de la lista -->
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout
BackgroundColor="{Binding . , Converter={StaticResource ListBgConverter}, ConverterParameter={x:Reference ListView} }"
Spacing="20"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Orientation="Horizontal" >
<Grid
BackgroundColor="#33000000"
WidthRequest="80"
HorizontalOptions="Start"
VerticalOptions="FillAndExpand">
<Grid.WidthRequest>
<OnIdiom x:TypeArguments="x:Double"
Phone="80"
Tablet="100"/>
</Grid.WidthRequest>
<Label
Text="{ x:Static app:IoniciconsFont.IosListOutline }"
FontSize="40"
Style="{StaticResource FontIcon}"
HorizontalOptions="Center"
VerticalOptions="Center"
TextColor="White"
/>
</Grid>
<StackLayout VerticalOptions="Center" Spacing="2" >
<Label Text="{Binding Title}"
FontSize="{artina:OnOrientationDouble
PortraitPhone=18,
LandscapePhone=18,
PortraitTablet=30,
LandscapeTablet=30 }"
TextColor="{ DynamicResource InverseTextColor }" />
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
using inutralia.Models;
using inutralia.ViewModels;
using Xamarin.Forms;
namespace inutralia.Views
{
public partial class GenericListView : ContentPage
{
// Accesor al ViewModel
protected GenericListViewModel ViewModel => BindingContext as GenericListViewModel;
public GenericListView()
{
InitializeComponent();
BindingContext = new GenericListViewModel ();
}
/// <summary>
/// Método llamado al hacer tap en un elemento de la lista. Navega a la página de detalle
/// de la notificación seleccionada
/// </summary>
/// <param name="sender">La ListView</param>
/// <param name="e">Argumentos del evento</param>
void ItemTapped(object sender, ItemTappedEventArgs e)
{
// e.Item apunta a la notificación seleccionada. A partir de ella se crea su ViewModel
// y con él se crea la página de detalle y se navega a ella
Navigation.PushAsync(
new GenericDetailView()
{
BindingContext = new GenericDetailViewModel((Generic)e.Item)
}
);
// Deselecciona el item para que no le cambie el color de fondo
((ListView)sender).SelectedItem = null;
}
/// <summary>
/// Método llamado cada vez que una página pasa a ser visible
/// </summary>
protected override async void OnAppearing()
{
base.OnAppearing();
// Le decimos al ViewModel que realice la primera carga del listado
await ViewModel.ExecuteLoadGenericsCommand();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="inutralia.Views.RecomendationView"
Title="Resto del día">
<WebView
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
x:Name="webview">
<WebView.Source>
<HtmlWebViewSource Html="{Binding resume}}" />
</WebView.Source>
</WebView>
</ContentPage>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace inutralia.Views
{
[XamlCompilation (XamlCompilationOptions.Compile)]
public partial class RecomendationView : ContentPage
{
public RecomendationView ()
{
InitializeComponent ();
}
/// <summary>
/// Llamado cuando esta vista se muestra
/// </summary>
protected override async void OnAppearing()
{
base.OnAppearing();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
[{"id":1,"name":"Gupo de Alimentos","options":[{"id":2,"name":"ENSALADAS","group_id":"1"},{"id":3,"name":"VERDURAS Y HORTALIZAS","group_id":"1"},{"id":4,"name":"CREMAS","group_id":"1"},{"id":5,"name":"SOPAS","group_id":"1"},{"id":6,"name":"ARROCES","group_id":"1"},{"id":7,"name":"PASTAS","group_id":"1"},{"id":8,"name":"LEGUMBRES","group_id":"1"},{"id":9,"name":"CARNES GRASAS","group_id":"1"},{"id":10,"name":"MASAS","group_id":"1"},{"id":11,"name":"CARNES MAGRAS","group_id":"1"},{"id":12,"name":"HUEVOS","group_id":"1"},{"id":13,"name":"MARISCOS","group_id":"1"},{"id":14,"name":"PESCADOS GRASOS","group_id":"1"},{"id":15,"name":"PESCADOS MAGROS","group_id":"1"},{"id":35,"name":"OTROS CEREALES","group_id":"1"},{"id":36,"name":"OTRAS LEGUMBRES","group_id":"1"}]},{"id":2,"name":"Momento del d\u00eda","options":[{"id":26,"name":"Momento del d\u00eda COMIDA","group_id":"2"},{"id":27,"name":"Momento del d\u00eda CENA","group_id":"2"}]},{"id":3,"name":"Temporada","options":[{"id":22,"name":"Temporada VERANO","group_id":"3"},{"id":23,"name":"Temporada INVIERNO","group_id":"3"}]},{"id":5,"name":"Situaci\u00f3n","options":[{"id":16,"name":"Apto Celiaco","group_id":"5"},{"id":17,"name":"Apto Intolerante Lactosa","group_id":"5"},{"id":18,"name":"Apto Cardiovascular","group_id":"5"},{"id":34,"name":"Apto Diab\u00e9tico","group_id":"5"}]},{"id":6,"name":"Densidad Cal\u00f3rica","options":[{"id":19,"name":"Densidad cal\u00f3rica ALTA","group_id":"6"},{"id":20,"name":"Densidad cal\u00f3rica MEDIA","group_id":"6"},{"id":21,"name":"Densidad cal\u00f3rica BAJA","group_id":"6"}]},{"id":8,"name":"Alimentacion","options":[{"id":28,"name":"Apto Normal","group_id":"8"},{"id":29,"name":"Apto Vegetariano","group_id":"8"},{"id":30,"name":"Apto Vegano","group_id":"8"}]},{"id":9,"name":"Alergias","options":[{"id":31,"name":"Apto Al\u00e9rgico Pescado","group_id":"9"},{"id":32,"name":"Apto Al\u00e9rgico Huevo","group_id":"9"},{"id":33,"name":"Apto Al\u00e9rgico Frutos Secos","group_id":"9"}]}]
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.props" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<ProjectGuid>{7041522B-6406-4AA7-8C6D-8AD1661DD392}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>inutralia</RootNamespace>
<TargetFrameworkProfile>Profile78</TargetFrameworkProfile>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<AssemblyName>inutralia</AssemblyName>
<ReleaseVersion>1.5</ReleaseVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Compile Include="API\LocalDataService.cs" />
<Compile Include="Converters\ImageTransformator.cs" />
<Compile Include="Converters\AlternatingBackgroundColorConverter.cs" />
<Compile Include="Helpers\Settings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="ViewModels\Menus\CustomMenuViewModel.cs" />
<Compile Include="ViewModels\Menus\RecipeListViewModel.cs" />
<Compile Include="ViewModels\Recipes\RecipeListOptionsViewModel.cs" />
<Compile Include="ViewModels\Menus\MenuBaseViewModel.cs" />
<Compile Include="ViewModels\ModelBasedViewModel.cs" />
<Compile Include="ViewModels\Recipes\RecipeOptionGroupViewModel.cs" />
<Compile Include="ViewModels\ShoppingListViewModel.cs" />
<Compile Include="ViewModels\Trivial\TrivialListViewModel.cs" />
<Compile Include="ViewModels\Trivial\TrivialGameViewModel.cs" />
<Compile Include="Views\Article\Details\ArticleViewPage.xaml.cs">
<DependentUpon>ArticleViewPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Article\ItemList\ArticleItemTemplate.xaml.cs">
<DependentUpon>ArticleItemTemplate.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Recipe\Filters\ModalFiltersRecipe.xaml.cs">
<DependentUpon>ModalFiltersRecipe.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Recipe\ItemList\RecipeItemTemplate.xaml.cs">
<DependentUpon>RecipeItemTemplate.xaml</DependentUpon>
</Compile>
<Compile Include="ViewModels\Menus\RecipeViewModel.cs" />
<Compile Include="Views\Common\BrandBlock.xaml.cs">
<DependentUpon>BrandBlock.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\Badge.xaml.cs">
<DependentUpon>Badge.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\CircleIcon.xaml.cs">
<DependentUpon>CircleIcon.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\CustomActivityIndicator.xaml.cs">
<DependentUpon>CustomActivityIndicator.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\Rating.xaml.cs">
<DependentUpon>Rating.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Common\RoundedLabel.xaml.cs">
<DependentUpon>RoundedLabel.xaml</DependentUpon>
</Compile>
<Compile Include="Helpers\GrialShapesFont.cs" />
<Compile Include="Helpers\FontawesomeFont.cs" />
<Compile Include="Helpers\IoniciconsFont.cs" />
<Compile Include="Properties\AssemblyGlobal.cs" />
<Compile Include="Views\Navigation\WelcomeStarterPage.xaml.cs">
<DependentUpon>WelcomeStarterPage.xaml</DependentUpon>
</Compile>
<Compile Include="Themes\MyAppTheme.xaml.cs">
<DependentUpon>MyAppTheme.xaml</DependentUpon>
</Compile>
<Compile Include="Themes\GrialDarkTheme.xaml.cs">
<DependentUpon>GrialDarkTheme.xaml</DependentUpon>
</Compile>
<Compile Include="Themes\GrialLightTheme.xaml.cs">
<DependentUpon>GrialLightTheme.xaml</DependentUpon>
</Compile>
<Compile Include="Themes\GrialEnterpriseTheme.xaml.cs">
<DependentUpon>GrialEnterpriseTheme.xaml</DependentUpon>
</Compile>
<Compile Include="API\Contracts\IWebService.cs" />
<Compile Include="API\WebService.cs" />
<Compile Include="API\Constants.cs" />
<Compile Include="Converters\DateTransformator.cs" />
<Compile Include="Views\Register\RegisterConditionsView.xaml.cs">
<DependentUpon>RegisterConditionsView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ShoppingList\InfoPopup.xaml.cs">
<DependentUpon>InfoPopup.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ShoppingList\ModalAddShoppingList.xaml.cs">
<DependentUpon>ModalAddShoppingList.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ShoppingList\ListDelSuper.xaml.cs">
<DependentUpon>ListDelSuper.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ShoppingList\ShoppingListView.xaml.cs">
<DependentUpon>ShoppingListView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Trivial\TrivialGameResultTemplate.xaml.cs">
<DependentUpon>TrivialGameResultTemplate.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Trivial\TrivialGameItemTemplate.xaml.cs">
<DependentUpon>TrivialGameItemTemplate.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Trivial\TrivialGameView.xaml.cs">
<DependentUpon>TrivialGameView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Trivial\TrivialListView.xaml.cs">
<DependentUpon>TrivialListView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\WeekMenus\CustomMenus\CustomMenuView.xaml.cs">
<DependentUpon>CustomMenuView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\WeekMenus\GenericMenus\GenericDetailView.xaml.cs">
<DependentUpon>GenericDetailView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\WeekMenus\GenericMenus\GenericListView.xaml.cs">
<DependentUpon>GenericListView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Login\LoginView.xaml.cs">
<DependentUpon>LoginView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Profile\ProfileView.xaml.cs">
<DependentUpon>ProfileView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Recipe\Details\RecipeDetailView.xaml.cs">
<DependentUpon>RecipeDetailView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Register\RegisterView.xaml.cs">
<DependentUpon>RegisterView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Remember\RememberView.xaml.cs">
<DependentUpon>RememberView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Home\HomeView.xaml.cs">
<DependentUpon>HomeView.xaml</DependentUpon>
</Compile>
<Compile Include="ViewModels\BaseNavigationViewModel.cs" />
<Compile Include="ViewModels\ProfileViewModel.cs" />
<Compile Include="ViewModels\Menus\GenericDetailViewModel.cs" />
<Compile Include="ViewModels\Menus\GenericListViewModel.cs" />
<Compile Include="Views\Recipe\RecipeListView.xaml.cs">
<DependentUpon>RecipeListView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Main\MenuView.xaml.cs">
<DependentUpon>MenuView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Main\RootPage.xaml.cs">
<DependentUpon>RootPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Article\ArticleListView.xaml.cs">
<DependentUpon>ArticleListView.xaml</DependentUpon>
</Compile>
<Compile Include="ViewModels\Article\ArticleListViewModel.cs" />
<Compile Include="ViewModels\Article\ArticleDetailViewModel.cs" />
<Compile Include="Views\WeekMenus\RecomendationView.xaml.cs">
<DependentUpon>RecomendationView.xaml</DependentUpon>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<ItemGroup>
<EmbeddedResource Include="App.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\BrandBlock.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\Badge.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\CircleIcon.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\CustomActivityIndicator.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\Rating.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Common\RoundedLabel.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Navigation\WelcomeStarterPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Themes\MyAppTheme.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Themes\GrialDarkTheme.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Themes\GrialLightTheme.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Themes\GrialEnterpriseTheme.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\WeekMenus\GenericMenus\GenericDetailView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\WeekMenus\GenericMenus\GenericListView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Login\LoginView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Profile\ProfileView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Register\RegisterView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Remember\RememberView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Home\HomeView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Recipe\RecipeListView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Main\MenuView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Main\RootPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="Views\Article\ArticleListView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="filterOptions.json" />
<None Include="app.config" />
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
<None Include="SampleData.json" />
<None Include="Gorilla.json" />
</ItemGroup>
<ItemGroup>
<Folder Include="Models\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Recipe\ItemList\RecipeItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\inutralia.Models\inutralia.Models.csproj">
<Project>{60318098-AB20-44A8-8B0A-F8914C5D0ECD}</Project>
<Name>inutralia.Models</Name>
</ProjectReference>
<ProjectReference Include="..\inutralia.Abstract\inutralia.Abstractions.csproj">
<Project>{EE196AE1-7332-479F-8C2E-B7B6CAA873B0}</Project>
<Name>inutralia.Abstractions</Name>
</ProjectReference>
<ProjectReference Include="..\inutralia.Utils\inutralia.Utils.csproj">
<Project>{47ED81AD-7EB7-45B7-9AF7-7059C8CC6185}</Project>
<Name>inutralia.Utils</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Article\Details\ArticleViewPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Recipe\Details\RecipeDetailView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Article\ItemList\ArticleItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\ShoppingList\ShoppingListView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\WeekMenus\CustomMenus\CustomMenuView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\WeekMenus\RecomendationView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\ShoppingList\ModalAddShoppingList.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Trivial\TrivialListView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Trivial\TrivialGameView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Trivial\TrivialGameItemTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Recipe\Filters\ModalFiltersRecipe.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Trivial\TrivialGameResultTemplate.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\Register\RegisterConditionsView.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>
</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LegalConditions.html" />
</ItemGroup>
<ItemGroup>
<Reference Include="FFImageLoading, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\portable-win+net45+wp80+win81+wpa81\FFImageLoading.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Forms, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Forms.2.4.2.832\lib\portable-win+net45+wp80+win81+wpa81\FFImageLoading.Forms.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Platform, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.2.4.2.832\lib\portable-win+net45+wp80+win81+wpa81\FFImageLoading.Platform.dll</HintPath>
</Reference>
<Reference Include="FFImageLoading.Transformations, Version=2.4.2.832, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.FFImageLoading.Transformations.2.4.2.832\lib\portable-win+net45+wp80+win81+wpa81\FFImageLoading.Transformations.dll</HintPath>
</Reference>
<Reference Include="Lottie.Forms, Version=2.5.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Com.Airbnb.Xamarin.Forms.Lottie.2.5.4\lib\netstandard1.0\Lottie.Forms.dll</HintPath>
</Reference>
<Reference Include="MvvmHelpers, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Refractored.MvvmHelpers.1.3.0\lib\netstandard1.0\MvvmHelpers.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\portable-net45+win8+wp8+wpa81\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\portable-net45+wp80+win8+wpa81\Plugin.Settings.dll</HintPath>
</Reference>
<Reference Include="Plugin.Settings.Abstractions, Version=2.5.8.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Settings.2.5.8\lib\portable-net45+wp80+win8+wpa81\Plugin.Settings.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\portable-win+net45+wp8+win8+wpa81\Rg.Plugins.Popup.dll</HintPath>
</Reference>
<Reference Include="Rg.Plugins.Popup.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Rg.Plugins.Popup.1.0.4\lib\portable-win+net45+wp8+win8+wpa81\Rg.Plugins.Popup.Platform.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.2.0.35\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Artina.Shared.Base, Version=2.0.35.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Artina.Shared.Base.2.0.35\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.Base.dll</HintPath>
</Reference>
<Reference Include="UXDivers.Effects, Version=1.0.6558.30269, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UXDivers.Effects.0.6.3\lib\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Effects.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\netstandard1.0\Xamarin.Forms.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\netstandard1.0\Xamarin.Forms.Platform.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Forms.3.0.0.561731\lib\netstandard1.0\Xamarin.Forms.Xaml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\ShoppingList\ListDelSuper.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Views\ShoppingList\InfoPopup.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.targets'))" />
</Target>
<Import Project="..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets" Condition="Exists('..\packages\UXDivers.Artina.Shared.2.0.35\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\UXDivers.Artina.Shared.targets')" />
<Import Project="..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.561731\build\netstandard1.0\Xamarin.Forms.targets')" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Com.Airbnb.Xamarin.Forms.Lottie" version="2.5.4" targetFramework="portable45-net45+win8+wp8" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8+wp8" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable45-net45+win8+wp8" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable45-net45+win8+wp8" />
<package id="Microsoft.NETCore.Platforms" version="2.1.0" targetFramework="portable45-net45+win8+wp8" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="portable45-net45+win8+wp8" />
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="portable45-net45+win8+wp8" />
<package id="Refractored.MvvmHelpers" version="1.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="Rg.Plugins.Popup" version="1.0.4" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Collections" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Globalization" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.IO" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Linq" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Reflection" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Runtime" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Threading" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="portable45-net45+win8+wp8" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="portable45-net45+win8+wp8" />
<package id="UXDivers.Artina.Shared" version="2.0.35" targetFramework="portable45-net45+win8+wp8" />
<package id="UXDivers.Artina.Shared.Base" version="2.0.35" targetFramework="portable45-net45+win8+wp8" />
<package id="UXDivers.Effects" version="0.6.3" targetFramework="portable45-net45+win8+wp8" />
<package id="Xam.Plugins.Settings" version="2.5.8" targetFramework="portable45-net45+win8+wp8" />
<package id="Xamarin.FFImageLoading" version="2.4.2.832" targetFramework="portable45-net45+win8+wp8" />
<package id="Xamarin.FFImageLoading.Forms" version="2.4.2.832" targetFramework="portable45-net45+win8+wp8" />
<package id="Xamarin.FFImageLoading.Transformations" version="2.4.2.832" targetFramework="portable45-net45+win8+wp8" />
<package id="Xamarin.Forms" version="3.0.0.561731" targetFramework="portable45-net45+win8+wp8" />
</packages>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment