From 890921f2119a1398b0ee4c74234c63096585c73b Mon Sep 17 00:00:00 2001
From: atraczyk <andreastraczyk@gmail.com>
Date: Fri, 2 Dec 2016 16:26:31 -0500
Subject: [PATCH] ui/ux: tidy text message page

- loads contact vcard image upon loading the text message page
- removes extended execution handling

Change-Id: I5a45df23b8528877679f7fd6a27583e5c673ca72
Tuleap: #790
---
 Account.cpp              |   2 +-
 MainPage.xaml.cpp        |  79 +------------------
 MainPage.xaml.h          |   6 --
 MessageTextPage.xaml     | 163 ++++++++++++++++++++-------------------
 MessageTextPage.xaml.cpp |  10 +--
 Package.appxmanifest     |   2 +-
 RingD.cpp                |   2 +-
 RingDebug.cpp            |   3 +-
 SmartPanel.xaml          |  20 +++--
 SmartPanel.xaml.cpp      |  37 +++++++--
 SmartPanel.xaml.h        |   1 +
 Styles.xaml              |  17 +++-
 _language-fr.appx        | Bin 4123 -> 4127 bytes
 _scale-100.appx          | Bin 41546 -> 41549 bytes
 _scale-125.appx          | Bin 52192 -> 52196 bytes
 _scale-150.appx          | Bin 62727 -> 62725 bytes
 _scale-400.appx          | Bin 208032 -> 208031 bytes
 17 files changed, 155 insertions(+), 187 deletions(-)

diff --git a/Account.cpp b/Account.cpp
index 902f6d6..8a3caf4 100644
--- a/Account.cpp
+++ b/Account.cpp
@@ -42,7 +42,7 @@ Account::Account(String^ name,
     accountType_ = accountType;
     accountID_ = accountID;
     _deviceId = deviceId;
-    _upnpState = _upnpState;
+    _upnpState = upnpState;
     _sipHostname = sipHostname;
     _sipUsername = sipUsername;
     _sipPassword = sipPassword;
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index 13b692c..99e016d 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -305,33 +305,10 @@ MainPage::Application_Suspending(Object^, Windows::ApplicationModel::SuspendingE
 {
     MSG_("Application_Suspending");
     auto deferral = e->SuspendingOperation->GetDeferral();
+    Video::VideoManager::instance->captureManager()->CleanupCameraAsync();
     MSG_("Hang up calls...");
     RingD::instance->deinit();
     deferral->Complete();
-    /*if (Frame->CurrentSourcePageType.Name ==
-            Interop::TypeName(MainPage::typeid).Name) {
-        auto deferral = e->SuspendingOperation->GetDeferral();
-        BeginExtendedExecution()
-        .then([=](task<void> previousTask) {
-            try {
-                previousTask.get();
-            }
-            catch (Exception^ e) {
-                MSG_("Exception: Extended Execution Begin");
-            }
-        })
-        .then([this, deferral](task<void> previousTask) {
-            try {
-                previousTask.get();
-                MSG_("deferral->Complete()");
-                deferral->Complete();
-            }
-            catch (Exception^ e) {
-                MSG_("Exception: Extended Execution");
-                deferral->Complete();
-            }
-        });
-    }*/
 }
 
 void
@@ -404,60 +381,6 @@ void MainPage::Application_Resuming(Object^, Object^)
     MSG_("Application_Resuming");
 }
 
-void
-MainPage::SessionRevoked(Object^ sender, ExtendedExecutionRevokedEventArgs^ args)
-{
-    Dispatcher->RunAsync(CoreDispatcherPriority::High, ref new DispatchedHandler([=]() {
-        ClearExtendedExecution();
-    }));
-}
-
-void
-MainPage::ClearExtendedExecution()
-{
-    if (session != nullptr) {
-        MSG_("End Extended Execution");
-        session->Revoked -= sessionRevokedToken;
-    }
-}
-
-task<void>
-MainPage::BeginExtendedExecution()
-{
-    ClearExtendedExecution();
-
-    auto newSession = ref new ExtendedExecutionSession();
-    newSession->Reason = ExtendedExecutionReason::SavingData;
-    newSession->Description = "Extended Execution";
-    sessionRevokedToken = (newSession->Revoked += ref new TypedEventHandler<Object^,
-                           ExtendedExecutionRevokedEventArgs^>(this, &MainPage::SessionRevoked));
-    return create_task(newSession->RequestExtensionAsync())
-    .then([=](ExtendedExecutionResult result) {
-        try {
-            switch (result)
-            {
-            case ExtendedExecutionResult::Allowed:
-                session = newSession;
-                MSG_("Request Extended Execution Allowed");
-                MSG_("Clean up camera...");
-                Video::VideoManager::instance->captureManager()->CleanupCameraAsync();
-                MSG_("Hang up calls...");
-                RingD::instance->deinit();
-                break;
-
-            default:
-            case ExtendedExecutionResult::Denied:
-                MSG_("Request Extended Execution Denied");
-                break;
-            }
-        }
-        catch (Exception^ e) {
-            EXC_(e);
-        }
-    });
-}
-
-
 void RingClientUWP::MainPage::OncloseMessageTextPage()
 {
     auto smartPanel = dynamic_cast<SmartPanel^>(_smartPanel_->Content);
diff --git a/MainPage.xaml.h b/MainPage.xaml.h
index 40ad098..5abe2b2 100644
--- a/MainPage.xaml.h
+++ b/MainPage.xaml.h
@@ -57,12 +57,6 @@ private:
     void Application_Resuming(Object^ sender, Object^ args);
     EventRegistrationToken applicationResumingEventToken;
 
-    ExtendedExecutionSession^ session;
-    void SessionRevoked(Object^ sender, ExtendedExecutionRevokedEventArgs^ args);
-    EventRegistrationToken sessionRevokedToken;
-    task<void> BeginExtendedExecution();
-    void ClearExtendedExecution();
-
     // Multi-monitor, DPI, scale factor change, and window resize detection
     void DisplayProperties_DpiChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args);
     EventRegistrationToken dpiChangedtoken;
diff --git a/MessageTextPage.xaml b/MessageTextPage.xaml
index b1c97d0..a2cc4f6 100644
--- a/MessageTextPage.xaml
+++ b/MessageTextPage.xaml
@@ -136,89 +136,96 @@
 
     <Grid Background="#FFF2F2F2">
         <Grid.RowDefinitions>
-            <RowDefinition Height="90" />
+            <RowDefinition Height="61" />
             <RowDefinition Height="*"/>
             <RowDefinition Height="auto" />
         </Grid.RowDefinitions>
         <Grid Grid.Row="0"
                     Background="White"
-                    Height="90">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="60" />
-                <RowDefinition Height="30" />
-            </Grid.RowDefinitions>
-            <Grid Grid.Row="0">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="60"/>
-                    <ColumnDefinition Width="280"/>
-                    <ColumnDefinition Width="140"/>
-                </Grid.ColumnDefinitions>
-                <Ellipse Grid.Column="0"
-                         Width="50"
-                         Height="50">
-                    <Ellipse.Fill>
-                        <ImageBrush x:Name="_contactBarAvatar_"
-                                ImageSource="ms-appx:///Assets/TESTS/contactAvatar.png"/>
-                    </Ellipse.Fill>
-                </Ellipse>
-                <TextBlock  x:Name="_title_"
-                            Grid.Column="1"
-                            Text="[TEXT MISSING]"
-                            TextWrapping="NoWrap"
-                            TextTrimming="CharacterEllipsis"
-                            VerticalAlignment="Center"
-                            FontSize="18"
-                            Margin="6" />
-                <ComboBox   x:Name="_associableAccountsList_"
-                            Grid.Column="2"
-                            Margin="6,14,6,6"
-                            Visibility="Collapsed">
-                    <ComboBox.ItemTemplate>
-                        <DataTemplate x:DataType="local:Account">
-                            <TextBlock Text="{x:Bind name_, Mode=OneWay}" />
-                        </DataTemplate>
-                    </ComboBox.ItemTemplate>
-                </ComboBox>
-            </Grid>
-            <Grid Grid.Row="1">
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="auto"/>
-                    <ColumnDefinition Width="auto"/>
-                    <ColumnDefinition Width="auto"/>
-                    <ColumnDefinition Width="auto"/>
-                </Grid.ColumnDefinitions>
-                <Button x:Name="_videoCall_"
-                    Click="_videoCall__Click"
-                    Grid.Column="0"
-                    Content="&#xE714;"
-                    FontFamily="Segoe MDL2 Assets"
-                    FontSize="14"
-                    Style="{StaticResource ButtonStyle4}"
-                    Margin="6,2,6,6"/>
-                <Button x:Name="_audioCall_"
-                    Grid.Column="1"
-                    Click="_audioCall__Click"
-                    Content="&#xE13A;"
-                    FontSize="14"
-                    FontFamily="Segoe MDL2 Assets"
-                    Style="{StaticResource ButtonStyle4}"
-                    Margin="6,2,6,6"/>
-                <Button x:Name="_clearConversation_"
-                    Grid.Column="2"
-                    Click="_clearConversation__Click"
-                    Content="&#xE894;"
-                    FontFamily="Segoe MDL2 Assets"
-                    FontSize="14"
-                    Style="{StaticResource ButtonStyle4}"
-                    Margin="6,2,6,6"/>
-                <Button x:Name="_deleteContact_"
-                    Grid.Column="3"
-                    Click="_deleteContact__Click"
-                    Content="&#xE74D;"
-                    FontFamily="Segoe MDL2 Assets"
-                    FontSize="14"
-                    Style="{StaticResource ButtonStyle4}"
-                    Margin="6,2,6,6"/>
+                    Height="61">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="60"/>
+                <ColumnDefinition Width="auto"/>
+            </Grid.ColumnDefinitions>
+            <Ellipse Grid.Column="0"
+                             Width="50"
+                             Height="50">
+                <Ellipse.Fill>
+                    <ImageBrush x:Name="_contactBarAvatar_"
+                                        ImageSource="ms-appx:///Assets/TESTS/contactAvatar.png"/>
+                </Ellipse.Fill>
+            </Ellipse>
+            <Grid Grid.Column="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="31" />
+                    <RowDefinition Height="30" />
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="280"/>
+                            <ColumnDefinition Width="auto"/>
+                        </Grid.ColumnDefinitions>
+                    </Grid>
+                    <TextBlock  x:Name="_title_"
+                                Grid.Column="0"
+                                Text="[TEXT MISSING]"
+                                TextWrapping="NoWrap"
+                                TextTrimming="CharacterEllipsis"
+                                VerticalAlignment="Center"
+                                FontSize="16"
+                                Margin="4,0,4,0" />
+                    <ComboBox   x:Name="_associableAccountsList_"
+                                Grid.Column="1"
+                                Margin="6,14,6,6"
+                                Visibility="Collapsed">
+                        <ComboBox.ItemTemplate>
+                            <DataTemplate x:DataType="local:Account">
+                                <TextBlock Text="{x:Bind name_, Mode=OneWay}" />
+                            </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                    </ComboBox>
+                </Grid>
+                <Grid Grid.Row="1">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="auto"/>
+                        <ColumnDefinition Width="auto"/>
+                        <ColumnDefinition Width="auto"/>
+                        <ColumnDefinition Width="auto"/>
+                    </Grid.ColumnDefinitions>
+                    <Button x:Name="_videoCall_"
+                        Click="_videoCall__Click"
+                        Grid.Column="0"
+                        Content="&#xE714;"
+                        FontFamily="Segoe MDL2 Assets"
+                        FontSize="14"
+                        Style="{StaticResource ButtonStyle4}"
+                        Margin="6,2,6,6"/>
+                    <Button x:Name="_audioCall_"
+                        Grid.Column="1"
+                        Click="_audioCall__Click"
+                        Content="&#xE13A;"
+                        FontSize="14"
+                        FontFamily="Segoe MDL2 Assets"
+                        Style="{StaticResource ButtonStyle4}"
+                        Margin="6,2,6,6"/>
+                    <Button x:Name="_clearConversation_"
+                        Grid.Column="2"
+                        Click="_clearConversation__Click"
+                        Content="&#xE894;"
+                        FontFamily="Segoe MDL2 Assets"
+                        FontSize="14"
+                        Style="{StaticResource ButtonStyle4}"
+                        Margin="6,2,6,6"/>
+                    <Button x:Name="_deleteContact_"
+                        Grid.Column="3"
+                        Click="_deleteContact__Click"
+                        Content="&#xE74D;"
+                        FontFamily="Segoe MDL2 Assets"
+                        FontSize="14"
+                        Style="{StaticResource ButtonStyle4}"
+                        Margin="6,2,6,6"/>
+                </Grid>
             </Grid>
         </Grid>
         <ScrollViewer x:Name="_scrollView_"
diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp
index acd914c..bef1e38 100644
--- a/MessageTextPage.xaml.cpp
+++ b/MessageTextPage.xaml.cpp
@@ -65,18 +65,17 @@ RingClientUWP::Views::MessageTextPage::updatePageContent()
     auto item = SmartPanelItemsViewModel::instance->_selectedItem;
     auto contact = item->_contact;
 
-
-
     if (!contact) /* should never happen */
         return;
 
-
     /* show the name of contact on the page */
     _title_->Text = contact->name_;
 
     String^ image_path = Utils::toPlatformString(RingD::instance->getLocalFolder()) + ".vcards\\" + contact->_vcardUID + ".png";
-    auto uri = ref new Windows::Foundation::Uri(image_path);
-    _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
+    if (Utils::fileExists(Utils::toString(image_path))) {
+        auto uri = ref new Windows::Foundation::Uri(image_path);
+        _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
+    }
 
     /* show messages */
     _messagesList_->ItemsSource = contact->_conversation->_messages;
@@ -93,7 +92,6 @@ RingClientUWP::Views::MessageTextPage::updatePageContent()
             break;
         }
 
-
     if (found)
         _associableAccountsList_->SelectedIndex = index;
     else
diff --git a/Package.appxmanifest b/Package.appxmanifest
index 6d756c2..4472030 100644
--- a/Package.appxmanifest
+++ b/Package.appxmanifest
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
-  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.11.0" />
+  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.12.0" />
   <mp:PhoneIdentity PhoneProductId="2385953f-9019-423d-aa82-d1bbacfa258b" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
   <Properties>
     <DisplayName>GNU Ring</DisplayName>
diff --git a/RingD.cpp b/RingD.cpp
index 9edcdaa..45c2780 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -880,7 +880,7 @@ RingD::dequeueTasks()
             auto newAccountId = DRing::addAccount(ringAccountDetails);
 
             if (!task->_registeredName->IsEmpty())
-                registerName_new(newAccountId, Utils::toString(task->_password), Utils::toString(task->_alias));
+                registerName_new(newAccountId, Utils::toString(task->_password), Utils::toString(task->_registeredName));
         }
         break;
         case Request::AddSIPAccount:
diff --git a/RingDebug.cpp b/RingDebug.cpp
index fca4ee1..d90ffd1 100644
--- a/RingDebug.cpp
+++ b/RingDebug.cpp
@@ -72,6 +72,8 @@ RingDebug::print(const  std::string& message, const Type& type,
     wString = (type>Type::WNG)?(L"(EE) "):((type>Type::MSG)?(L"(WW) "):(L"")) + wString;
 
     String^ msg;
+    msg = ref new String(wString.c_str(), wString.length());
+
 #if UWP_DBG_VS
     /* screen it into VS debug console */
     OutputDebugString((wString + L"\n").c_str());
@@ -79,7 +81,6 @@ RingDebug::print(const  std::string& message, const Type& type,
 
 #if UWP_DBG_CLIENT
     /* fire the event. */
-    msg = ref new String(wString.c_str(), wString.length());
     messageToScreen(msg);
 #endif
 
diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index 4fe5600..622829e 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -295,7 +295,6 @@
                     <ColumnDefinition x:Name="_selectedAccountAvatarColumn_"
                                       Width="90"/>
                     <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="50"/>
                 </Grid.ColumnDefinitions>
                 <Ellipse
                     x:Name="_selectedAccountAvatarContainer_"
@@ -341,6 +340,11 @@
                                Style="{StaticResource TextStyle2}"/>
                     <StackPanel Orientation="Horizontal">
                         <!--Content="&#xE0A1;-->
+                        <Button x:Name="_smartGridButton_"
+                                      VerticalAlignment="Bottom"
+                                      Content="&#xe716;"
+                                      Click="_smartGridButton__Clicked"
+                                      Style="{StaticResource smartGridButtonStyle}"/>
                         <ToggleButton x:Name="_accountsMenuButton_"
                                       VerticalAlignment="Bottom"
                                       Content="&#xE168;"
@@ -363,15 +367,15 @@
                                       Checked="_devicesMenuButton__Checked"
                                       Unchecked="_devicesMenuButton__Unchecked"
                                       Style="{StaticResource ToggleButtonStyle1}"/>
+                        <!-- _settingsMenuButton_ -->
+                        <ToggleButton x:Name="_settingsMenuButton_"
+                                      VerticalAlignment="Bottom"
+                                      Content="&#xE115;"
+                                      Checked="_settingsMenu__Checked"
+                                      Unchecked="_settingsMenu__Unchecked"
+                                      Style="{StaticResource ToggleButtonStyle1}"/>
                     </StackPanel>
                 </StackPanel>
-                <ToggleButton x:Name="_settingsMenuButton_"
-                              Grid.Column="2"
-                              VerticalAlignment="Bottom"
-                              Content="&#xE115;"
-                              Checked="_settingsMenu__Checked"
-                              Unchecked="_settingsMenu__Unchecked"
-                              Style="{StaticResource ToggleButtonStyle1}"/>
             </Grid>
 
             <!--sub menus like the accounts list or the share menu are just below, technicaly they are nested inside the
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 4233325..87f5486 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -120,6 +120,17 @@ SmartPanel::SmartPanel()
         case CallStatus::NONE:
         case CallStatus::ENDED:
         {
+            bool isInCall = false;
+            for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
+                if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS) {
+                    isInCall = true;
+                    RingD::instance->currentCallId = item->_callId;
+                    break;
+                }
+            }
+            if (!isInCall)
+                _settingsMenuButton_->Visibility = VIS::Visible;
+
             item->_callId = "";
             break;
         }
@@ -143,7 +154,6 @@ SmartPanel::SmartPanel()
     });
     RingD::instance->devicesListRefreshed += ref new RingClientUWP::DevicesListRefreshed(this, &RingClientUWP::Views::SmartPanel::OndevicesListRefreshed);
 
-
     ContactsViewModel::instance->contactAdded += ref new ContactAdded([this](Contact^ contact) {
         auto smartPanelItem = ref new SmartPanelItem();
         smartPanelItem->_contact = contact;
@@ -207,9 +217,23 @@ void RingClientUWP::Views::SmartPanel::unselectContact()
     _smartList_->SelectedItem = nullptr;
 }
 
+void RingClientUWP::Views::SmartPanel::_smartGridButton__Clicked(Object^ sender, RoutedEventArgs^ e)
+{
+    _accountsMenuButton__Unchecked(nullptr,nullptr);
+    _accountsMenuButton_->IsChecked = false;
+    _shareMenuButton__Unchecked(nullptr,nullptr);
+    _shareMenuButton_->IsChecked = false;
+    _devicesMenuButton__Unchecked(nullptr,nullptr);
+    _devicesMenuButton_->IsChecked = false;
+    _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
+    _settingsMenuButton_->IsChecked = false;
+
+    _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
+}
+
 void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
 {
-    _settingsMenu__Unchecked(nullptr,nullptr);
+    _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _settingsMenuButton_->IsChecked = false;
     _shareMenuButton_->IsChecked = false;
     _devicesMenuButton_->IsChecked = false;
@@ -303,7 +327,7 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel:
 
 void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    _settingsMenu__Unchecked(nullptr,nullptr);
+    _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _settingsMenuButton_->IsChecked = false;
     _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
     _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
@@ -508,6 +532,8 @@ SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::Rou
         /* force to hide the button, avoid attempting to call several times... */
         button->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
 
+        _settingsMenuButton_->Visibility = VIS::Collapsed;
+
         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
         if (item) {
             auto contact = item->_contact;
@@ -884,7 +910,7 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::O
 
 void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-    _settingsMenu__Unchecked(nullptr,nullptr);
+    _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
     _settingsMenuButton_->IsChecked = false;
 
     _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible;
@@ -1103,8 +1129,7 @@ void RingClientUWP::Views::SmartPanel::_acceptAccountModification__Click(Platfor
     _accountsMenuButton_->IsChecked = false;
 
     if (_usernameValidEdition_->Visibility == Windows::UI::Xaml::Visibility::Visible && _usernameTextBoxEdition_->Text->Length() > 2)
-        RingD::instance->registerName(account->accountID_, "", _usernameTextBoxEdition_->Text);
-
+        RingD::instance->registerName_new(Utils::toString(account->accountID_), "", Utils::toString(_usernameTextBoxEdition_->Text));
 }
 
 
diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h
index be2ef33..42168a0 100644
--- a/SmartPanel.xaml.h
+++ b/SmartPanel.xaml.h
@@ -99,6 +99,7 @@ internal:
 
 private:
     /* functions */
+    void _smartGridButton__Clicked(Object^ sender, RoutedEventArgs^ e);
     void _accountsMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _accountsMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
     void _settingsMenu__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
diff --git a/Styles.xaml b/Styles.xaml
index 91bb4dc..70f9b1a 100644
--- a/Styles.xaml
+++ b/Styles.xaml
@@ -288,7 +288,22 @@
     <Style x:Key="ToggleButtonStyle1"
            TargetType="ToggleButton">
         <Setter Property="Width"
-                Value="50"/>
+                Value="46"/>
+        <Setter Property="Height"
+                Value="30"/>
+        <Setter Property="FontFamily"
+                Value="Segoe MDL2 Assets"/>
+        <Setter Property="Foreground"
+                Value="White"/>
+        <Setter Property="Background"
+                Value="Transparent"/>
+        <Setter Property="BorderThickness"
+                Value="0"/>
+    </Style>
+    <Style x:Key="smartGridButtonStyle"
+           TargetType="Button">
+        <Setter Property="Width"
+                Value="46"/>
         <Setter Property="Height"
                 Value="30"/>
         <Setter Property="FontFamily"
diff --git a/_language-fr.appx b/_language-fr.appx
index a190ec94ca99ceafa0a4492816f0b382593f5e2b..b22ae49ffe46e0d82e291d60d3cf991e64ddf283 100644
GIT binary patch
delta 2278
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

delta 2287
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

diff --git a/_scale-100.appx b/_scale-100.appx
index ae55ac1f272f6a3dbef38756a9ac80aedef68b96..ad0467ac4f56800b0c9e3b336cdb26f7b059cba6 100644
GIT binary patch
delta 2373
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

delta 2347
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
QKERue9mIMuS!a<V06Hg;ivR!s

diff --git a/_scale-125.appx b/_scale-125.appx
index 3c46cf32d51b49301a3669f19001218e11fe191e..2ba90d6da72f0a113c2b1f56638461d9dbd25383 100644
GIT binary patch
delta 2495
zcmaDbo%zXhX5IjAW)@ur4h9AW{kEo!yxhB)_1l^@OYe?i0Wl^Q9u%G2yI-dM?k%>Z
z4jUgHa!8WccsH&pam7}j5GB@0MRV?#KRwbJ^(5$p(wj5y&YcOmGiUa!IR`3pecdYO
z1TeYX44SRA`1f6-SpkolO_r`%+t?%Jo&V|l{3C9w?r&mhdV4JWi-ePP@|o4jCYO%)
zhMlXb=GeH2cXDoZTCd432D=T-ZwsOh)V`_roPEizvd>$;IBjmu|7@{O?apCSH~QIK
z+c1syN0^pF=81(nBc>)a@tt4NZnSHv`s&z{3AYZ;HM?v1Z{I!p1({xEcazut6^wCv
z{yOJSa9q#y`-}8HH@Ppa40O5t#jMxu^v9B#*#&m8g<f@g*gN8HE&suAugve@sxvF{
zvt^Ukr_}Qb`X8V2H0f~;w_e7FojZc!jn6i}cGytAI%#2HU(Gw-Co86XDPollJ39MY
zV(E*iF=x2GDF)uTdFol~cY#0ab2muviapvEU);FiJ@d`x_@>13+xGhRJUXf&eL?I(
z(?RDI-v9k}aUEjvi#ix&wrii<^XI2sAMd^R_w*D~)$h0Vr2EV{;(2Cr$&@da_fLP;
z-gH=;@u{@kyc*X%;UB(7mGOSzXJBCX|DTy5z?+?8bzUIP7Dfgz_`?LI7+|r?0gC0x
zg$I@E<MVGBh#bAI{?^*%p7BOmr%Qe<S{D?fKBngiIWFI~<5=fjwXzeuEnhF6FIkke
z+BWXxyyCj=FZkB?g}#(=VLtVOBXGKcdq&<iFLA+BmoncoSza*Oo4WL(lGCjPt1n*H
zKU|pk<8#y1zN^_C6LN0<vOacT=?aM*Qy=v*PTsC(E}B+fT6;upA&dRo6w%cajgu9`
z7fnt3t@du$xwpU8WpeHI(NMG7_D<}%w8t}ECKD;YP|Z22t93ki6rw78>Qyp7Ma(+%
zMT+|^Q~J^uf%y-v?Q-y26!&JGeA{%!qGvn*n6s;|zb+hSsbpfg#qj&8)O)_&)qibX
zhBXHMhzR&8eWT9zW&M;CgW3Q0?Ej|R;_h6-^t0hIhr#bQ?t<5DbBk?-e!Nfm`)~P;
z*-tOePqEGXkz$*6y601*!Qsf0<w-Rw%wIlBeD1mKgpF*<#ha6b{y+N9v2ktX!7Zm)
zx2(&3w}!*ssb-(;vfr~`i=X`UFzt`_4&LHNykh04*WSF-2-q=o^^*@9y5#?!7Tx3c
zqxQcnvt9k+7y3x?=V!7bYwBeE!;+v3xY_%#HY2BgTa#z(rZ@j%Cf6U4sptMs)@P8B
z6rA|@O4jF$-{(%BIJad%r>}^H%84T<GEU?lIDKs9g=Yt6oH}#p$ca-47k+g1de82i
z*t+rLoX&}<j*pX@kFm2Y^GGUUd*!3k)5F7~!*uU^f6>PI)lYWY`u}Ws+VoR=riA2#
ziH?trOfE-CEw^A}aj|e?u~?qJ_e!xx{gjX2ICnqYf5(6SK3%<Km7Wiqzh25q<iGCx
zTb9ql&0=?nVbrX1FOsVx3!-;g90}Lie%Cchwf5VQ<<^z;VJxrTXtA&2yt#2pNq*n6
z{V&_zrzi#QP+u>6<4(zinAFQhU;nAo|MT3}_Jzd5C(>#^<1M~~eY(axdvf2jcuV!o
zj<1vI|8}xQIsMB1@%~(yiDtxwBRWYJj_4#@IPxQz(O6hncyhx;|Jy4!&z}?Z$Nt`0
zo|l1N*eY418hY*=NVsHv#q>g2GGA(<SlC7b6QdH7Qse8UWo0H;Obg3Ou52|aGP-11
zXuQ>=)X2bOi;1Dh1mWkVCdMWPMy4jl2F7MROhsoM>tmFa4W^ec&z6`vL6(&#_L-Vn
z9oqs6@nB(tI=er$pVxLjuR8L69rHS~yx)(1Zu|bXX4|z@A-$DR?JvF;X}VVbz8&`e
zrt<$|XD#Ps8+^a={bx?t^EdwQBeSJ9-2IyU{g)l%++(U%vvwz4XWKq+YfYt!s^+Rf
z&ghV%)BIMmwlWpgpYM^IcVg>JgW{*{k<Y@Fb}gRXeJpEj@UD$tu1r&JVw08jU41Qo
zkMbACSJ@v`>)xv0oFA8WYWB9O&bdo2pOOAAd`)Nf1+|Jl*IsRxot&JyN2Ywv=Gogn
zRqWZ&n{Z^Zc71>C%DH8;>tB~o@A`SU|JBX88~yg`eLnHy*mlwB&0bsj>g)HaEGzk`
zxBAh^*_Ljl-~Z>I<hoP*{(I2LN2WQo=hOVS&G+y79$x?3bpL$Gdp>7+czU``d9LtO
zG#u2@K6B#7{MM5V2OW5h1hamu;MsA*qT%JNsZ;09l+<mS>F5~o`S_#9De0%>W-A9S
zlNENF=DS|6=IT$^{_?ZiU#~Xuej4(=o+aKhZpZBhkM<r-tlbn7z3$5F<Ih{Cd2_s&
z+8%r3>NLCZ#skLtk4!)LZGI?gwszkx(fIT4lJ@@$-XFaG+`s#Ozb)D_jX5~>*_wa#
z>e<)!td^3=-jr5(MW6pxz2B>sJDFd9mlS<x@H<>uTH)D3(bCNy=3TzyuG;xix=ZGL
zvG(+P^>?bQ*XB##Htc7<wMSi_yVX)#XZM43iHf<(Nk29y{QL0wX7R1o(`9cTpFekN
zZ~d<+zYm(_9>2aP<<7>ekDH^f|JnZOeB7iL?@A*cblm>@b@P9leF3E<|EA0k*(oub
zy_;7pHt7G7*>>4qmESMAEzUbz;y%OW%iIZ$i4S~=xQ@>2te@c3%xcQU<iX0_uc%R_
z^6=t;lQ}1vW5gs+D16+(`;%uvsw?joL8(ZdsSzSt>HnwI9;wTFxADf0^2iut@iVVy
zuRL0!_xO0)vMKDZ{Bu$+8u5DzD<A%+TD(2acHaB4jsJqLG@E|ckDal+Mz8qXuj#9&
z9s90ZxHA0ntfH@ppU=#xullx(yYTbcy**w@;&B@%%>Vm+$&tOx)~D~^t*(Fi@pxtM
z{68Xo-=19V+L3Ir@OfGI$46^Sbu$&8ZTnfqZ}aY+=F~00Gk<=)@O#_j?ay^;;@57C
z&Hi`E&HH(EApe^!^EgWG$5(w{exPijU+lgs$BwzDPraX(wWQF-ulD)B-A6udsK0UL
z`l4?Br&j6KCR?=H>h_(=vtIrGvh>-2qg=;swHR;fGgExKOHk={znZbiU0dB(x4-J$
zRebTa=6lnsE$e4$8>Mx*q<r%=efa0;r^@id;>MNf+q-wNcI$m8)7bmVNYgc=_p+`W
zLx49UlP&|iY2>-_`UTZ3yBHX@Oy)b~3M!f>hn=zjm(1V_ck=X8rt+Y28eDucGB5-%
zF)#=~YF{XsI{Eb}d9Y62)6$F%lQmB(fpvgOc2))k9X19AL8w{?l{Y!-w2R=+lMr5j
OHyb;M)iinkX+;1(X4!fG

delta 2489
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

diff --git a/_scale-150.appx b/_scale-150.appx
index e24b3738460057a0f6ae06f9b9a7a1fa06885d38..e807d8e4d18afddb87a876581adf0a2fad519b66 100644
GIT binary patch
delta 2429
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
J$<Mwh0st7=oMr$3

delta 2404
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

diff --git a/_scale-400.appx b/_scale-400.appx
index 6c9e63ed37631133a374e965b87fd516f019b5fd..4f1bc39b1b145798352bb9800d54373ad3daebd5 100644
GIT binary patch
delta 2440
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
ZbClo~EoN{%9N^8y4r16&uh(H#1OR&Nr49f9

delta 2440
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

-- 
GitLab