Add capability-first account and calendar setup flow

This commit is contained in:
Burak Kaan Köse
2026-04-20 19:38:30 +02:00
parent 54148716bb
commit d85812ed7b
41 changed files with 1369 additions and 333 deletions
@@ -90,12 +90,12 @@
<SymbolIcon Symbol="ContactInfo" />
</controls:SegmentedItem.Icon>
</controls:SegmentedItem>
<controls:SegmentedItem Content="{x:Bind domain:Translator.AccountDetailsPage_TabMail, Mode=OneTime}">
<controls:SegmentedItem Content="{x:Bind domain:Translator.AccountDetailsPage_TabMail, Mode=OneTime}" Visibility="{x:Bind ViewModel.HasMailAccess, Mode=OneWay}">
<controls:SegmentedItem.Icon>
<SymbolIcon Symbol="Mail" />
</controls:SegmentedItem.Icon>
</controls:SegmentedItem>
<controls:SegmentedItem Content="{x:Bind domain:Translator.AccountDetailsPage_TabCalendar, Mode=OneTime}">
<controls:SegmentedItem Content="{x:Bind domain:Translator.AccountDetailsPage_TabCalendar, Mode=OneTime}" Visibility="{x:Bind ViewModel.HasCalendarAccess, Mode=OneWay}">
<controls:SegmentedItem.Icon>
<FontIcon Glyph="&#xE163;" />
</controls:SegmentedItem.Icon>
@@ -117,7 +117,10 @@
Text="{x:Bind ViewModel.AccountName, Mode=TwoWay}" />
</controls:SettingsCard>
<controls:SettingsCard Description="{x:Bind domain:Translator.SettingsEditAccountDetails_Description}" Header="{x:Bind domain:Translator.AccountSettingsDialog_AccountName}">
<controls:SettingsCard
Description="{x:Bind domain:Translator.SettingsEditAccountDetails_Description}"
Header="{x:Bind domain:Translator.AccountSettingsDialog_AccountName}"
Visibility="{x:Bind ViewModel.HasMailAccess, Mode=OneWay}">
<controls:SettingsCard.HeaderIcon>
<SymbolIcon Symbol="Mail" />
</controls:SettingsCard.HeaderIcon>
@@ -127,7 +130,9 @@
Text="{x:Bind ViewModel.SenderName, Mode=TwoWay}" />
</controls:SettingsCard>
<controls:SettingsCard Header="{x:Bind domain:Translator.IMAPSetupDialog_MailAddress}">
<controls:SettingsCard
Header="{x:Bind domain:Translator.IMAPSetupDialog_MailAddress}"
Visibility="{x:Bind ViewModel.HasMailAccess, Mode=OneWay}">
<controls:SettingsCard.HeaderIcon>
<SymbolIcon Symbol="Mail" />
</controls:SettingsCard.HeaderIcon>
@@ -137,6 +142,25 @@
Text="{x:Bind ViewModel.Address, Mode=OneWay}" />
</controls:SettingsCard>
<controls:SettingsCard
Description="{x:Bind domain:Translator.AccountDetailsPage_CapabilityDescription, Mode=OneTime}"
Header="{x:Bind domain:Translator.AccountDetailsPage_CapabilityTitle, Mode=OneTime}"
Visibility="{x:Bind ViewModel.IsOAuthCapabilityEditable, Mode=OneWay}">
<controls:SettingsCard.HeaderIcon>
<FontIcon Glyph="&#xE787;" />
</controls:SettingsCard.HeaderIcon>
<ComboBox
MinWidth="220"
ItemsSource="{x:Bind ViewModel.CapabilityOptions, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedCapabilityOption, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="mailViewModels:AccountCapabilityOption">
<TextBlock Text="{x:Bind DisplayText}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</controls:SettingsCard>
<controls:SettingsCard
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
@@ -212,6 +236,7 @@
<Grid
x:Name="MailSettingsPanel"
Grid.Row="2"
x:Load="{x:Bind ViewModel.HasMailAccess, Mode=OneWay}"
Visibility="Collapsed">
<StackPanel Spacing="4">
<StackPanel.ChildrenTransitions>
@@ -403,6 +428,7 @@
<Grid
x:Name="CalendarSettingsPanel"
Grid.Row="2"
x:Load="{x:Bind ViewModel.HasCalendarAccess, Mode=OneWay}"
Visibility="Collapsed">
<StackPanel MaxWidth="900" Spacing="12">
@@ -25,7 +25,7 @@
Margin="0,2,0,0"
Click="RootAccountTemplate_Click"
CommandParameter="{x:Bind}"
Description="{x:Bind Account.Address}"
Description="{x:Bind DescriptionText}"
Header="{x:Bind Account.Name}"
IsClickEnabled="True">
<winuiControls:SettingsCard.HeaderIcon>
@@ -199,6 +199,7 @@
x:Name="AccountsListView"
Grid.Row="1"
x:Load="{x:Bind ViewModel.HasAccountsDefined, Mode=OneWay}"
CanReorderItems="True"
ItemContainerStyle="{StaticResource StretchedItemContainerStyle}"
ItemTemplateSelector="{StaticResource AccountProviderViewModelTemplateSelector}"
ItemsSource="{x:Bind ViewModel.Accounts, Mode=OneWay}"
@@ -208,7 +209,7 @@
<winuiControls:SettingsCard Description="{x:Bind domain:Translator.SettingsStartupItem_Description}" Header="{x:Bind domain:Translator.SettingsStartupItem_Title}">
<ComboBox
MinWidth="150"
ItemsSource="{x:Bind ViewModel.Accounts, Mode=OneTime}"
ItemsSource="{x:Bind ViewModel.StartupAccounts, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.StartupAccount, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="interfaces:IAccountProviderDetailViewModel">
@@ -220,16 +221,10 @@
<SymbolIcon Symbol="Account" />
</winuiControls:SettingsCard.HeaderIcon>
</winuiControls:SettingsCard>
<winuiControls:SettingsCard
Description="{x:Bind domain:Translator.WinoAccount_Management_LocalDataSectionDescription}"
Header="{x:Bind domain:Translator.WinoAccount_Management_LocalDataSectionTitle}">
<winuiControls:SettingsCard Description="{x:Bind domain:Translator.WinoAccount_Management_LocalDataSectionDescription}" Header="{x:Bind domain:Translator.WinoAccount_Management_LocalDataSectionTitle}">
<StackPanel Orientation="Horizontal" Spacing="12">
<Button
Command="{x:Bind ViewModel.ImportLocalDataCommand}"
Content="{x:Bind domain:Translator.WinoAccount_Management_LocalDataImportAction}" />
<Button
Command="{x:Bind ViewModel.ExportLocalDataCommand}"
Content="{x:Bind domain:Translator.WinoAccount_Management_LocalDataExportAction}" />
<Button Command="{x:Bind ViewModel.ImportLocalDataCommand}" Content="{x:Bind domain:Translator.WinoAccount_Management_LocalDataImportAction}" />
<Button Command="{x:Bind ViewModel.ExportLocalDataCommand}" Content="{x:Bind domain:Translator.WinoAccount_Management_LocalDataExportAction}" />
</StackPanel>
<winuiControls:SettingsCard.HeaderIcon>
<SymbolIcon Symbol="Sync" />
@@ -76,12 +76,18 @@
Grid.Row="1"
Grid.ColumnSpan="2"
Header="{x:Bind ViewModel.PasswordHeaderText, Mode=OneWay}"
Password="{x:Bind ViewModel.Password, Mode=TwoWay}" />
Password="{x:Bind ViewModel.Password, Mode=TwoWay}"
Visibility="{x:Bind ViewModel.IsMailPasswordInputVisible, Mode=OneWay}" />
</Grid>
<CheckBox
Content="{x:Bind ViewModel.EnableCalendarSupportText, Mode=OneWay}"
IsChecked="{x:Bind ViewModel.IsCalendarSupportEnabled, Mode=TwoWay}" />
<StackPanel Spacing="10">
<CheckBox
Content="{x:Bind ViewModel.EnableMailSupportText, Mode=OneWay}"
IsChecked="{x:Bind ViewModel.IsMailSupportEnabled, Mode=TwoWay}" />
<CheckBox
Content="{x:Bind ViewModel.EnableCalendarSupportText, Mode=OneWay}"
IsChecked="{x:Bind ViewModel.IsCalendarSupportEnabled, Mode=TwoWay}" />
</StackPanel>
<StackPanel Spacing="8">
<TextBlock
@@ -93,7 +99,8 @@
HorizontalAlignment="Left"
Command="{x:Bind ViewModel.AutoDiscoverSettingsCommand}"
Content="{x:Bind ViewModel.AutoDiscoverButtonText, Mode=OneWay}"
Style="{ThemeResource AccentButtonStyle}" />
Style="{ThemeResource AccentButtonStyle}"
Visibility="{x:Bind ViewModel.IsMailActionsVisible, Mode=OneWay}" />
</StackPanel>
</StackPanel>
</Border>
@@ -103,7 +110,8 @@
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}"
BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="8">
CornerRadius="8"
Visibility="{x:Bind ViewModel.IsMailSettingsVisible, Mode=OneWay}">
<StackPanel Spacing="16">
<StackPanel Spacing="2">
<TextBlock
@@ -176,7 +184,8 @@
<Button
HorizontalAlignment="Right"
Command="{x:Bind ViewModel.TestImapConnectionCommand}"
Content="{x:Bind ViewModel.TestImapButtonText, Mode=OneWay}" />
Content="{x:Bind ViewModel.TestImapButtonText, Mode=OneWay}"
Visibility="{x:Bind ViewModel.IsMailActionsVisible, Mode=OneWay}" />
</StackPanel>
</Border>