Do not collapse Update Rates button in a transient state (#619)

* Do not collapse Update Rates button in a transient state

* Address PR feedback and add animation to everything affected by IsCurrencyLoadingVisible
This commit is contained in:
Zach Herman 2019-09-26 11:38:40 -07:00 committed by Pepe Rivera
parent 80912a33d0
commit f6f864c88c
2 changed files with 90 additions and 26 deletions

View File

@ -260,14 +260,6 @@
</DoubleAnimationUsingKeyFrames> </DoubleAnimationUsingKeyFrames>
</Storyboard> </Storyboard>
<Storyboard x:Name="TimestampFadeInAnimation">
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyTimestampTextBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
</Storyboard>
<MenuFlyout x:Key="CalculationResultContextMenu"> <MenuFlyout x:Key="CalculationResultContextMenu">
<MenuFlyoutItem x:Name="CopyMenuItem" <MenuFlyoutItem x:Name="CopyMenuItem"
x:Uid="CopyMenuItem" x:Uid="CopyMenuItem"
@ -448,14 +440,85 @@
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
</VisualStateGroup> </VisualStateGroup>
<VisualStateGroup x:Name="CurrencyLoadingStates">
<VisualStateGroup.Transitions>
<VisualTransition From="CurrencyLoadingState" To="CurrencyLoadedState">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Units1" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Value1Container" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Units2" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Value2Container" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyRatioEqualityBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyTimestampTextBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Units1"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Value1Container"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Units2"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Value2Container"
Storyboard.TargetProperty="Opacity"
To="1"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="CurrencyLoadingState">
<VisualState.Setters>
<Setter Target="CurrencyRatioEqualityBlock.Opacity" Value="0"/>
<Setter Target="CurrencyTimestampTextBlock.Opacity" Value="0"/>
<Setter Target="CurrencyLoadingGrid.Visibility" Value="Visible"/>
<Setter Target="Units1.Visibility" Value="Collapsed"/>
<Setter Target="Value1Container.Visibility" Value="Collapsed"/>
<Setter Target="Units2.Visibility" Value="Collapsed"/>
<Setter Target="Value2Container.Visibility" Value="Collapsed"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="CurrencyLoadedState">
<VisualState.Setters>
<Setter Target="CurrencyRatioEqualityBlock.Opacity" Value="1"/>
<Setter Target="CurrencyTimestampTextBlock.Opacity" Value="1"/>
<Setter Target="CurrencyLoadingGrid.Visibility" Value="Collapsed"/>
<Setter Target="Units1.Visibility" Value="Visible"/>
<Setter Target="Value1Container.Visibility" Value="Visible"/>
<Setter Target="Units2.Visibility" Value="Visible"/>
<Setter Target="Value2Container.Visibility" Value="Visible"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<Grid x:Name="CurrencyLoadingGrid" <Grid x:Name="CurrencyLoadingGrid"
Grid.Row="1" Grid.Row="1"
Grid.RowSpan="5" Grid.RowSpan="5"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="4" Grid.ColumnSpan="4">
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="10*"/> <RowDefinition Height="10*"/>
<RowDefinition Height="7*"/> <RowDefinition Height="7*"/>
@ -475,8 +538,7 @@
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}" HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
Style="{ThemeResource ValueContainerStyle}" Style="{ThemeResource ValueContainerStyle}">
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@ -520,15 +582,13 @@
ItemTemplate="{StaticResource UnitTemplate}" ItemTemplate="{StaticResource UnitTemplate}"
ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}" ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}"
SelectedItem="{Binding Unit1, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}" SelectedItem="{Binding Unit1, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}"
TabIndex="2" TabIndex="2"/>
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
<Grid x:Name="Value2Container" <Grid x:Name="Value2Container"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}" HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
Style="{ThemeResource ValueContainerStyle}" Style="{ThemeResource ValueContainerStyle}">
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@ -572,8 +632,7 @@
ItemTemplate="{StaticResource UnitTemplate}" ItemTemplate="{StaticResource UnitTemplate}"
ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}" ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}"
SelectedItem="{Binding Unit2, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}" SelectedItem="{Binding Unit2, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}"
TabIndex="4" TabIndex="4"/>
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
<StackPanel x:Name="SupplementaryResultsPanelInGrid" <StackPanel x:Name="SupplementaryResultsPanelInGrid"
Grid.Row="5" Grid.Row="5"
@ -583,8 +642,7 @@
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}" HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
VerticalAlignment="Top" VerticalAlignment="Top"
FlowDirection="{x:Bind LayoutDirection}" FlowDirection="{x:Bind LayoutDirection}"
SizeChanged="SupplementaryResultsPanelInGrid_SizeChanged" SizeChanged="SupplementaryResultsPanelInGrid_SizeChanged">
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
<local:SupplementaryResults x:Name="SupplementaryResults" <local:SupplementaryResults x:Name="SupplementaryResults"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"

View File

@ -291,12 +291,17 @@ void UnitConverter::SetDefaultFocus()
void UnitConverter::CurrencyRefreshButton_Click(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/) void UnitConverter::CurrencyRefreshButton_Click(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/)
{ {
if (Model->NetworkBehavior == NetworkAccessBehavior::OptIn) // If IsCurrencyLoadingVisible is true that means CurrencyRefreshButton_Click was recently called
// and is still executing. In this case there is no reason to process the click.
if (!Model->IsCurrencyLoadingVisible)
{ {
m_meteredConnectionOverride = true; if (Model->NetworkBehavior == NetworkAccessBehavior::OptIn)
} {
m_meteredConnectionOverride = true;
}
Model->RefreshCurrencyRatios(); Model->RefreshCurrencyRatios();
}
} }
void UnitConverter::OnDataContextChanged(_In_ FrameworkElement ^ sender, _In_ DataContextChangedEventArgs ^ args) void UnitConverter::OnDataContextChanged(_In_ FrameworkElement ^ sender, _In_ DataContextChangedEventArgs ^ args)
@ -320,15 +325,16 @@ void UnitConverter::OnIsDisplayVisibleChanged()
{ {
if (Model->IsCurrencyLoadingVisible) if (Model->IsCurrencyLoadingVisible)
{ {
VisualStateManager::GoToState(this, L"CurrencyLoadingState", false);
StartProgressRingWithDelay(); StartProgressRingWithDelay();
} }
else else
{ {
HideProgressRing(); HideProgressRing();
if (m_isAnimationEnabled && Model->IsCurrencyCurrentCategory && !Model->CurrencyTimestamp->IsEmpty()) if (Model->IsCurrencyCurrentCategory && !Model->CurrencyTimestamp->IsEmpty())
{ {
TimestampFadeInAnimation->Begin(); VisualStateManager::GoToState(this, L"CurrencyLoadedState", m_isAnimationEnabled);
} }
} }
} }