From 8cfec5de4bde7087734beb2f7203f0d930e1b2d8 Mon Sep 17 00:00:00 2001
From: Ac_K <Acoustik666@gmail.com>
Date: Thu, 28 Jul 2022 19:16:23 +0200
Subject: [PATCH] Avalonia: Cleanup UserEditor a bit (#3492)

This PR cleanup the UserEditor code a bit, 2 texts are added for "Name" and "User Id", because when you create a new profile, the textbox is empty without any hints. `axaml` files are autoformated too.
---
 Ryujinx.Ava/Assets/Locales/en_US.json         |   4 +-
 Ryujinx.Ava/Ui/Controls/UserEditor.axaml      | 106 ++++++++++++------
 Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs   |   4 +-
 Ryujinx.Ava/Ui/Controls/UserSelector.axaml    |  78 ++++++++-----
 Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs |  10 +-
 .../Ui/ViewModels/UserProfileViewModel.cs     |  14 +--
 6 files changed, 131 insertions(+), 85 deletions(-)

diff --git a/Ryujinx.Ava/Assets/Locales/en_US.json b/Ryujinx.Ava/Assets/Locales/en_US.json
index d9cbce9de8..1188c6c6fd 100644
--- a/Ryujinx.Ava/Assets/Locales/en_US.json
+++ b/Ryujinx.Ava/Assets/Locales/en_US.json
@@ -577,5 +577,7 @@
   "UserProfileNoImageError":  "Profile image must be set",
   "GameUpdateWindowHeading": "Updates Available for {0} [{1}]",
   "SettingsTabHotkeysResScaleUpHotkey": "Increase resolution:",
-  "SettingsTabHotkeysResScaleDownHotkey": "Decrease resolution:"
+  "SettingsTabHotkeysResScaleDownHotkey": "Decrease resolution:",
+  "UserProfilesName": "Name:",
+  "UserProfilesUserId" : "User Id:"
 }
diff --git a/Ryujinx.Ava/Ui/Controls/UserEditor.axaml b/Ryujinx.Ava/Ui/Controls/UserEditor.axaml
index fed5f8cb2d..90c5c1fec4 100644
--- a/Ryujinx.Ava/Ui/Controls/UserEditor.axaml
+++ b/Ryujinx.Ava/Ui/Controls/UserEditor.axaml
@@ -1,55 +1,87 @@
-<UserControl xmlns="https://github.com/avaloniaui"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-             mc:Ignorable="d" 
-             Padding="0"
-             Margin="0"
-             xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-             xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-             xmlns:models="clr-namespace:Ryujinx.Ava.Ui.Models"
-             xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
-             xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-             x:Class="Ryujinx.Ava.Ui.Controls.UserEditor">
+<UserControl
+    x:Class="Ryujinx.Ava.Ui.Controls.UserEditor"
+    xmlns="https://github.com/avaloniaui"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
+    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
+    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+    xmlns:models="clr-namespace:Ryujinx.Ava.Ui.Models"
+    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
+    Margin="0"
+    Padding="0"
+    mc:Ignorable="d">
     <UserControl.Resources>
         <controls:BitmapArrayValueConverter x:Key="ByteImage" />
     </UserControl.Resources>
     <Grid Margin="0">
         <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="Auto"/>
-            <ColumnDefinition/>
+            <ColumnDefinition Width="Auto" />
+            <ColumnDefinition />
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
-            <RowDefinition Height="*"/>
-            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*" />
+            <RowDefinition Height="Auto" />
         </Grid.RowDefinitions>
-        <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Left">
+        <StackPanel
+            HorizontalAlignment="Left"
+            VerticalAlignment="Stretch"
+            Orientation="Vertical">
             <Image
+                Name="ProfileImage"
+                Width="96"
+                Height="96"
                 Margin="0"
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Top"
-                Height="96" Width="96"
-                Name="ProfileImage"
                 Source="{Binding Image, Converter={StaticResource ByteImage}}" />
-            <Button Margin="5" Content="{Locale:Locale UserProfilesChangeProfileImage}"
-                    Name="ChangePictureButton"
-                    Click="ChangePictureButton_Click"
-                    HorizontalAlignment="Stretch"/>
-			<Button Margin="5" Content="{Locale:Locale UserProfilesSetProfileImage}"
-                    Name="AddPictureButton"
-                    Click="ChangePictureButton_Click"
-                    HorizontalAlignment="Stretch"/>
+            <Button
+                Name="ChangePictureButton"
+                Margin="5"
+                HorizontalAlignment="Stretch"
+                Click="ChangePictureButton_Click"
+                Content="{Locale:Locale UserProfilesChangeProfileImage}" />
+            <Button
+                Name="AddPictureButton"
+                Margin="5"
+                HorizontalAlignment="Stretch"
+                Click="ChangePictureButton_Click"
+                Content="{Locale:Locale UserProfilesSetProfileImage}" />
         </StackPanel>
-        <StackPanel Grid.Row="0" Orientation="Vertical" HorizontalAlignment="Stretch" Grid.Column="1" Spacing="10"
-                    Margin="5, 10">
-            <TextBox Name="NameBox" Width="300" Text="{Binding Name}" MaxLength="{Binding MaxProfileNameLength}"
-                     HorizontalAlignment="Stretch" />
-            <TextBlock Text="{Binding UserId}" Name="IdLabel" />
+        <StackPanel
+            Grid.Row="0"
+            Grid.Column="1"
+            Margin="5,10"
+            HorizontalAlignment="Stretch"
+            Orientation="Vertical"
+            Spacing="10">
+            <TextBlock Text="{Locale:Locale UserProfilesName}" />
+            <TextBox
+                Name="NameBox"
+                Width="300"
+                HorizontalAlignment="Stretch"
+                MaxLength="{Binding MaxProfileNameLength}"
+                Text="{Binding Name}" />
+            <TextBlock Text="{Locale:Locale UserProfilesUserId}" />
+            <TextBlock Name="IdLabel" Text="{Binding UserId}" />
         </StackPanel>
-        <StackPanel Grid.Column="0" Grid.ColumnSpan="2"  Grid.Row="1" Orientation="Horizontal" Spacing="10" HorizontalAlignment="Right">
-            <Button Content="{Locale:Locale Save}" Name="SaveButton" Click="SaveButton_Click"/>
-            <Button HorizontalAlignment="Right" Content="{Locale:Locale Discard}"
-                    Name="CloseButton" Click="CloseButton_Click"/>
+        <StackPanel
+            Grid.Row="1"
+            Grid.Column="0"
+            Grid.ColumnSpan="2"
+            HorizontalAlignment="Right"
+            Orientation="Horizontal"
+            Spacing="10">
+            <Button
+                Name="SaveButton"
+                Click="SaveButton_Click"
+                Content="{Locale:Locale Save}" />
+            <Button
+                Name="CloseButton"
+                HorizontalAlignment="Right"
+                Click="CloseButton_Click"
+                Content="{Locale:Locale Discard}" />
         </StackPanel>
     </Grid>
 </UserControl>
diff --git a/Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs b/Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs
index 1bc1b325f4..ea996da8f0 100644
--- a/Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs
+++ b/Ryujinx.Ava/Ui/Controls/UserEditor.axaml.cs
@@ -63,7 +63,7 @@ namespace Ryujinx.Ava.Ui.Controls
             _parent?.GoBack();
         }
 
-        private void SaveButton_Click(object sender, RoutedEventArgs e)
+        private async void SaveButton_Click(object sender, RoutedEventArgs e)
         {
             DataValidationErrors.ClearErrors(NameBox);
             bool isInvalid = false;
@@ -77,7 +77,7 @@ namespace Ryujinx.Ava.Ui.Controls
 
             if (TempProfile.Image == null)
             {
-                ContentDialogHelper.CreateWarningDialog(LocaleManager.Instance["UserProfileNoImageError"], "");
+                await ContentDialogHelper.CreateWarningDialog(LocaleManager.Instance["UserProfileNoImageError"], "");
 
                 isInvalid = true;
             }
diff --git a/Ryujinx.Ava/Ui/Controls/UserSelector.axaml b/Ryujinx.Ava/Ui/Controls/UserSelector.axaml
index 3bca7d7d89..c06bce231f 100644
--- a/Ryujinx.Ava/Ui/Controls/UserSelector.axaml
+++ b/Ryujinx.Ava/Ui/Controls/UserSelector.axaml
@@ -1,29 +1,35 @@
-<UserControl xmlns="https://github.com/avaloniaui"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-             xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox"
-             xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
-             xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
-             xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
-             xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
-             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
-             x:Class="Ryujinx.Ava.Ui.Controls.UserSelector">
+<UserControl
+    x:Class="Ryujinx.Ava.Ui.Controls.UserSelector"
+    xmlns="https://github.com/avaloniaui"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:Locale="clr-namespace:Ryujinx.Ava.Common.Locale"
+    xmlns:controls="clr-namespace:Ryujinx.Ava.Ui.Controls"
+    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+    xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox"
+    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+    xmlns:viewModels="clr-namespace:Ryujinx.Ava.Ui.ViewModels"
+    d:DesignHeight="450"
+    d:DesignWidth="800"
+    mc:Ignorable="d">
     <UserControl.Resources>
         <controls:BitmapArrayValueConverter x:Key="ByteImage" />
     </UserControl.Resources>
     <Design.DataContext>
         <viewModels:UserProfileViewModel />
     </Design.DataContext>
-    <Grid HorizontalAlignment="Stretch"
-          VerticalAlignment="Stretch">
+    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
         <Grid.RowDefinitions>
             <RowDefinition />
             <RowDefinition Height="Auto" />
         </Grid.RowDefinitions>
-        <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="5" Items="{Binding Profiles}"
-                 DoubleTapped="ProfilesList_DoubleTapped"
-                 SelectionChanged="SelectingItemsControl_SelectionChanged">
+        <ListBox
+            Margin="5"
+            HorizontalAlignment="Stretch"
+            VerticalAlignment="Center"
+            DoubleTapped="ProfilesList_DoubleTapped"
+            Items="{Binding Profiles}"
+            SelectionChanged="SelectingItemsControl_SelectionChanged">
             <ListBox.ItemsPanel>
                 <ItemsPanelTemplate>
                     <flex:FlexPanel
@@ -49,10 +55,11 @@
                                 </Grid.RowDefinitions>
                                 <Image
                                     Grid.Row="0"
+                                    Width="96"
+                                    Height="96"
                                     Margin="0"
                                     HorizontalAlignment="Stretch"
                                     VerticalAlignment="Top"
-                                    Height="96" Width="96"
                                     Source="{Binding Image, Converter={StaticResource ByteImage}}" />
                                 <StackPanel
                                     Grid.Row="1"
@@ -68,23 +75,34 @@
                                 </StackPanel>
                             </Grid>
                         </Border>
-                        <Border HorizontalAlignment="Left" VerticalAlignment="Top"
-                                IsVisible="{Binding IsOpened}"
-                                Background="LimeGreen"
-                                Width="10"
-                                Height="10"
-                                Margin="5"
-                                CornerRadius="5" />
+                        <Border
+                            Width="10"
+                            Height="10"
+                            Margin="5"
+                            HorizontalAlignment="Left"
+                            VerticalAlignment="Top"
+                            Background="LimeGreen"
+                            CornerRadius="5"
+                            IsVisible="{Binding IsOpened}" />
                     </Grid>
                 </DataTemplate>
             </ListBox.ItemTemplate>
         </ListBox>
-        <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10,0" Spacing="10" HorizontalAlignment="Center">
-            <Button Content="{Locale:Locale UserProfilesAddNewProfile}" Command="{Binding AddUser}" />
-            <Button IsEnabled="{Binding  IsSelectedProfiledEditable}"
-                    Content="{Locale:Locale UserProfilesEditProfile}" Command="{Binding EditUser}" />
-            <Button IsEnabled="{Binding IsSelectedProfileDeletable}"
-                    Content="{Locale:Locale UserProfilesDeleteSelectedProfile}" Command="{Binding DeleteUser}" />
+        <StackPanel
+            Grid.Row="1"
+            Margin="10,0"
+            HorizontalAlignment="Center"
+            Orientation="Horizontal"
+            Spacing="10">
+            <Button Command="{Binding AddUser}" Content="{Locale:Locale UserProfilesAddNewProfile}" />
+            <Button
+                Command="{Binding EditUser}"
+                Content="{Locale:Locale UserProfilesEditProfile}"
+                IsEnabled="{Binding IsSelectedProfiledEditable}" />
+            <Button
+                Command="{Binding DeleteUser}"
+                Content="{Locale:Locale UserProfilesDeleteSelectedProfile}"
+                IsEnabled="{Binding IsSelectedProfileDeletable}" />
         </StackPanel>
     </Grid>
 </UserControl>
\ No newline at end of file
diff --git a/Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs b/Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs
index 027351eef3..8d93088c74 100644
--- a/Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs
+++ b/Ryujinx.Ava/Ui/Controls/UserSelector.axaml.cs
@@ -21,7 +21,7 @@ namespace Ryujinx.Ava.Ui.Controls
                 AddHandler(Frame.NavigatedToEvent, (s, e) =>
                 {
                     NavigatedTo(e);
-                }, Avalonia.Interactivity.RoutingStrategies.Direct);
+                }, RoutingStrategies.Direct);
             }
         }
 
@@ -29,12 +29,10 @@ namespace Ryujinx.Ava.Ui.Controls
         {
             if (Program.PreviewerDetached)
             {
-                switch (arg.NavigationMode)
+                if (arg.NavigationMode == NavigationMode.New)
                 {
-                    case NavigationMode.New:
-                        _parent = (NavigationDialogHost)arg.Parameter;
-                        ViewModel = _parent.ViewModel;
-                        break;
+                    _parent = (NavigationDialogHost)arg.Parameter;
+                    ViewModel = _parent.ViewModel;
                 }
 
                 DataContext = ViewModel;
diff --git a/Ryujinx.Ava/Ui/ViewModels/UserProfileViewModel.cs b/Ryujinx.Ava/Ui/ViewModels/UserProfileViewModel.cs
index f7a500777d..a48b06e61a 100644
--- a/Ryujinx.Ava/Ui/ViewModels/UserProfileViewModel.cs
+++ b/Ryujinx.Ava/Ui/ViewModels/UserProfileViewModel.cs
@@ -43,11 +43,9 @@ namespace Ryujinx.Ava.Ui.ViewModels
             }
         }
 
-        public bool IsHighlightedProfileEditable =>
-            _highlightedProfile != null;
+        public bool IsHighlightedProfileEditable => _highlightedProfile != null;
 
-        public bool IsHighlightedProfileDeletable =>
-            _highlightedProfile != null && _highlightedProfile.UserId != AccountManager.DefaultUserId;
+        public bool IsHighlightedProfileDeletable => _highlightedProfile != null && _highlightedProfile.UserId != AccountManager.DefaultUserId;
 
         public UserProfile HighlightedProfile
         {
@@ -62,16 +60,13 @@ namespace Ryujinx.Ava.Ui.ViewModels
             }
         }
 
-        public void Dispose()
-        {
-        }
+        public void Dispose() { }
 
         public void LoadProfiles()
         {
             Profiles.Clear();
 
-            var profiles = _owner.AccountManager.GetAllUsers()
-                .OrderByDescending(x => x.AccountState == AccountState.Open);
+            var profiles = _owner.AccountManager.GetAllUsers().OrderByDescending(x => x.AccountState == AccountState.Open);
 
             foreach (var profile in profiles)
             {
@@ -94,6 +89,7 @@ namespace Ryujinx.Ava.Ui.ViewModels
         public void AddUser()
         {
             UserProfile userProfile = null;
+
             _owner.Navigate(typeof(UserEditor), (this._owner, userProfile, true));
         }