commit 1fd643022b534a38aab20287fc0e23b5efc4663d
Author: Martin Toutant <martin.toutant@inrae.fr>
Date:   Wed Aug 17 16:13:02 2022 +0200

    intern connection ok

diff --git a/TestXamConnections/TestXamConnections.Android/Connection/BluetoothConnectionService.cs b/TestXamConnections/TestXamConnections.Android/Connection/BluetoothConnectionService.cs
index c1c2a24..5cc087f 100644
--- a/TestXamConnections/TestXamConnections.Android/Connection/BluetoothConnectionService.cs
+++ b/TestXamConnections/TestXamConnections.Android/Connection/BluetoothConnectionService.cs
@@ -16,6 +16,7 @@ using System.Threading.Tasks;
 using TestXamConnections.Droid.Utils;
 using TestXamConnections.Models;
 using TestXamConnections.Connection;
+using TestXamConnections.Helper;
 
 namespace TestXamConnections.Droid.Connection
 {
@@ -34,7 +35,9 @@ namespace TestXamConnections.Droid.Connection
             bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
         }
 
-        public async Task<bool> Connect(Device btDevice)
+        // Pour le bluetooth, le paramètre de connection est l'addresse MAC
+        public EventHandler<string> ConnectionFailedEvent { get; set; }
+        public async Task Connect(Dictionary<string, string> param)
         {
             try
             {
@@ -45,41 +48,40 @@ namespace TestXamConnections.Droid.Connection
                     bluetoothAdapter.CancelDiscovery();
                 }
 
-                BluetoothDevice droidBtDevice = bluetoothAdapter.GetRemoteDevice(btDevice.MACAddress);
-                if (droidBtDevice != null)
+                if (param.ContainsKey(ConnectionConstants.MAC_ADDR_KEY))
                 {
-                    // Si le socket est occupé pour une autre connexion
-                    // On ferme la connexion existante
-                    if (socket != null)
+                    BluetoothDevice droidBtDevice = bluetoothAdapter.GetRemoteDevice(param[ConnectionConstants.MAC_ADDR_KEY]);
+                    if (droidBtDevice != null)
                     {
-                        await CloseConnection();
-                    }
+                        // Si le socket est occupé pour une autre connexion
+                        // On ferme la connexion existante
+                        if (socket != null)
+                        {
+                            await CloseConnection();
+                        }
 
-                    // Creation du canal RFCOMM (non sécurisé)
-                    socket = droidBtDevice.CreateInsecureRfcommSocketToServiceRecord(UUID.FromString(sppUUID));
+                        // Creation du canal RFCOMM (non sécurisé)
+                        socket = droidBtDevice.CreateInsecureRfcommSocketToServiceRecord(UUID.FromString(sppUUID));
 
-                    CancellationTokenSource cts = new CancellationTokenSource();
+                        CancellationTokenSource cts = new CancellationTokenSource();
 
-                    cts.CancelAfter(50000);
-                    await socket.ConnectAsync().WithCancellation(cts.Token);
+                        cts.CancelAfter(50000);
+                        await socket.ConnectAsync().WithCancellation(cts.Token);
 
-                    if (listeningThread != null)
-                    {
-                        listeningThread.Abort();
-                    }
+                        if (listeningThread != null)
+                        {
+                            listeningThread.Abort();
+                        }
 
-                    listeningThread = new Thread(async delagate => await ListeningAsync());
-                    listeningThread.Start();
-
-                    return true;
+                        listeningThread = new Thread(async delagate => await ListeningAsync());
+                        listeningThread.Start();
+                    }
                 }
             }
-            catch (Exception ex)
+            catch (Exception)
             {
-                System.Diagnostics.Debug.WriteLine(ex);
+                Application.SynchronizationContext.Post(_ => { ConnectionFailedEvent.Invoke(this, param[ConnectionConstants.MAC_ADDR_KEY]); }, null);
             }
-
-            return false;
         }
 
         public EventHandler<byte[]> DataReceivedEvent { get; set; }
@@ -135,5 +137,9 @@ namespace TestXamConnections.Droid.Connection
             return Task.FromResult(true);
         }
 
+        public Task<bool> SendCommand(string command)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections.Android/Connection/InternConnectionService.cs b/TestXamConnections/TestXamConnections.Android/Connection/InternConnectionService.cs
index d86f34a..e5e38d7 100644
--- a/TestXamConnections/TestXamConnections.Android/Connection/InternConnectionService.cs
+++ b/TestXamConnections/TestXamConnections.Android/Connection/InternConnectionService.cs
@@ -11,6 +11,8 @@ using System.Text;
 using System.Threading.Tasks;
 using TestXamConnections.Models;
 using TestXamConnections.Connection;
+using TestXamConnections.Droid.Receivers;
+using TestXamConnections.Helper;
 
 namespace TestXamConnections.Droid.Connection
 {
@@ -20,11 +22,56 @@ namespace TestXamConnections.Droid.Connection
      */
     public class InternConnectionService : IConnectionService
     {
-        public EventHandler<byte[]> DataReceivedEvent { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+        public EventHandler<byte[]> DataReceivedEvent { get; set; }
+        public EventHandler<string> ConnectionFailedEvent { get; set; }
 
-        public Task<bool> Connect(Device device)
+        private readonly IntentReceiver intentReceiver;
+        private readonly Context appContext;
+
+        /* La fonction connect dans le cas du connexion en interne
+        *  Est en fait, la configuration de l'IntentReceiver
+        */
+        public Task Connect(Dictionary<string, string> param)
         {
-            throw new NotImplementedException();
+            if (param.ContainsKey(ConnectionConstants.RECEIVABLE_INTENTS_KEY))
+            {
+                // Récupérations des intents recevable
+                List<string> intents = new List<string>();
+                intents.AddRange(param[ConnectionConstants.RECEIVABLE_INTENTS_KEY].Split(","));
+                // Ajout des intents recevable au IntentFilter
+                IntentFilter intentFilter = new IntentFilter();
+                intents.ForEach(intent => intentFilter.AddAction(intent));
+
+                appContext.RegisterReceiver(intentReceiver, intentFilter);
+            } else
+            {
+                ConnectionFailedEvent.Invoke(this, null);
+            }
+            return null;
+        }
+
+        public Task<bool> SendCommand(string command)
+        {
+            Intent launchIntent = appContext.PackageManager.GetLaunchIntentForPackage(command);
+            if (launchIntent != null)
+            {
+                appContext.StartActivity(launchIntent);
+                return Task.FromResult(true);
+            }
+            return Task.FromResult(false);
+        }
+
+        public InternConnectionService()
+        {
+            intentReceiver = new IntentReceiver();
+            intentReceiver.OnInternDataReceived += OnInternDataReceived;
+            IntentFilter intentFilter = new IntentFilter();
+            appContext = Application.Context.ApplicationContext;
+        }
+
+        private void OnInternDataReceived(object sender, string value)
+        {
+            DataReceivedEvent.Invoke(this, new byte[] { 0x06 });
         }
 
         public Task<bool> SendCommand(byte[] hexValues)
diff --git a/TestXamConnections/TestXamConnections.Android/Connection/WifiConnectionService.cs b/TestXamConnections/TestXamConnections.Android/Connection/WifiConnectionService.cs
index fcd942b..6f98bc7 100644
--- a/TestXamConnections/TestXamConnections.Android/Connection/WifiConnectionService.cs
+++ b/TestXamConnections/TestXamConnections.Android/Connection/WifiConnectionService.cs
@@ -20,8 +20,9 @@ namespace TestXamConnections.Droid.Connection
     public class WifiConnectionService : IConnectionService
     {
         public EventHandler<byte[]> DataReceivedEvent { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+        public EventHandler<string> ConnectionFailedEvent { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
 
-        public Task<bool> Connect(Device device)
+        public Task<bool> Connect(Dictionary<string, string> connectParam)
         {
             throw new NotImplementedException();
         }
@@ -30,5 +31,10 @@ namespace TestXamConnections.Droid.Connection
         {
             throw new NotImplementedException();
         }
+
+        public Task<bool> SendCommand(string command)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections.Android/Helper/ConnectionServiceProvider.cs b/TestXamConnections/TestXamConnections.Android/Helper/ConnectionServiceProvider.cs
index 710ff1c..b345630 100644
--- a/TestXamConnections/TestXamConnections.Android/Helper/ConnectionServiceProvider.cs
+++ b/TestXamConnections/TestXamConnections.Android/Helper/ConnectionServiceProvider.cs
@@ -34,7 +34,7 @@ namespace TestBLE.Droid.Helper
                     break;
 
                 case ConnectionType.Wifi:
-                    instance = new WifiConnectionService ();
+                    instance = new WifiConnectionService();
                     break;
 
                 default:
diff --git a/TestXamConnections/TestXamConnections.Android/MainActivity.cs b/TestXamConnections/TestXamConnections.Android/MainActivity.cs
index f14899b..b656de0 100644
--- a/TestXamConnections/TestXamConnections.Android/MainActivity.cs
+++ b/TestXamConnections/TestXamConnections.Android/MainActivity.cs
@@ -14,7 +14,7 @@ using TestXamConnections.Droid.Services;
 
 namespace TestXamConnections.Droid
 {
-    [Activity(Label = "TestXamConnections", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
+    [Activity(Label = "TestXamConnections", Icon = "@mipmap/myicon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
     public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
     {
         protected override void OnCreate(Bundle savedInstanceState)
diff --git a/TestXamConnections/TestXamConnections.Android/Properties/AndroidManifest.xml b/TestXamConnections/TestXamConnections.Android/Properties/AndroidManifest.xml
index fa3d677..7fef93b 100644
--- a/TestXamConnections/TestXamConnections.Android/Properties/AndroidManifest.xml
+++ b/TestXamConnections/TestXamConnections.Android/Properties/AndroidManifest.xml
@@ -1,7 +1,7 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.testble" android:installLocation="auto">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.testxamconnections" android:installLocation="auto">
 	<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
-	<application android:label="TestBLE.Android" android:theme="@style/MainTheme"></application>
+	<application android:label="TestXamConnections.Android" android:theme="@style/MainTheme"></application>
 	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/TestXamConnections/TestXamConnections.Android/Receivers/IntentReceiver.cs b/TestXamConnections/TestXamConnections.Android/Receivers/IntentReceiver.cs
new file mode 100644
index 0000000..705ff76
--- /dev/null
+++ b/TestXamConnections/TestXamConnections.Android/Receivers/IntentReceiver.cs
@@ -0,0 +1,28 @@
+﻿using Android.App;
+using Android.Content;
+using Android.OS;
+using Android.Runtime;
+using Android.Views;
+using Android.Widget;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TestXamConnections.Droid.Receivers
+{
+    public class IntentReceiver : BroadcastReceiver
+    {
+
+        public EventHandler<string> OnInternDataReceived;
+
+        public override void OnReceive(Context context, Intent intent)
+        {
+            StringBuilder sb = new StringBuilder();
+            sb.Append("Action:  " + intent.Action + "\n");
+            sb.Append("URI: " + intent.ToUri(IntentUriType.Scheme).ToString() + "\n");
+            string log = sb.ToString();
+            OnInternDataReceived.Invoke(this, log);
+        }
+    }
+}
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections.Android/Resources/Resource.designer.cs b/TestXamConnections/TestXamConnections.Android/Resources/Resource.designer.cs
index 2f9238c..ec227b7 100644
--- a/TestXamConnections/TestXamConnections.Android/Resources/Resource.designer.cs
+++ b/TestXamConnections/TestXamConnections.Android/Resources/Resource.designer.cs
@@ -20565,6 +20565,9 @@ namespace TestBLE.Droid
 			// aapt resource value: 0x7F0C0002
 			public const int launcher_foreground = 2131492866;
 			
+			// aapt resource value: 0x7F0C0003
+			public const int myicon = 2131492867;
+			
 			static Mipmap()
 			{
 				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
diff --git a/TestXamConnections/TestXamConnections.Android/Resources/mipmap-anydpi-v26/icon_round.xml b/TestXamConnections/TestXamConnections.Android/Resources/mipmap-anydpi-v26/icon_round.xml
index 88d1d0a..2c1f969 100644
--- a/TestXamConnections/TestXamConnections.Android/Resources/mipmap-anydpi-v26/icon_round.xml
+++ b/TestXamConnections/TestXamConnections.Android/Resources/mipmap-anydpi-v26/icon_round.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
     <background android:drawable="@color/launcher_background" />
-    <foreground android:drawable="@mipmap/launcher_foreground" />
+    <foreground android:drawable="@mipmap/myicon" />
 </adaptive-icon>
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections.Android/Resources/mipmap-hdpi/myicon.png b/TestXamConnections/TestXamConnections.Android/Resources/mipmap-hdpi/myicon.png
new file mode 100644
index 0000000..0d175e7
Binary files /dev/null and b/TestXamConnections/TestXamConnections.Android/Resources/mipmap-hdpi/myicon.png differ
diff --git a/TestXamConnections/TestXamConnections.Android/TestXamConnections.Android.csproj b/TestXamConnections/TestXamConnections.Android/TestXamConnections.Android.csproj
index 8ca4915..0ee046b 100644
--- a/TestXamConnections/TestXamConnections.Android/TestXamConnections.Android.csproj
+++ b/TestXamConnections/TestXamConnections.Android/TestXamConnections.Android.csproj
@@ -68,6 +68,7 @@
     <Compile Include="Connection\WifiConnectionService.cs" />
     <Compile Include="MainActivity.cs" />
     <Compile Include="Receivers\BluetoothReceiver.cs" />
+    <Compile Include="Receivers\IntentReceiver.cs" />
     <Compile Include="Resources\Resource.designer.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Services\BluetoothService.cs" />
@@ -103,5 +104,8 @@
       <Name>TestXamConnections</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <AndroidResource Include="Resources\mipmap-hdpi\myicon.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections/Connection/IConnectionService.cs b/TestXamConnections/TestXamConnections/Connection/IConnectionService.cs
index 7a1f049..5812c16 100644
--- a/TestXamConnections/TestXamConnections/Connection/IConnectionService.cs
+++ b/TestXamConnections/TestXamConnections/Connection/IConnectionService.cs
@@ -9,8 +9,31 @@ namespace TestXamConnections.Connection
 {
     public interface IConnectionService
     {
-        Task<bool> Connect(Device device);
+        /* Fonction de connexion à la fonctionnalité cible
+         * connectParam : paramètre de connection
+         * Pour Bluetooth, addresse MAC
+         * Pour connexion interne, les intents recevables
+         * --> Ajout à un IntentFilter
+         * Déclenche ConnectionFailedEvent si la connection échoue
+         */
+        Task Connect(Dictionary<string, string> connectParam);
+
+        /*
+         * Fonction d'envoi de commande
+         * byte[] pour le bluetooth
+         * string pour intern
+         * Retourne True si la commande s'est bien envoyée
+         */
         Task<bool> SendCommand(byte[] hexValues);
+        Task<bool> SendCommand(string command);
+
+        /* Evenement déclenché à la reception de données
+         * Renvoi les données sur forme d'un tableau d'octets
+         */
         EventHandler<byte[]> DataReceivedEvent { get; set; }
+
+        /* Evenement déclenché quand la connexion échoue
+         */
+        EventHandler<string> ConnectionFailedEvent { get; set; }
     }
 }
diff --git a/TestXamConnections/TestXamConnections/Helper/ConnectionConstants.cs b/TestXamConnections/TestXamConnections/Helper/ConnectionConstants.cs
new file mode 100644
index 0000000..aafa114
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/Helper/ConnectionConstants.cs
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TestXamConnections.Helper
+{
+    public static class ConnectionConstants
+    {
+        public static readonly string MAC_ADDR_KEY = "mac_address";
+        public static readonly string LAUNCH_INTENT_KEY = "launch_intent";
+        public static readonly string RECEIVABLE_INTENTS_KEY = "receivable_intents";
+
+    }
+}
diff --git a/TestXamConnections/TestXamConnections/MainPage.xaml b/TestXamConnections/TestXamConnections/MainPage.xaml
deleted file mode 100644
index 65fc692..0000000
--- a/TestXamConnections/TestXamConnections/MainPage.xaml
+++ /dev/null
@@ -1,24 +0,0 @@
-﻿<?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="TestXamConnections.MainPage">
-
-    <StackLayout>
-        <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
-            <Label Text="Welcome to Xamarin.Forms!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
-        </Frame>
-        <Label Text="Start developing now" FontSize="Title" Padding="30,10,30,10"/>
-        <Label Text="Make changes to your XAML file and save to see your UI update in the running app with XAML Hot Reload. Give it a try!" FontSize="16" Padding="30,0,30,0"/>
-        <Label FontSize="16" Padding="30,24,30,0">
-            <Label.FormattedText>
-                <FormattedString>
-                    <FormattedString.Spans>
-                        <Span Text="Learn more at "/>
-                        <Span Text="https://aka.ms/xamarin-quickstart" FontAttributes="Bold"/>
-                    </FormattedString.Spans>
-                </FormattedString>
-            </Label.FormattedText>
-        </Label>
-    </StackLayout>
-
-</ContentPage>
diff --git a/TestXamConnections/TestXamConnections/MainPage.xaml.cs b/TestXamConnections/TestXamConnections/MainPage.xaml.cs
deleted file mode 100644
index 3962d14..0000000
--- a/TestXamConnections/TestXamConnections/MainPage.xaml.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Xamarin.Forms;
-
-namespace TestXamConnections
-{
-    public partial class MainPage : ContentPage
-    {
-        public MainPage()
-        {
-            InitializeComponent();
-        }
-    }
-}
diff --git a/TestXamConnections/TestXamConnections/Models/AgridentReader.cs b/TestXamConnections/TestXamConnections/Models/AgridentReader.cs
new file mode 100644
index 0000000..cb753a9
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/Models/AgridentReader.cs
@@ -0,0 +1,84 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using TestXamConnections.Connection;
+using TestXamConnections.Helper;
+using Xamarin.Forms;
+
+namespace TestXamConnections.Models
+{
+    public class AgridentConstants
+    {
+        public const string ACTION_AGRIDENT_SUCCESS = "fr.coppernic.intent.agridentsuccess";
+        public const string ACTION_AGRIDENT_ERROR = "fr.coppernic.intent.agridentfailed";
+        public const string ACTION_AGRIDENT_SERVICE_STOP = "fr.coppernic.intent.action.stop.agrident.service";
+        public const string ACTION_AGRIDENT_SERVICE_START = "fr.coppernic.intent.action.start.agrident.service";
+        public const string ACTION_AGRIDENT_READ = "fr.coppernic.tools.agrident.wedge.READ";
+        public const string KEY_BARCODE_DATA = "BarcodeData";
+        public const string AGRIDENT_WEDGE = "fr.coppernic.tools.cpcagridentwedge";
+    }
+
+    public class AgridentReader
+    {
+
+        private IConnectionService ConnectionService { get; set; }
+        public EventHandler<string> AgridentDataReceivedEvent { get; set; }
+        public EventHandler<string> AgridentNORFIDEvent { get; set; }
+
+        public AgridentReader()
+        {
+            ConnectionService = DependencyService.Get<IConnectionServiceProvider>().GetConnectionInstance(ConnectionType.Intern);
+            ConnectionService.DataReceivedEvent += (s, args) => AgridentDataReceived(args);
+        }
+
+        ~AgridentReader()
+        {
+            ConnectionService.DataReceivedEvent -= (s, args) => AgridentDataReceived(args);
+        }
+
+        /* Fonction déclenchée à la reception de données Agrident
+         * Trigger l'évènement AgridentDataReceivedEvent
+         */
+        private void AgridentDataReceived(byte[] args)
+        { 
+            // Si pas de valeur scannée
+            // Evenement error
+            if (args[0] == 0x6)
+            {
+                AgridentNORFIDEvent.Invoke(this, null);
+            } 
+            // Sinon c'est une valeur rfid
+            else
+            {
+                AgridentDataReceivedEvent.Invoke(this, Encoding.ASCII.GetString(args));
+            }
+        }
+
+        public async Task<bool> EnableService()
+        {
+            // Enregistrement des intents recevable par Agrident
+            List<string> intentsList = new List<string>()
+            {
+                AgridentConstants.ACTION_AGRIDENT_SUCCESS,
+                AgridentConstants.ACTION_AGRIDENT_ERROR
+            };
+            string intents = string.Join(',', intentsList);
+
+            // Encapuslation des intents recevables pour envoyer au service de connexion
+            Dictionary<string, string> param = new Dictionary<string, string>()
+            {
+                { ConnectionConstants.RECEIVABLE_INTENTS_KEY, intents }
+            };
+
+            await ConnectionService.Connect(param);
+            return true;
+        }
+
+        public async Task<bool> StartScan()
+        {
+            return await ConnectionService.SendCommand(AgridentConstants.AGRIDENT_WEDGE);
+        }
+
+    }
+}
diff --git a/TestXamConnections/TestXamConnections/Models/TeoBalance.cs b/TestXamConnections/TestXamConnections/Models/TeoBalance.cs
index 2f92bea..c4f8d4c 100644
--- a/TestXamConnections/TestXamConnections/Models/TeoBalance.cs
+++ b/TestXamConnections/TestXamConnections/Models/TeoBalance.cs
@@ -30,9 +30,10 @@ namespace TestXamConnections.Models
 
     public class TeoBalance : Device
     {
-        public IConnectionService ConnectionService { get; set; }
+        private IConnectionService ConnectionService { get; set; }
         public EventHandler<string> TeoDataReceivedEvent { get; set; }
         public EventHandler<ReponsePesee> TeoPeseeReceivedEvent { get; set; }
+        public EventHandler TeoConnectionFailedEvent { get; set; }
 
         public TeoBalance(Device device)
         {
@@ -40,11 +41,13 @@ namespace TestXamConnections.Models
             MACAddress = device.MACAddress;
             ConnectionService = DependencyService.Get<IConnectionServiceProvider>().GetConnectionInstance(ConnectionType.Bluetooth);
             ConnectionService.DataReceivedEvent += (s, args) => TeoDataReceived(args);
+            ConnectionService.ConnectionFailedEvent += TeoConnectionFailed;
         }
 
         ~TeoBalance()
         {
             ConnectionService.DataReceivedEvent -= (s, args) => TeoDataReceived(args);
+            ConnectionService.ConnectionFailedEvent -= TeoConnectionFailed;
         }
 
         /* 
@@ -56,7 +59,14 @@ namespace TestXamConnections.Models
          * nommé _bufferedData
          */
         private string _bufferedData;
+        
+        // Fonction appelée si la connexion échoue
+        private void TeoConnectionFailed(object sender, string e)
+        {
+            TeoConnectionFailedEvent.Invoke(this, null) ;
+        }
 
+        // Fonction appelée lors de la reception de données par le ConnectionService
         private void TeoDataReceived(byte[] buffer)
         {
             // Si le premier character est 2 (ASCII: STX)
@@ -100,6 +110,23 @@ namespace TestXamConnections.Models
             }
         }
 
+        // Connexion à l'appareil en fonction de son addr MAC
+        public async Task<bool> ConnectToTeoAsync()
+        {
+            Dictionary<string, string> param = new Dictionary<string, string>()
+            {
+                { ConnectionConstants.MAC_ADDR_KEY, MACAddress }
+            };
+            await ConnectionService.Connect(param);
+            return true;
+        }
+
+        // Envoi d'une commande passée en argument
+        public async Task<bool> SendTeoCommand(TeoCommandType c)
+        {
+            return await ConnectionService.SendCommand(GetCommandCode(c));
+        }
+
         // Retourne la chaine d'octets d'une commande Teo (prog INRAE)
         public static byte[] GetCommandCode(TeoCommandType c)
         {
diff --git a/TestXamConnections/TestXamConnections/TestXamConnections.csproj b/TestXamConnections/TestXamConnections/TestXamConnections.csproj
index 12f0aec..274a433 100644
--- a/TestXamConnections/TestXamConnections/TestXamConnections.csproj
+++ b/TestXamConnections/TestXamConnections/TestXamConnections.csproj
@@ -31,6 +31,9 @@
     <EmbeddedResource Update="Views\AccueilView.xaml">
       <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
     </EmbeddedResource>
+    <EmbeddedResource Update="Views\InternServiceView.xaml">
+      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
+    </EmbeddedResource>
     <EmbeddedResource Update="Views\TeoDeviceView.xaml">
       <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
     </EmbeddedResource>
diff --git a/TestXamConnections/TestXamConnections/ViewModels/AccueilViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/AccueilViewModel.cs
index 5b083fb..f6e5e3d 100644
--- a/TestXamConnections/TestXamConnections/ViewModels/AccueilViewModel.cs
+++ b/TestXamConnections/TestXamConnections/ViewModels/AccueilViewModel.cs
@@ -9,6 +9,7 @@ using TestXamConnections.Connection;
 using TestXamConnections.Helper;
 using TestXamConnections.Models;
 using TestXamConnections.Services;
+using TestXamConnections.Views;
 using Xamarin.Essentials;
 using Xamarin.Forms;
 
@@ -68,7 +69,14 @@ namespace TestXamConnections.ViewModels
         {
             await CheckAndRequestLocationPermission();
         }
-        
+
+        public async Task NavigateToInternService()
+        {
+            await Application.Current.MainPage.Navigation.PushAsync(new InternServiceView());
+        }
+
+        public ICommand NavigateToInternServiceCommand { private set; get; }
+
         // *** CTOR ***
         public AccueilViewModel()
         {
@@ -76,6 +84,7 @@ namespace TestXamConnections.ViewModels
             LoadBondedDevicesCommand = new Command(() => LoadBondedDevices());
             BondedDevicesList = new ObservableCollection<DeviceItemViewModel>();
             ShowBondedDevices = false;
+            NavigateToInternServiceCommand = new Command(async () => await NavigateToInternService());
         }
     }
 }
diff --git a/TestXamConnections/TestXamConnections/ViewModels/CommandItemViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/CommandItemViewModel.cs
index b58dda4..7acf651 100644
--- a/TestXamConnections/TestXamConnections/ViewModels/CommandItemViewModel.cs
+++ b/TestXamConnections/TestXamConnections/ViewModels/CommandItemViewModel.cs
@@ -12,7 +12,6 @@ namespace TestXamConnections.ViewModels
     {
         private string name;
         private TeoCommandType toSendCommand;
-        private IConnectionService ConnectionService;
         private string commandBytes;
 
         public string CommandBytes
@@ -33,21 +32,11 @@ namespace TestXamConnections.ViewModels
             set { SetProperty( ref toSendCommand, value); }
         }
 
-        private async Task<bool> SendValue()
-        {
-            await ConnectionService.SendCommand(TeoBalance.GetCommandCode(ToSendCommand));
-            return true;
-        }
-
-        public ICommand SendValueCommand { private set; get; }
-
-        public CommandItemViewModel(TeoCommandType cmd, IConnectionService cs)
+        public CommandItemViewModel(TeoCommandType cmd)
         {
             ToSendCommand = cmd;
-            ConnectionService = cs;
             Name = TeoBalance.GetCommandName(cmd);
             CommandBytes = string.Join("-", TeoBalance.GetCommandCode(cmd));
-            SendValueCommand = new Command(async () => await SendValue());
         }
 
     }
diff --git a/TestXamConnections/TestXamConnections/ViewModels/DeviceItemViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/DeviceItemViewModel.cs
index 1d1c3da..39b6ca9 100644
--- a/TestXamConnections/TestXamConnections/ViewModels/DeviceItemViewModel.cs
+++ b/TestXamConnections/TestXamConnections/ViewModels/DeviceItemViewModel.cs
@@ -24,7 +24,11 @@ namespace TestXamConnections.ViewModels
 
         private async Task NavigateToDevice()
         {
-            await Application.Current.MainPage.Navigation.PushAsync(new TeoDeviceView(Device));
+            // Si c'est le teo du bureau
+            if (Device.MACAddress == "60:A4:23:EB:FB:5C")
+            {
+                await Application.Current.MainPage.Navigation.PushAsync(new TeoDeviceView(Device));
+            }
         }
 
         public ICommand NavigateToDeviceViewCommand { private set; get; }
diff --git a/TestXamConnections/TestXamConnections/ViewModels/DeviceViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/DeviceViewModel.cs
deleted file mode 100644
index aa6f26b..0000000
--- a/TestXamConnections/TestXamConnections/ViewModels/DeviceViewModel.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Input;
-using TestXamConnections.Connection;
-using TestXamConnections.Helper;
-using TestXamConnections.Models;
-using TestXamConnections.Services;
-using Xamarin.Forms;
-using static TestXamConnections.Models.TeoBalance;
-
-namespace TestXamConnections.ViewModels
-{
-    public class TeoDeviceViewModel : ViewModelBase
-    {
-        private bool isConnected;
-        private string data;
-        private TeoBalance teoScale;
-
-        private bool isVisibleData;
-
-        public bool IsVisibleData
-        {
-            get { return isVisibleData; }
-            set { SetProperty(ref isVisibleData, value); }
-        }
-
-        public bool IsConnected
-        {
-            get { return isConnected; }
-            set { SetProperty(ref isConnected, value); }
-        }
-
-        public TeoBalance TeoScale
-        {
-            get { return teoScale; }
-            set { SetProperty(ref teoScale, value); }
-        }
-
-        public string Data
-        {
-            get { return data; }
-            set { SetProperty(ref data, value); }
-        }
-        
-        public ObservableCollection<CommandItemViewModel> AvailableCommandsList { get; set; }
-
-        public async Task<bool> ConnectToDevice()
-        {
-            IsConnected = await teoScale.ConnectionService.Connect(TeoScale);
-            return IsConnected;
-        }
-
-        public void DataReceived(string args)
-        {
-            IsVisibleData = true;
-            Data += args.Trim() + "\n";
-        }
-
-        public void PeseeReceived(ReponsePesee args)
-        {
-            Data = args.PoidsMesure;
-        }
-
-        public ICommand ConnectToDeviceCommand { private set; get; }
-
-        public TeoDeviceViewModel(Models.Device device)
-        {
-            TeoScale = new TeoBalance(device);
-            IsConnected = false;
-            IsVisibleData = false;
-            ConnectToDeviceCommand = new Command(async () => await ConnectToDevice());
-            TeoScale.TeoDataReceivedEvent = (s, args) => DataReceived(args);
-            TeoScale.TeoPeseeReceivedEvent = (s, args) => PeseeReceived(args);
-
-            // Ajout manuel des commandes
-            AvailableCommandsList = new ObservableCollection<CommandItemViewModel>();
-            foreach (TeoCommandType _cmd in Enum.GetValues(typeof(TeoCommandType)))
-            {
-                AvailableCommandsList.Add(new CommandItemViewModel(_cmd, TeoScale.ConnectionService));
-            }
-        }
-
-        
-
-    }
-}
diff --git a/TestXamConnections/TestXamConnections/ViewModels/InternServiceViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/InternServiceViewModel.cs
new file mode 100644
index 0000000..7f8abe2
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/ViewModels/InternServiceViewModel.cs
@@ -0,0 +1,78 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using TestXamConnections.Models;
+using Xamarin.Forms;
+
+namespace TestXamConnections.ViewModels
+{
+    public class InternServiceViewModel : ViewModelBase
+    {
+        private bool showRFID;
+        private bool showError;
+        private AgridentReader agridentReader;
+        private string rfidResult;
+        private string errorMessage;
+
+        public bool ShowRFID
+        {
+            get { return showRFID; }
+            set { SetProperty(ref showRFID, value); }
+        }
+
+        public bool ShowError
+        {
+            get { return showError; }
+            set { SetProperty( ref showError, value); }
+        }
+
+        public string RFIDResult
+        {
+            get { return rfidResult; }
+            set { SetProperty(ref rfidResult, value); }
+        }
+
+        public string ErrorMessage
+        {
+            get { return errorMessage; }
+            set { SetProperty(ref errorMessage, value); }
+        }
+
+        private async Task StartScan()
+        {
+            ShowError = false;
+            ShowRFID = false;
+            if (await agridentReader.StartScan() == false)
+            {
+                ErrorMessage = "Echec du Scan RFID";
+            }
+        }
+
+        public ICommand StartScanCommand { private set; get; }
+
+        public InternServiceViewModel()
+        {
+            ShowRFID = false;
+            ShowError = false;
+            agridentReader = new AgridentReader();
+            agridentReader.EnableService().Wait();
+            agridentReader.AgridentDataReceivedEvent += OnRFIDResultReceived;
+            agridentReader.AgridentNORFIDEvent += OnNoRFIDReceived;
+            StartScanCommand = new Command(async () => await StartScan());
+        }
+
+        private void OnNoRFIDReceived(object sender, string e)
+        {
+            ShowError = true;
+            ErrorMessage = "Pas de TAG RFID detecté";
+        }
+
+        private void OnRFIDResultReceived(object sender, string e)
+        {
+            ShowRFID = true;
+            RFIDResult = e;
+        }
+    }
+}
diff --git a/TestXamConnections/TestXamConnections/ViewModels/TeoDeviceViewModel.cs b/TestXamConnections/TestXamConnections/ViewModels/TeoDeviceViewModel.cs
new file mode 100644
index 0000000..7bfaae5
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/ViewModels/TeoDeviceViewModel.cs
@@ -0,0 +1,116 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using TestXamConnections.Connection;
+using TestXamConnections.Helper;
+using TestXamConnections.Models;
+using TestXamConnections.Services;
+using Xamarin.Forms;
+using static TestXamConnections.Models.TeoBalance;
+
+namespace TestXamConnections.ViewModels
+{
+    public class TeoDeviceViewModel : ViewModelBase
+    {
+        private bool isConnected;
+        private string data;
+        private TeoBalance teoScale;
+        private bool isVisibleData;
+        private bool showError;
+        private string errorMessage;
+
+        public bool IsVisibleData
+        {
+            get { return isVisibleData; }
+            set { SetProperty(ref isVisibleData, value); }
+        }
+
+        public bool IsConnected
+        {
+            get { return isConnected; }
+            set { SetProperty(ref isConnected, value); }
+        }
+
+        public TeoBalance TeoScale
+        {
+            get { return teoScale; }
+            set { SetProperty(ref teoScale, value); }
+        }
+
+        public string Data
+        {
+            get { return data; }
+            set { SetProperty(ref data, value); }
+        }
+
+        public bool ShowError
+        {
+            get { return showError; }
+            set { SetProperty(ref showError, value); }
+        }
+
+        public string ErrorMessage
+        {
+            get { return errorMessage; }
+            set { SetProperty(ref errorMessage, value); }
+        }
+
+        public ObservableCollection<CommandItemViewModel> AvailableCommandsList { get; set; }
+
+        public async Task<bool> ConnectToDevice()
+        {
+            ShowError = false;
+            IsConnected = await teoScale.ConnectToTeoAsync();
+            return IsConnected;
+        }
+
+        public async Task<bool> SendValue(TeoCommandType cmd)
+        {
+            return await teoScale.SendTeoCommand(cmd);
+        }
+
+        public ICommand ConnectToDeviceCommand { private set; get; }
+        public ICommand SendValueCommand { private set; get; }
+
+        public TeoDeviceViewModel(Models.Device device)
+        {
+            TeoScale = new TeoBalance(device);
+            ShowError = false;
+            IsConnected = false;
+            IsVisibleData = false;
+            ConnectToDeviceCommand = new Command(async () => await ConnectToDevice());
+            SendValueCommand = new Command(async (cmd) => await teoScale.SendTeoCommand((TeoCommandType)cmd));
+            TeoScale.TeoDataReceivedEvent = (s, args) => DataReceived(args);
+            TeoScale.TeoPeseeReceivedEvent = (s, args) => PeseeReceived(args);
+            TeoScale.TeoConnectionFailedEvent = ConnectionFailed;
+
+            // Ajout manuel des commandes
+            AvailableCommandsList = new ObservableCollection<CommandItemViewModel>();
+            foreach (TeoCommandType _cmd in Enum.GetValues(typeof(TeoCommandType)))
+            {
+                AvailableCommandsList.Add(new CommandItemViewModel(_cmd));
+            }
+        }
+
+        private void ConnectionFailed(object sender, EventArgs e)
+        {
+            IsConnected = false;
+            ShowError = true;
+            ErrorMessage = "La connexion a échoué";
+        }
+
+        public void DataReceived(string args)
+        {
+            IsVisibleData = true;
+            Data += args.Trim() + "\n";
+        }
+
+        public void PeseeReceived(ReponsePesee args)
+        {
+            Data = args.PoidsMesure;
+        }
+    }
+}
diff --git a/TestXamConnections/TestXamConnections/Views/AccueilView.xaml b/TestXamConnections/TestXamConnections/Views/AccueilView.xaml
index 676f275..9f756b5 100644
--- a/TestXamConnections/TestXamConnections/Views/AccueilView.xaml
+++ b/TestXamConnections/TestXamConnections/Views/AccueilView.xaml
@@ -4,8 +4,9 @@
     xmlns="http://xamarin.com/schemas/2014/forms"
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
     xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects"
-    Title="Teo Test Bluetooth - Bienvenue">
+    Title="TestXamConnection">
     <ContentPage.Content>
+
         <StackLayout BackgroundColor="#001729" VerticalOptions="FillAndExpand">
             <StackLayout VerticalOptions="CenterAndExpand">
                 <Frame
@@ -107,7 +108,26 @@
 
                     </StackLayout>
                 </Frame>
+
+                <xe:BorderView
+                    Margin="0,20,0,0"
+                    xe:Commands.Tap="{Binding NavigateToInternServiceCommand}"
+                    xe:TouchEffect.Color="#0060a8"
+                    BackgroundColor="#003266"
+                    CornerRadius="65"
+                    HorizontalOptions="Center">
+                    <StackLayout Padding="15,10">
+                        <Label
+                            FontSize="16"
+                            HorizontalOptions="Center"
+                            HorizontalTextAlignment="Center"
+                            Text="Service interne"
+                            TextColor="#34a9ff" />
+                    </StackLayout>
+                </xe:BorderView>
+
             </StackLayout>
         </StackLayout>
+
     </ContentPage.Content>
 </ContentPage>
diff --git a/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml b/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml
new file mode 100644
index 0000000..3026686
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml
@@ -0,0 +1,96 @@
+﻿<?xml version="1.0" encoding="UTF-8" ?>
+<ContentPage
+    x:Class="TestXamConnections.Views.InternServiceView"
+    xmlns="http://xamarin.com/schemas/2014/forms"
+    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+    xmlns:xe="clr-namespace:XamEffects;assembly=XamEffects">
+    <ContentPage.Content>
+
+        <StackLayout BackgroundColor="#001729" VerticalOptions="FillAndExpand">
+            <StackLayout VerticalOptions="CenterAndExpand">
+
+                <xe:BorderView
+                    Margin="0,20,0,0"
+                    xe:Commands.Tap="{Binding StartScanCommand}"
+                    xe:TouchEffect.Color="#0060a8"
+                    BackgroundColor="#003266"
+                    CornerRadius="65"
+                    HorizontalOptions="Center">
+                    <StackLayout Padding="15,10">
+                        <Label
+                            FontSize="16"
+                            HorizontalOptions="Center"
+                            HorizontalTextAlignment="Center"
+                            Text="Scan RFID"
+                            TextColor="#34a9ff" />
+                    </StackLayout>
+                </xe:BorderView>
+
+                <Frame
+                    Padding="0"
+                    BackgroundColor="Transparent"
+                    BorderColor="#4f5a64"
+                    CornerRadius="5"
+                    HasShadow="False"
+                    HorizontalOptions="Center"
+                    IsVisible="{Binding ShowRFID}"
+                    VerticalOptions="CenterAndExpand"
+                    WidthRequest="200">
+                    <StackLayout Spacing="0">
+                        <Label
+                            Margin="15"
+                            FontSize="15"
+                            HorizontalTextAlignment="Center"
+                            Text="RFID Scanné"
+                            TextColor="#34a9ff" />
+
+                        <BoxView
+                            HeightRequest="1"
+                            HorizontalOptions="FillAndExpand"
+                            Color="#4f5a64" />
+
+                        <Label
+                            FontAttributes="Bold"
+                            HorizontalTextAlignment="Center"
+                            Text="{Binding RFIDResult}"
+                            TextColor="White" />
+                    </StackLayout>
+                </Frame>
+
+                <Frame
+                    Padding="0"
+                    BackgroundColor="Transparent"
+                    BorderColor="#4f5a64"
+                    CornerRadius="5"
+                    HasShadow="False"
+                    HorizontalOptions="Center"
+                    IsVisible="{Binding ShowError}"
+                    VerticalOptions="CenterAndExpand"
+                    WidthRequest="200">
+                    <StackLayout Spacing="0">
+                        <Label
+                            Margin="15"
+                            FontSize="15"
+                            HorizontalTextAlignment="Center"
+                            Text="Erreur"
+                            TextColor="#34a9ff" />
+
+                        <BoxView
+                            HeightRequest="1"
+                            HorizontalOptions="FillAndExpand"
+                            Color="#4f5a64" />
+
+                        <Label
+                            FontAttributes="Bold"
+                            FontSize="Medium"
+                            HorizontalTextAlignment="Center"
+                            Text="{Binding ErrorMessage}"
+                            TextColor="RED" />
+                    </StackLayout>
+                </Frame>
+
+            </StackLayout>
+        </StackLayout>
+
+    </ContentPage.Content>
+</ContentPage>
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml.cs b/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml.cs
new file mode 100644
index 0000000..428112a
--- /dev/null
+++ b/TestXamConnections/TestXamConnections/Views/InternServiceView.xaml.cs
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TestXamConnections.ViewModels;
+using Xamarin.Forms;
+using Xamarin.Forms.Xaml;
+
+namespace TestXamConnections.Views
+{
+    [XamlCompilation(XamlCompilationOptions.Compile)]
+    public partial class InternServiceView : ContentPage
+    {
+        public InternServiceView()
+        {
+            InitializeComponent();
+            BindingContext = new InternServiceViewModel();
+        }
+    }
+}
\ No newline at end of file
diff --git a/TestXamConnections/TestXamConnections/Views/TeoDeviceView.xaml b/TestXamConnections/TestXamConnections/Views/TeoDeviceView.xaml
index 5cb2f1a..1974f65 100644
--- a/TestXamConnections/TestXamConnections/Views/TeoDeviceView.xaml
+++ b/TestXamConnections/TestXamConnections/Views/TeoDeviceView.xaml
@@ -46,6 +46,38 @@
                         CornerRadius="5"
                         HasShadow="False"
                         HorizontalOptions="Center"
+                        IsVisible="{Binding ShowError}"
+                        VerticalOptions="CenterAndExpand"
+                        WidthRequest="200">
+                        <StackLayout Spacing="0">
+                            <Label
+                                Margin="15"
+                                FontSize="15"
+                                HorizontalTextAlignment="Center"
+                                Text="Erreur"
+                                TextColor="#34a9ff" />
+
+                            <BoxView
+                                HeightRequest="1"
+                                HorizontalOptions="FillAndExpand"
+                                Color="#4f5a64" />
+
+                            <Label
+                                FontAttributes="Bold"
+                                FontSize="Medium"
+                                HorizontalTextAlignment="Center"
+                                Text="{Binding ErrorMessage}"
+                                TextColor="RED" />
+                        </StackLayout>
+                    </Frame>
+
+                    <Frame
+                        Padding="0"
+                        BackgroundColor="Transparent"
+                        BorderColor="#4f5a64"
+                        CornerRadius="5"
+                        HasShadow="False"
+                        HorizontalOptions="Center"
                         VerticalOptions="CenterAndExpand"
                         WidthRequest="250">
                         <StackLayout Spacing="0">
@@ -102,7 +134,8 @@
                                         <DataTemplate>
                                             <StackLayout
                                                 Padding="0,5"
-                                                xe:Commands.Tap="{Binding SendValueCommand}"
+                                                xe:Commands.Tap="{Binding SendValueCommand, Source={Reference commandsList}}"
+                                                xe:Commands.TapParameter="{Binding ToSendCommand}"
                                                 xe:TouchEffect.Color="#34a9ff"
                                                 Spacing="0">
                                                 <Label
