mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-06-23 15:16:33 +02:00
Version 3.0.361
This commit is contained in:
parent
faf68061f4
commit
cba4da9357
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.360" android:versionCode="360">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.361" android:versionCode="361">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.0.0.73")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||||
public partial class Resource
|
public partial class Resource
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>LastenradBayern</string>
|
<string>LastenradBayern</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>360</string>
|
<string>361</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.360</string>
|
<string>3.0.361</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.360" android:versionCode="360">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.361" android:versionCode="361">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.0.0.73")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||||
public partial class Resource
|
public partial class Resource
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Mein konrad</string>
|
<string>Mein konrad</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>360</string>
|
<string>361</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.360</string>
|
<string>3.0.361</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -12,44 +12,63 @@
|
||||||
<ContentView.Resources>
|
<ContentView.Resources>
|
||||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
|
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
|
||||||
</ContentView.Resources>
|
</ContentView.Resources>
|
||||||
|
<Frame
|
||||||
|
Padding="10"
|
||||||
|
Margin="0,5,0,5"
|
||||||
|
HorizontalOptions="FillAndExpand"
|
||||||
|
VerticalOptions="FillAndExpand"
|
||||||
|
BackgroundColor="White">
|
||||||
|
|
||||||
<StackLayout
|
<StackLayout
|
||||||
|
Orientation="Vertical"
|
||||||
Padding="10">
|
Padding="10">
|
||||||
<Grid Padding="0,0,5,10">
|
|
||||||
<Grid.ColumnDefinitions>
|
<!-- Icons, Name, ID -->
|
||||||
<ColumnDefinition Width="Auto" />
|
<Grid Padding="0,0,5,10"
|
||||||
<ColumnDefinition Width="Auto" />
|
ColumnDefinitions="Auto,Auto,*"
|
||||||
<ColumnDefinition Width="*" />
|
RowDefinitions="Auto,Auto">
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<!-- Icon of the bike -->
|
<!-- Icon of the bike -->
|
||||||
<Image
|
<Image
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
Source="{Binding DisplayedBikeImageSourceString}"
|
Source="{Binding DisplayedBikeImageSourceString}"
|
||||||
HeightRequest="80"
|
HeightRequest="60"
|
||||||
Aspect="AspectFit"
|
Aspect="AspectFit"
|
||||||
HorizontalOptions="Start"
|
HorizontalOptions="Start"
|
||||||
VerticalOptions="End"
|
VerticalOptions="End"/>
|
||||||
Grid.Column="0"/>
|
|
||||||
<!-- Battery level -->
|
<!-- Battery level -->
|
||||||
<sharedGui:BarLevelView
|
<sharedGui:BarLevelView
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="1"
|
||||||
Current="{Binding CurrentChargeBars}"
|
Current="{Binding CurrentChargeBars}"
|
||||||
Maximum="{Binding MaxChargeBars}"
|
Maximum="{Binding MaxChargeBars}"
|
||||||
Grid.Column="1"
|
|
||||||
VerticalOptions="End"
|
VerticalOptions="End"
|
||||||
IsVisible="{Binding IsBatteryChargeVisible}"/>
|
IsVisible="{Binding IsBatteryChargeVisible}"/>
|
||||||
|
|
||||||
<!-- Name of the bike -->
|
<!-- Name of the bike -->
|
||||||
<StackLayout Grid.Column="2">
|
|
||||||
<Label
|
<Label
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Grid.Row="0"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
FontSize="Large"
|
FontSize="Large"
|
||||||
HorizontalTextAlignment="Right"
|
HorizontalTextAlignment="Right"
|
||||||
Text="{Binding Name}"/>
|
Text="{Binding Name}"/>
|
||||||
|
|
||||||
<!-- Id of the bike -->
|
<!-- Id of the bike -->
|
||||||
<Label
|
<Label
|
||||||
|
Grid.Column="2"
|
||||||
|
Grid.Row="1"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
HorizontalTextAlignment="Right"
|
HorizontalTextAlignment="Right"
|
||||||
IsVisible="{Binding DisplayId, Converter={StaticResource Label_Converter}}"
|
IsVisible="{Binding DisplayId, Converter={StaticResource Label_Converter}}"
|
||||||
Text="{Binding DisplayId}"/>
|
Text="{Binding DisplayId}"/>
|
||||||
</StackLayout>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Rental state -->
|
<!-- Rental state -->
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding StateText}"
|
Text="{Binding StateText}"
|
||||||
|
@ -58,22 +77,16 @@
|
||||||
Text="{Binding ErrorText}"
|
Text="{Binding ErrorText}"
|
||||||
IsVisible="{Binding ErrorText, Converter={StaticResource Label_Converter}}"
|
IsVisible="{Binding ErrorText, Converter={StaticResource Label_Converter}}"
|
||||||
TextColor="Red"/>
|
TextColor="Red"/>
|
||||||
<!-- Low Battery level -->
|
|
||||||
<Label
|
<!-- Buttons -->
|
||||||
x:Name="LowLevelLabel"
|
|
||||||
Text="{x:Static resources:AppResources.StatusTextLowBatteryLevel}"
|
|
||||||
FontSize="Small"
|
|
||||||
IsVisible="{Binding IsCurrentChargeLow}" />
|
|
||||||
<Button
|
<Button
|
||||||
Text="{Binding ButtonText}"
|
Text="{Binding ButtonText}"
|
||||||
IsVisible="{Binding IsButtonVisible}"
|
IsVisible="{Binding IsButtonVisible}"
|
||||||
IsEnabled="{Binding IsIdle}"
|
|
||||||
Command="{Binding OnButtonClicked}"/>
|
Command="{Binding OnButtonClicked}"/>
|
||||||
<Button
|
<Button
|
||||||
Style="{StaticResource SecondaryButton}"
|
Style="{StaticResource SecondaryButton}"
|
||||||
Text="{Binding LockitButtonText}"
|
Text="{Binding LockitButtonText}"
|
||||||
IsVisible="{Binding IsLockitButtonVisible}"
|
IsVisible="{Binding IsLockitButtonVisible}"
|
||||||
IsEnabled="{Binding IsIdle}"
|
|
||||||
Command="{Binding OnLockitButtonClicked}"/>
|
Command="{Binding OnLockitButtonClicked}"/>
|
||||||
<!-- Rental description (tarif name, options and rental info -->
|
<!-- Rental description (tarif name, options and rental info -->
|
||||||
<Grid
|
<Grid
|
||||||
|
@ -224,5 +237,6 @@
|
||||||
Grid.ColumnSpan="2"/>
|
Grid.ColumnSpan="2"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
</Frame>
|
||||||
</ContentView>
|
</ContentView>
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
|
BackgroundColor="{DynamicResource background-color}"
|
||||||
Shell.FlyoutBehavior="Disabled"
|
Shell.FlyoutBehavior="Disabled"
|
||||||
Shell.NavBarIsVisible="{Binding IsIdle}">
|
Shell.NavBarIsVisible="{Binding IsIdle}">
|
||||||
|
|
||||||
|
@ -16,6 +17,7 @@
|
||||||
</Grid>
|
</Grid>
|
||||||
</Shell.TitleView>
|
</Shell.TitleView>
|
||||||
|
|
||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||||
|
@ -26,52 +28,81 @@
|
||||||
|
|
||||||
<!--Grid for Bike(s) view and Running process in same row-->
|
<!--Grid for Bike(s) view and Running process in same row-->
|
||||||
<Grid>
|
<Grid>
|
||||||
|
|
||||||
<StackLayout Grid.Row="0" Spacing="0">
|
|
||||||
|
|
||||||
<!--No Network Connection-->
|
|
||||||
<sharedGui:NotConnectedToNetView/>
|
|
||||||
|
|
||||||
<Frame>
|
|
||||||
|
|
||||||
<!-- Grid for Content -->
|
<!-- Grid for Content -->
|
||||||
<Grid
|
<Grid
|
||||||
RowDefinitions="Auto,1*,Auto,Auto">
|
Grid.Row="0"
|
||||||
|
RowSpacing="0"
|
||||||
|
RowDefinitions="Auto,1*,Auto">
|
||||||
|
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="0"
|
||||||
|
Spacing="0"
|
||||||
|
Orientation="Vertical">
|
||||||
|
|
||||||
<!--Station-->
|
<!--Station-->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Orientation="Vertical">
|
BackgroundColor="{DynamicResource secondary-back-title-color}"
|
||||||
|
IsVisible="{Binding IsIdle}"
|
||||||
<!--Title-->
|
Padding="20,0,20,0">
|
||||||
<Label
|
|
||||||
HorizontalOptions="Center"
|
|
||||||
FontAttributes="Bold"
|
|
||||||
TextColor="{DynamicResource primary-back-title-color}"
|
|
||||||
Text="{Binding StationDetailText}"/>
|
|
||||||
|
|
||||||
<!--Line-->
|
<!--Line-->
|
||||||
<BoxView
|
<BoxView
|
||||||
HeightRequest="1"
|
HeightRequest="1"
|
||||||
Color="{DynamicResource primary-back-title-color}"/>
|
WidthRequest="400"
|
||||||
|
HorizontalOptions="Center"
|
||||||
|
Color="White"/>
|
||||||
|
|
||||||
|
<Grid
|
||||||
|
ColumnDefinitions="Auto,1*"
|
||||||
|
RowDefinitions="Auto"
|
||||||
|
Padding="0,0,0,5">
|
||||||
|
|
||||||
|
<!--Station id-->
|
||||||
|
<Label
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="0"
|
||||||
|
FontSize="Small"
|
||||||
|
HorizontalOptions="Start"
|
||||||
|
TextColor="White"
|
||||||
|
Text="{Binding StationDetailText}"/>
|
||||||
|
|
||||||
|
<!--Contact to operator-->
|
||||||
|
<Label
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="0"
|
||||||
|
TextType="Html"
|
||||||
|
FontSize="Small"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
TextColor="White"
|
||||||
|
Text="{Binding ContactSupportHintText}">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
<!--No Network Connection-->
|
||||||
|
<sharedGui:NotConnectedToNetView/>
|
||||||
|
|
||||||
<!--Bike(s)-->
|
<!--Bike(s)-->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Spacing="0"
|
|
||||||
Grid.Row="1"
|
|
||||||
IsVisible="{Binding IsBikesListVisible}"
|
IsVisible="{Binding IsBikesListVisible}"
|
||||||
Orientation="Vertical">
|
Spacing="0">
|
||||||
|
|
||||||
<!--Hint for Outdated Data.-->
|
<!--Hint for Outdated Data.-->
|
||||||
<sharedGui:HintForRefreshingPageView/>
|
<sharedGui:HintForRefreshingPageView/>
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
|
Grid.Row="1"
|
||||||
x:Name="BikesAtStationListView"
|
x:Name="BikesAtStationListView"
|
||||||
SelectionMode="None"
|
SelectionMode="None"
|
||||||
SelectedItem="{Binding SelectedBike}"
|
SelectedItem="{Binding SelectedBike}"
|
||||||
IsEnabled="{Binding IsIdle}"
|
IsEnabled="{Binding IsIdle}"
|
||||||
HasUnevenRows="True"
|
HasUnevenRows="True"
|
||||||
|
SeparatorVisibility="None"
|
||||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||||
IsPullToRefreshEnabled="True"
|
IsPullToRefreshEnabled="True"
|
||||||
RefreshCommand="{Binding RefreshCommand}"
|
RefreshCommand="{Binding RefreshCommand}"
|
||||||
|
@ -79,43 +110,67 @@
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
<!--No Bikes-->
|
<!--No Bikes-->
|
||||||
<Label
|
<Label
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="20"
|
||||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||||
Text="{Binding NoBikesAtStationText}"/>
|
Text="{Binding NoBikesAtStationText}"/>
|
||||||
|
|
||||||
|
<!--Info at End of Page-->
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="2"
|
||||||
|
Orientation="Vertical"
|
||||||
|
Spacing="0"
|
||||||
|
Padding="20,0,20,0">
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="2"
|
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
TextColor="DimGray"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
Padding="5"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
<!-- Contact and Login at end of page-->
|
<!--Login-->
|
||||||
<StackLayout
|
<StackLayout Spacing="0">
|
||||||
Grid.Row="3"
|
<StackLayout.Triggers>
|
||||||
Orientation="Vertical">
|
<DataTrigger TargetType="StackLayout"
|
||||||
|
Binding="{Binding IsLoginRequiredHintVisible}"
|
||||||
|
Value="false">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</StackLayout.Triggers>
|
||||||
|
|
||||||
<!--Line-->
|
<!--Line-->
|
||||||
<BoxView
|
<BoxView
|
||||||
HeightRequest="1"
|
HeightRequest="1"
|
||||||
Color="{DynamicResource primary-back-title-color}"/>
|
WidthRequest="400"
|
||||||
|
HorizontalOptions="Center"
|
||||||
<!--Contact to operator-->
|
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
||||||
<Label
|
Color="DimGray" />
|
||||||
TextType="Html"
|
|
||||||
Text="{Binding ContactSupportHintText}">
|
|
||||||
<Label.GestureRecognizers>
|
|
||||||
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
|
||||||
</Label.GestureRecognizers>
|
|
||||||
</Label>
|
|
||||||
|
|
||||||
<!--Login required-->
|
<!--Login required-->
|
||||||
<Label
|
<Label
|
||||||
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
||||||
TextType="Html"
|
TextType="Html"
|
||||||
|
TextColor="DimGray"
|
||||||
Text="{Binding LoginRequiredHintText}">
|
Text="{Binding LoginRequiredHintText}">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Command="{Binding LoginRequiredHintClickedCommand}"/>
|
<TapGestureRecognizer Command="{Binding LoginRequiredHintClickedCommand}"/>
|
||||||
|
@ -124,12 +179,10 @@
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
</Frame>
|
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
<!--While process is running-->
|
<!--While process is running-->
|
||||||
<sharedGui:RunningProcessView
|
<sharedGui:RunningProcessView
|
||||||
IsVisible="{Binding IsProcessWithRunningProcessView}"
|
IsVisible="{Binding IsProcessWithRunningProcessView}"
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
x:Class="TINK.View.FindBike.FindBikePage"
|
x:Class="TINK.View.FindBike.FindBikePage"
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View">
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
|
BackgroundColor="{DynamicResource background-color}">
|
||||||
|
|
||||||
<Shell.TitleView>
|
<Shell.TitleView>
|
||||||
<Grid ColumnDefinitions="Auto, 1*">
|
<Grid ColumnDefinitions="Auto, 1*">
|
||||||
|
@ -23,21 +24,28 @@
|
||||||
|
|
||||||
<!--Grid for Bike(s) view and Running process in same row-->
|
<!--Grid for Bike(s) view and Running process in same row-->
|
||||||
<Grid>
|
<Grid>
|
||||||
<StackLayout Grid.Row="0">
|
|
||||||
|
<Grid
|
||||||
|
RowDefinitions="1*,Auto"
|
||||||
|
RowSpacing="0"
|
||||||
|
Grid.Row="0">
|
||||||
|
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="0"
|
||||||
|
Spacing="0"
|
||||||
|
Orientation="Vertical">
|
||||||
|
|
||||||
<!--No Network Connection-->
|
<!--No Network Connection-->
|
||||||
<sharedGui:NotConnectedToNetView/>
|
<sharedGui:NotConnectedToNetView/>
|
||||||
|
|
||||||
<Frame>
|
|
||||||
|
|
||||||
<Grid
|
|
||||||
RowDefinitions="1*,32">
|
|
||||||
|
|
||||||
<!--Search bike-->
|
<!--Search bike-->
|
||||||
<StackLayout>
|
<StackLayout
|
||||||
|
BackgroundColor="White"
|
||||||
|
IsVisible="{Binding IsSelectBikeVisible}"
|
||||||
|
Padding="20">
|
||||||
|
|
||||||
<Entry
|
<Entry
|
||||||
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
||||||
IsVisible="{Binding IsSelectBikeVisible}"
|
|
||||||
MaxLength="10"
|
MaxLength="10"
|
||||||
CursorPosition="0"
|
CursorPosition="0"
|
||||||
Text="{Binding BikeIdUserInput}"/>
|
Text="{Binding BikeIdUserInput}"/>
|
||||||
|
@ -45,9 +53,11 @@
|
||||||
<Button
|
<Button
|
||||||
Text="{x:Static resources:AppResources.MarkingFindBike}"
|
Text="{x:Static resources:AppResources.MarkingFindBike}"
|
||||||
IsEnabled="{Binding IsSelectBikeEnabled}"
|
IsEnabled="{Binding IsSelectBikeEnabled}"
|
||||||
IsVisible="{Binding IsSelectBikeVisible}"
|
|
||||||
Command="{Binding OnSelectBikeRequest}"/>
|
Command="{Binding OnSelectBikeRequest}"/>
|
||||||
|
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
|
<!-- Bike -->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Spacing="0"
|
Spacing="0"
|
||||||
IsVisible="{Binding IsBikesListVisible}"
|
IsVisible="{Binding IsBikesListVisible}"
|
||||||
|
@ -62,6 +72,7 @@
|
||||||
SelectedItem="{Binding SelectedBike}"
|
SelectedItem="{Binding SelectedBike}"
|
||||||
IsEnabled="{Binding IsIdle}"
|
IsEnabled="{Binding IsIdle}"
|
||||||
HasUnevenRows="True"
|
HasUnevenRows="True"
|
||||||
|
SeparatorVisibility="None"
|
||||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||||
IsPullToRefreshEnabled="True"
|
IsPullToRefreshEnabled="True"
|
||||||
RefreshCommand="{Binding RefreshCommand}"
|
RefreshCommand="{Binding RefreshCommand}"
|
||||||
|
@ -77,15 +88,25 @@
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
Padding="5"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
TextColor="DimGray"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</Frame>
|
|
||||||
|
|
||||||
</StackLayout>
|
|
||||||
|
|
||||||
<!--While process is running-->
|
<!--While process is running-->
|
||||||
<sharedGui:RunningProcessView
|
<sharedGui:RunningProcessView
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
x:Class="TINK.View.Map.MapPage"
|
x:Class="TINK.View.Map.MapPage"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
Shell.NavBarIsVisible="{Binding IsNavBarVisible}"
|
Shell.NavBarIsVisible="{Binding IsNavBarVisible}"
|
||||||
BackgroundColor="{DynamicResource Key=primary-back-title-color}">
|
BackgroundColor="{DynamicResource Key=background-color}">
|
||||||
|
|
||||||
<Shell.TitleView >
|
<Shell.TitleView >
|
||||||
<Grid ColumnDefinitions="Auto, 1*">
|
<Grid ColumnDefinitions="Auto, 1*">
|
||||||
|
@ -17,6 +17,7 @@
|
||||||
</Grid>
|
</Grid>
|
||||||
</Shell.TitleView>
|
</Shell.TitleView>
|
||||||
|
|
||||||
|
|
||||||
<ContentPage.Content>
|
<ContentPage.Content>
|
||||||
|
|
||||||
<!--Grid for Map with Buttons and Running process-->
|
<!--Grid for Map with Buttons and Running process-->
|
||||||
|
@ -28,9 +29,10 @@
|
||||||
|
|
||||||
<sharedGui:NotConnectedToNetView/>
|
<sharedGui:NotConnectedToNetView/>
|
||||||
|
|
||||||
<Grid Grid.Row="1"
|
<Grid
|
||||||
RowDefinitions="3,46,1*,32"
|
RowDefinitions="20,46,1*,Auto"
|
||||||
ColumnDefinitions="1*,Auto,1*"
|
ColumnDefinitions="1*,Auto,1*"
|
||||||
|
RowSpacing="0"
|
||||||
IsEnabled="{Binding IsMapPageEnabled}"
|
IsEnabled="{Binding IsMapPageEnabled}"
|
||||||
VerticalOptions="FillAndExpand">
|
VerticalOptions="FillAndExpand">
|
||||||
|
|
||||||
|
@ -75,7 +77,7 @@
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
WidthRequest="94"
|
WidthRequest="94"
|
||||||
HeightRequest="40"
|
HeightRequest="40"
|
||||||
BorderRadius="10"
|
CornerRadius="10"
|
||||||
Margin="3,0,0,0"
|
Margin="3,0,0,0"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
|
@ -94,7 +96,7 @@
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
WidthRequest="94"
|
WidthRequest="94"
|
||||||
HeightRequest="40"
|
HeightRequest="40"
|
||||||
BorderRadius="10"
|
CornerRadius="10"
|
||||||
Margin="0,0,3,0"
|
Margin="0,0,3,0"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
|
@ -103,16 +105,107 @@
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Frame>
|
</Frame>
|
||||||
|
|
||||||
|
<!--MyBikes-->
|
||||||
|
<Frame
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="3"
|
||||||
|
Margin="0,0,0,20"
|
||||||
|
Padding="0"
|
||||||
|
BackgroundColor="White"
|
||||||
|
HasShadow="True"
|
||||||
|
VerticalOptions="End"
|
||||||
|
HorizontalOptions="CenterAndExpand"
|
||||||
|
BorderColor="{DynamicResource primary-back-title-color}"
|
||||||
|
CornerRadius="10">
|
||||||
|
<Frame.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Frame"
|
||||||
|
Binding="{Binding Path=MyBikesCountText.Length}" Value="0">
|
||||||
|
<Setter Property="IsVisible" Value="false" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Frame.Triggers>
|
||||||
|
<Frame.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" />
|
||||||
|
</Frame.GestureRecognizers>
|
||||||
|
<Grid
|
||||||
|
RowDefinitions="18,Auto,1*"
|
||||||
|
ColumnDefinitions="Auto"
|
||||||
|
RowSpacing="0">
|
||||||
|
<Image
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="-5">
|
||||||
|
<Image.Source>
|
||||||
|
<FontImageSource
|
||||||
|
Glyph="{StaticResource IconMyBikes}"
|
||||||
|
Color="DimGray" FontFamily="FA-S"/>
|
||||||
|
</Image.Source>
|
||||||
|
</Image>
|
||||||
|
<BoxView
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||||
|
WidthRequest="20"
|
||||||
|
HeightRequest="20"
|
||||||
|
CornerRadius="10"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
VerticalOptions="Start"
|
||||||
|
Margin="5"/>
|
||||||
|
<Frame
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||||
|
WidthRequest="20"
|
||||||
|
HeightRequest="20"
|
||||||
|
CornerRadius="50"
|
||||||
|
HasShadow="False"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
VerticalOptions="Start"
|
||||||
|
Padding="0"
|
||||||
|
Margin="5">
|
||||||
|
<Label
|
||||||
|
Text="{Binding MyBikesCountText}"
|
||||||
|
FontSize="Medium"
|
||||||
|
FontAttributes="Bold"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
HorizontalOptions="Center"
|
||||||
|
TextColor="White"
|
||||||
|
Padding="0"
|
||||||
|
Margin="-10"/>
|
||||||
|
</Frame>
|
||||||
|
<Label
|
||||||
|
Grid.Row="2"
|
||||||
|
Text="{x:Static resources:AppResources.MarkingMyBikes}"
|
||||||
|
FontSize="Micro"
|
||||||
|
TextColor="DimGray"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
Margin="10,0,10,5"
|
||||||
|
Padding="0"/>
|
||||||
|
</Grid>
|
||||||
|
</Frame>
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="3"
|
Grid.Row="3"
|
||||||
Grid.ColumnSpan="3"
|
Grid.ColumnSpan="3"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
TextColor="White"
|
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
TextColor="DimGray"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
@ -122,7 +215,6 @@
|
||||||
<sharedGui:RunningProcessView
|
<sharedGui:RunningProcessView
|
||||||
IsVisible="{Binding IsProcessWithRunningProcessView}"
|
IsVisible="{Binding IsProcessWithRunningProcessView}"
|
||||||
Grid.Row="0"/>
|
Grid.Row="0"/>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</ContentPage.Content>
|
</ContentPage.Content>
|
||||||
|
|
|
@ -175,16 +175,6 @@ namespace TINK.View.Map
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ApplyCustomiOSStyling();
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
// Continue because styling is not essential.
|
|
||||||
Log.ForContext<MapPage>().Error("IOS specific styling of map page failed. {Exception}", exception);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
base.OnAppearing();
|
base.OnAppearing();
|
||||||
|
@ -250,22 +240,6 @@ namespace TINK.View.Map
|
||||||
Navigation);
|
Navigation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Applies iOS specific styling to branded Buttons.
|
|
||||||
/// </summary>
|
|
||||||
private void ApplyCustomiOSStyling()
|
|
||||||
{
|
|
||||||
if (Device.RuntimePlatform == Device.iOS)
|
|
||||||
{
|
|
||||||
TINKButton.BackgroundColor = Color.LightGray;
|
|
||||||
TINKButton.BorderColor = Color.Black;
|
|
||||||
TINKButton.Margin = new Thickness(10, 10, 10, 10);
|
|
||||||
KonradButton.BackgroundColor = Color.LightGray;
|
|
||||||
KonradButton.BorderColor = Color.Black;
|
|
||||||
KonradButton.Margin = new Thickness(10, 10, 10, 10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invoked when pages is closed/ hidden.
|
/// Invoked when pages is closed/ hidden.
|
||||||
/// Stops update process.
|
/// Stops update process.
|
||||||
|
|
|
@ -6,7 +6,9 @@
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||||
Shell.FlyoutBehavior="{Binding FlyoutBehavior}">
|
BackgroundColor="{DynamicResource background-color}"
|
||||||
|
Shell.FlyoutBehavior="{Binding FlyoutBehavior}"
|
||||||
|
>
|
||||||
|
|
||||||
<Shell.TitleView>
|
<Shell.TitleView>
|
||||||
<Grid ColumnDefinitions="Auto, 1*">
|
<Grid ColumnDefinitions="Auto, 1*">
|
||||||
|
@ -16,6 +18,7 @@
|
||||||
</Grid>
|
</Grid>
|
||||||
</Shell.TitleView>
|
</Shell.TitleView>
|
||||||
|
|
||||||
|
|
||||||
<ContentPage.Resources>
|
<ContentPage.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||||
|
@ -27,17 +30,20 @@
|
||||||
<!--Grid for Bike(s) view and Running process in same row-->
|
<!--Grid for Bike(s) view and Running process in same row-->
|
||||||
<Grid>
|
<Grid>
|
||||||
|
|
||||||
<StackLayout Grid.Row="0">
|
<!--Bike(s) view-->
|
||||||
|
<Grid
|
||||||
|
RowDefinitions="1*,Auto"
|
||||||
|
RowSpacing="0"
|
||||||
|
Grid.Row="0">
|
||||||
|
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="0"
|
||||||
|
Spacing="0"
|
||||||
|
Orientation="Vertical">
|
||||||
|
|
||||||
<!--No Network Connection-->
|
<!--No Network Connection-->
|
||||||
<sharedGui:NotConnectedToNetView/>
|
<sharedGui:NotConnectedToNetView/>
|
||||||
|
|
||||||
<Frame>
|
|
||||||
|
|
||||||
<!--Bike(s) view-->
|
|
||||||
<Grid
|
|
||||||
RowDefinitions="1*,32">
|
|
||||||
|
|
||||||
<!--Bike(s)-->
|
<!--Bike(s)-->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Spacing="0"
|
Spacing="0"
|
||||||
|
@ -53,6 +59,7 @@
|
||||||
SelectedItem="{Binding SelectedBike}"
|
SelectedItem="{Binding SelectedBike}"
|
||||||
IsEnabled="{Binding IsIdle}"
|
IsEnabled="{Binding IsIdle}"
|
||||||
HasUnevenRows="True"
|
HasUnevenRows="True"
|
||||||
|
SeparatorVisibility="None"
|
||||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||||
IsPullToRefreshEnabled="True"
|
IsPullToRefreshEnabled="True"
|
||||||
RefreshCommand="{Binding RefreshCommand}"
|
RefreshCommand="{Binding RefreshCommand}"
|
||||||
|
@ -62,25 +69,37 @@
|
||||||
|
|
||||||
<!--No Bikes-->
|
<!--No Bikes-->
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="0"
|
Margin="20"
|
||||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||||
Text="{Binding NoBikesOccupiedText}"/>
|
Text="{Binding NoBikesOccupiedText}"/>
|
||||||
|
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
TextColor="DimGray"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
Padding="5"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</Frame>
|
|
||||||
|
|
||||||
</StackLayout>
|
|
||||||
|
|
||||||
<!--While process is running-->
|
<!--While process is running-->
|
||||||
<sharedGui:RunningProcessView
|
<sharedGui:RunningProcessView
|
||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.360" android:versionCode="360">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.361" android:versionCode="361">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
2
TINK/TINK.Android/Resources/Resource.Designer.cs
generated
2
TINK/TINK.Android/Resources/Resource.Designer.cs
generated
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.0.0.73")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||||
public partial class Resource
|
public partial class Resource
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>sharee.bike</string>
|
<string>sharee.bike</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>360</string>
|
<string>361</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.360</string>
|
<string>3.0.361</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
Shell.FlyoutBehavior="Disabled"
|
Shell.FlyoutBehavior="Disabled"
|
||||||
BackgroundColor="#f6f6f6"
|
BackgroundColor="{DynamicResource background-color}"
|
||||||
Shell.NavBarIsVisible="{Binding IsIdle}">
|
Shell.NavBarIsVisible="{Binding IsIdle}">
|
||||||
|
|
||||||
<Shell.TitleView>
|
<Shell.TitleView>
|
||||||
|
@ -28,7 +28,9 @@
|
||||||
<!--Grid for Bike(s) view and Running process in same row-->
|
<!--Grid for Bike(s) view and Running process in same row-->
|
||||||
<Grid>
|
<Grid>
|
||||||
<!-- Grid for Content -->
|
<!-- Grid for Content -->
|
||||||
<Grid Grid.Row="0"
|
<Grid
|
||||||
|
Grid.Row="0"
|
||||||
|
RowSpacing="0"
|
||||||
RowDefinitions="Auto,1*,Auto">
|
RowDefinitions="Auto,1*,Auto">
|
||||||
|
|
||||||
<StackLayout
|
<StackLayout
|
||||||
|
@ -38,23 +40,47 @@
|
||||||
|
|
||||||
<!--Station-->
|
<!--Station-->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
BackgroundColor="{DynamicResource primary-back-title-color}">
|
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||||
|
IsVisible="{Binding IsIdle}"
|
||||||
|
Padding="20,0,20,0">
|
||||||
|
|
||||||
<!--Line-->
|
<!--Line-->
|
||||||
<BoxView
|
<BoxView
|
||||||
HeightRequest="1"
|
HeightRequest="1"
|
||||||
WidthRequest="260"
|
WidthRequest="400"
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
Color="White"/>
|
Color="White"/>
|
||||||
|
|
||||||
<!--Title-->
|
<Grid
|
||||||
|
ColumnDefinitions="Auto,1*"
|
||||||
|
RowDefinitions="Auto"
|
||||||
|
Padding="0,0,0,5">
|
||||||
|
|
||||||
|
<!--Station id-->
|
||||||
<Label
|
<Label
|
||||||
HorizontalOptions="Center"
|
Grid.Column="0"
|
||||||
FontAttributes="Bold"
|
Grid.Row="0"
|
||||||
Padding="10,0,10,10"
|
FontSize="Small"
|
||||||
|
HorizontalOptions="Start"
|
||||||
TextColor="White"
|
TextColor="White"
|
||||||
Text="{Binding StationDetailText}"/>
|
Text="{Binding StationDetailText}"/>
|
||||||
|
|
||||||
|
<!--Contact to operator-->
|
||||||
|
<Label
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="0"
|
||||||
|
TextType="Html"
|
||||||
|
FontSize="Small"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
TextColor="White"
|
||||||
|
Text="{Binding ContactSupportHintText}">
|
||||||
|
<Label.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
||||||
|
</Label.GestureRecognizers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
<!--No Network Connection-->
|
<!--No Network Connection-->
|
||||||
|
@ -68,7 +94,8 @@
|
||||||
<!--Hint for Outdated Data.-->
|
<!--Hint for Outdated Data.-->
|
||||||
<sharedGui:HintForRefreshingPageView/>
|
<sharedGui:HintForRefreshingPageView/>
|
||||||
|
|
||||||
<ListView Grid.Row="1"
|
<ListView
|
||||||
|
Grid.Row="1"
|
||||||
x:Name="BikesAtStationListView"
|
x:Name="BikesAtStationListView"
|
||||||
SelectionMode="None"
|
SelectionMode="None"
|
||||||
SelectedItem="{Binding SelectedBike}"
|
SelectedItem="{Binding SelectedBike}"
|
||||||
|
@ -85,51 +112,64 @@
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
<!--No Bikes-->
|
<!--No Bikes-->
|
||||||
<Label Grid.Row="1" Padding="10"
|
<Label
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="20"
|
||||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||||
Text="{Binding NoBikesAtStationText}"/>
|
Text="{Binding NoBikesAtStationText}"/>
|
||||||
|
|
||||||
|
<!--Info at End of Page-->
|
||||||
<StackLayout
|
<StackLayout
|
||||||
Grid.Row="2"
|
Grid.Row="2"
|
||||||
Orientation="Vertical"
|
Orientation="Vertical"
|
||||||
BackgroundColor="{DynamicResource primary-back-title-color}"
|
Spacing="0"
|
||||||
Padding="0,0,0,10">
|
Padding="20,0,20,0">
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
Padding="10,5,10,0"
|
TextColor="DimGray"
|
||||||
TextColor="White"
|
Padding="5"
|
||||||
HorizontalOptions="CenterAndExpand"
|
HorizontalOptions="CenterAndExpand">
|
||||||
VerticalOptions="CenterAndExpand"/>
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
|
<!--Login-->
|
||||||
|
<StackLayout Spacing="0">
|
||||||
|
<StackLayout.Triggers>
|
||||||
|
<DataTrigger TargetType="StackLayout"
|
||||||
|
Binding="{Binding IsLoginRequiredHintVisible}"
|
||||||
|
Value="false">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</StackLayout.Triggers>
|
||||||
|
|
||||||
<!-- Contact and Login at end of page-->
|
|
||||||
<!--Line-->
|
<!--Line-->
|
||||||
<BoxView
|
<BoxView
|
||||||
HeightRequest="1"
|
HeightRequest="1"
|
||||||
WidthRequest="260"
|
WidthRequest="400"
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
Color="White"/>
|
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
||||||
|
Color="DimGray" />
|
||||||
<!--Contact to operator-->
|
|
||||||
<Label
|
|
||||||
TextType="Html"
|
|
||||||
Padding="10,5,10,0"
|
|
||||||
TextColor="White"
|
|
||||||
Text="{Binding ContactSupportHintText}">
|
|
||||||
<Label.GestureRecognizers>
|
|
||||||
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
|
||||||
</Label.GestureRecognizers>
|
|
||||||
</Label>
|
|
||||||
|
|
||||||
<!--Login required-->
|
<!--Login required-->
|
||||||
<Label
|
<Label
|
||||||
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
IsVisible="{Binding IsLoginRequiredHintVisible}"
|
||||||
TextType="Html"
|
TextType="Html"
|
||||||
Padding="10,5,10,0"
|
TextColor="DimGray"
|
||||||
TextColor="White"
|
|
||||||
Text="{Binding LoginRequiredHintText}">
|
Text="{Binding LoginRequiredHintText}">
|
||||||
<Label.GestureRecognizers>
|
<Label.GestureRecognizers>
|
||||||
<TapGestureRecognizer Command="{Binding LoginRequiredHintClickedCommand}"/>
|
<TapGestureRecognizer Command="{Binding LoginRequiredHintClickedCommand}"/>
|
||||||
|
@ -138,6 +178,8 @@
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!--While process is running-->
|
<!--While process is running-->
|
||||||
|
|
|
@ -19,8 +19,9 @@
|
||||||
|
|
||||||
<!--Grid for Map with Buttons and Running process-->
|
<!--Grid for Map with Buttons and Running process-->
|
||||||
<Grid
|
<Grid
|
||||||
RowDefinitions="3,46,1*,32"
|
RowDefinitions="3,46,1*,Auto"
|
||||||
ColumnDefinitions="1*,Auto,1*"
|
ColumnDefinitions="1*,Auto,1*"
|
||||||
|
RowSpacing="0"
|
||||||
IsEnabled="{Binding IsMapPageEnabled}"
|
IsEnabled="{Binding IsMapPageEnabled}"
|
||||||
VerticalOptions="FillAndExpand">
|
VerticalOptions="FillAndExpand">
|
||||||
|
|
||||||
|
@ -118,10 +119,18 @@
|
||||||
Grid.ColumnSpan="3"
|
Grid.ColumnSpan="3"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
TextColor="White"
|
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
Padding="5"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
TextColor="DimGray"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
<!--While process is running-->
|
<!--While process is running-->
|
||||||
<sharedGui:RunningProcessView
|
<sharedGui:RunningProcessView
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
BackgroundColor="#f6f6f6">
|
BackgroundColor="{DynamicResource background-color}">
|
||||||
|
|
||||||
<Shell.TitleView>
|
<Shell.TitleView>
|
||||||
<Grid ColumnDefinitions="Auto, 1*">
|
<Grid ColumnDefinitions="Auto, 1*">
|
||||||
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
<Grid
|
<Grid
|
||||||
RowDefinitions="1*,Auto"
|
RowDefinitions="1*,Auto"
|
||||||
|
RowSpacing="0"
|
||||||
Grid.Row="0">
|
Grid.Row="0">
|
||||||
|
|
||||||
<StackLayout
|
<StackLayout
|
||||||
|
@ -42,7 +43,7 @@
|
||||||
<StackLayout
|
<StackLayout
|
||||||
BackgroundColor="White"
|
BackgroundColor="White"
|
||||||
IsVisible="{Binding IsSelectBikeVisible}"
|
IsVisible="{Binding IsSelectBikeVisible}"
|
||||||
Padding="10">
|
Padding="20">
|
||||||
|
|
||||||
<Entry
|
<Entry
|
||||||
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
||||||
|
@ -83,19 +84,27 @@
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<StackLayout
|
|
||||||
BackgroundColor="#f6f6f6"
|
|
||||||
Padding="10,5,10,10"
|
|
||||||
Grid.Row="1">
|
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
|
Grid.Row="1"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
Padding="5"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
TextColor="DimGray"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
</StackLayout>
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
x:Class="TINK.View.Map.MapPage"
|
x:Class="TINK.View.Map.MapPage"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
Shell.NavBarIsVisible="{Binding IsNavBarVisible}"
|
Shell.NavBarIsVisible="{Binding IsNavBarVisible}"
|
||||||
BackgroundColor="{DynamicResource Key=primary-back-title-color}">
|
BackgroundColor="{DynamicResource Key=background-color}">
|
||||||
|
|
||||||
<Shell.TitleView >
|
<Shell.TitleView >
|
||||||
<Grid ColumnDefinitions="Auto, 1*">
|
<Grid ColumnDefinitions="Auto, 1*">
|
||||||
|
@ -28,8 +28,9 @@
|
||||||
<sharedGui:NotConnectedToNetView/>
|
<sharedGui:NotConnectedToNetView/>
|
||||||
|
|
||||||
<Grid
|
<Grid
|
||||||
RowDefinitions="3,46,1*,32"
|
RowDefinitions="20,46,1*,Auto"
|
||||||
ColumnDefinitions="1*,Auto,1*"
|
ColumnDefinitions="1*,Auto,1*"
|
||||||
|
RowSpacing="0"
|
||||||
IsEnabled="{Binding IsMapPageEnabled}"
|
IsEnabled="{Binding IsMapPageEnabled}"
|
||||||
VerticalOptions="FillAndExpand">
|
VerticalOptions="FillAndExpand">
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
WidthRequest="94"
|
WidthRequest="94"
|
||||||
HeightRequest="40"
|
HeightRequest="40"
|
||||||
BorderRadius="10"
|
CornerRadius="10"
|
||||||
Margin="3,0,0,0"
|
Margin="3,0,0,0"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
|
@ -93,7 +94,7 @@
|
||||||
HorizontalOptions="Center"
|
HorizontalOptions="Center"
|
||||||
WidthRequest="94"
|
WidthRequest="94"
|
||||||
HeightRequest="40"
|
HeightRequest="40"
|
||||||
BorderRadius="10"
|
CornerRadius="10"
|
||||||
Margin="0,0,3,0"
|
Margin="0,0,3,0"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
FontAttributes="Bold"
|
FontAttributes="Bold"
|
||||||
|
@ -102,16 +103,107 @@
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Frame>
|
</Frame>
|
||||||
|
|
||||||
|
<!--MyBikes-->
|
||||||
|
<Frame
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="3"
|
||||||
|
Margin="0,0,0,20"
|
||||||
|
Padding="0"
|
||||||
|
BackgroundColor="White"
|
||||||
|
HasShadow="True"
|
||||||
|
VerticalOptions="End"
|
||||||
|
HorizontalOptions="CenterAndExpand"
|
||||||
|
BorderColor="{DynamicResource primary-back-title-color}"
|
||||||
|
CornerRadius="10">
|
||||||
|
<Frame.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Frame"
|
||||||
|
Binding="{Binding Path=MyBikesCountText.Length}" Value="0">
|
||||||
|
<Setter Property="IsVisible" Value="false" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Frame.Triggers>
|
||||||
|
<Frame.GestureRecognizers>
|
||||||
|
<TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" />
|
||||||
|
</Frame.GestureRecognizers>
|
||||||
|
<Grid
|
||||||
|
RowDefinitions="18,Auto,1*"
|
||||||
|
ColumnDefinitions="Auto"
|
||||||
|
RowSpacing="0">
|
||||||
|
<Image
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="-5">
|
||||||
|
<Image.Source>
|
||||||
|
<FontImageSource
|
||||||
|
Glyph="{StaticResource IconMyBikes}"
|
||||||
|
Color="DimGray" FontFamily="FA-S"/>
|
||||||
|
</Image.Source>
|
||||||
|
</Image>
|
||||||
|
<BoxView
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||||
|
WidthRequest="20"
|
||||||
|
HeightRequest="20"
|
||||||
|
CornerRadius="10"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
VerticalOptions="Start"
|
||||||
|
Margin="5"/>
|
||||||
|
<Frame
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.RowSpan="2"
|
||||||
|
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||||
|
WidthRequest="20"
|
||||||
|
HeightRequest="20"
|
||||||
|
CornerRadius="50"
|
||||||
|
HasShadow="False"
|
||||||
|
HorizontalOptions="End"
|
||||||
|
VerticalOptions="Start"
|
||||||
|
Padding="0"
|
||||||
|
Margin="5">
|
||||||
|
<Label
|
||||||
|
Text="{Binding MyBikesCountText}"
|
||||||
|
FontSize="Medium"
|
||||||
|
FontAttributes="Bold"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
HorizontalOptions="Center"
|
||||||
|
TextColor="White"
|
||||||
|
Padding="0"
|
||||||
|
Margin="-10"/>
|
||||||
|
</Frame>
|
||||||
|
<Label
|
||||||
|
Grid.Row="2"
|
||||||
|
Text="{x:Static resources:AppResources.MarkingMyBikes}"
|
||||||
|
FontSize="Micro"
|
||||||
|
TextColor="DimGray"
|
||||||
|
VerticalOptions="Center"
|
||||||
|
Margin="10,0,10,5"
|
||||||
|
Padding="0"/>
|
||||||
|
</Grid>
|
||||||
|
</Frame>
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="3"
|
Grid.Row="3"
|
||||||
Grid.ColumnSpan="3"
|
Grid.ColumnSpan="3"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
TextColor="White"
|
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
TextColor="DimGray"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
HorizontalOptions="CenterAndExpand">
|
||||||
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
|
@ -175,16 +175,6 @@ namespace TINK.View.Map
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ApplyCustomiOSStyling();
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
// Continue because styling is not essential.
|
|
||||||
Log.ForContext<MapPage>().Error("IOS specific styling of map page failed. {Exception}", exception);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
base.OnAppearing();
|
base.OnAppearing();
|
||||||
|
@ -250,22 +240,6 @@ namespace TINK.View.Map
|
||||||
Navigation);
|
Navigation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Applies iOS specific styling to branded Buttons.
|
|
||||||
/// </summary>
|
|
||||||
private void ApplyCustomiOSStyling()
|
|
||||||
{
|
|
||||||
if (Device.RuntimePlatform == Device.iOS)
|
|
||||||
{
|
|
||||||
TINKButton.BackgroundColor = Color.LightGray;
|
|
||||||
TINKButton.BorderColor = Color.Black;
|
|
||||||
TINKButton.Margin = new Thickness(10, 10, 10, 10);
|
|
||||||
KonradButton.BackgroundColor = Color.LightGray;
|
|
||||||
KonradButton.BorderColor = Color.Black;
|
|
||||||
KonradButton.Margin = new Thickness(10, 10, 10, 10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invoked when pages is closed/ hidden.
|
/// Invoked when pages is closed/ hidden.
|
||||||
/// Stops update process.
|
/// Stops update process.
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||||
BackgroundColor="#f6f6f6"
|
BackgroundColor="{DynamicResource background-color}"
|
||||||
Shell.FlyoutBehavior="{Binding FlyoutBehavior}">
|
Shell.FlyoutBehavior="{Binding FlyoutBehavior}">
|
||||||
|
|
||||||
<Shell.TitleView>
|
<Shell.TitleView>
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
<!--Bike(s) view-->
|
<!--Bike(s) view-->
|
||||||
<Grid
|
<Grid
|
||||||
RowDefinitions="1*,Auto"
|
RowDefinitions="1*,Auto"
|
||||||
|
RowSpacing="0"
|
||||||
Grid.Row="0">
|
Grid.Row="0">
|
||||||
|
|
||||||
<StackLayout
|
<StackLayout
|
||||||
|
@ -65,26 +66,34 @@
|
||||||
|
|
||||||
<!--No Bikes-->
|
<!--No Bikes-->
|
||||||
<Label
|
<Label
|
||||||
Padding="10"
|
Margin="20"
|
||||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||||
Text="{Binding NoBikesOccupiedText}"/>
|
Text="{Binding NoBikesOccupiedText}"/>
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
<!--Info text-->
|
<!--Info text-->
|
||||||
<StackLayout
|
|
||||||
BackgroundColor="#f6f6f6"
|
|
||||||
Padding="10,5,10,10"
|
|
||||||
Grid.Row="1">
|
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
|
Grid.Row="1"
|
||||||
Text="{Binding StatusInfoText}"
|
Text="{Binding StatusInfoText}"
|
||||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||||
FontSize="Small"
|
FontSize="Small"
|
||||||
HorizontalOptions="CenterAndExpand"
|
TextColor="DimGray"
|
||||||
VerticalOptions="CenterAndExpand"/>
|
Padding="5"
|
||||||
|
HorizontalOptions="CenterAndExpand">
|
||||||
</StackLayout>
|
<Label.Triggers>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
<DataTrigger
|
||||||
|
TargetType="Label"
|
||||||
|
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||||
|
<Setter Property="HeightRequest" Value="0" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Label.Triggers>
|
||||||
|
</Label>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|
|
@ -676,6 +676,11 @@ namespace TINK.Model
|
||||||
new Version(3, 0, 360),
|
new Version(3, 0, 360),
|
||||||
AppResources.ChangeLog_3_0_358_MK_SB,
|
AppResources.ChangeLog_3_0_358_MK_SB,
|
||||||
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new Version(3, 0, 361),
|
||||||
|
AppResources.ChangeLog_3_0_361_MK_SB,
|
||||||
|
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -757,6 +757,15 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to If you have reserved or rented a bike, this will now be shown to you as an icon on the map page. Clicking on it will take you directly to the 'My bikes' page. We have also made small design changes..
|
||||||
|
/// </summary>
|
||||||
|
public static string ChangeLog_3_0_361_MK_SB {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ChangeLog_3_0_361_MK_SB", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to We have fixed some bugs. Enjoy the ride!.
|
/// Looks up a localized string similar to We have fixed some bugs. Enjoy the ride!.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1873,7 +1882,7 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Station id: {0}.
|
/// Looks up a localized string similar to ID: {0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string MarkingBikesAtStationStationId {
|
public static string MarkingBikesAtStationStationId {
|
||||||
get {
|
get {
|
||||||
|
@ -1945,7 +1954,7 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to <font color="blue"><u>Contact</u></font> {0}..
|
/// Looks up a localized string similar to <u>Contact</u> {0}..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string MarkingContactSupport {
|
public static string MarkingContactSupport {
|
||||||
get {
|
get {
|
||||||
|
|
|
@ -599,7 +599,7 @@ Layout Anzeige Radnamen und nummern verbessert.</value>
|
||||||
<value>Wahl eines Rads über die Radnummer hinzugefügt.</value>
|
<value>Wahl eines Rads über die Radnummer hinzugefügt.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingContactSupport" xml:space="preserve">
|
<data name="MarkingContactSupport" xml:space="preserve">
|
||||||
<value>{0} <font color="blue"><u>kontaktieren</u></font>.</value>
|
<value>{0} <u>kontaktieren</u>.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingLoginRequiredToRerserve" xml:space="preserve">
|
<data name="MarkingLoginRequiredToRerserve" xml:space="preserve">
|
||||||
<value>Bitte Anmelden um Fahrräder zu reservieren! <font color="blue"><u>Hier</u></font> tippen, um auf Anmeldeseite zu wechseln.</value>
|
<value>Bitte Anmelden um Fahrräder zu reservieren! <font color="blue"><u>Hier</u></font> tippen, um auf Anmeldeseite zu wechseln.</value>
|
||||||
|
@ -694,7 +694,7 @@ Kleinere Verbesserungen.</value>
|
||||||
<value>Komponenten von Fremdanbietern aktualisiert.</value>
|
<value>Komponenten von Fremdanbietern aktualisiert.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingBikesAtStationStationId" xml:space="preserve">
|
<data name="MarkingBikesAtStationStationId" xml:space="preserve">
|
||||||
<value>Stationskennung: {0}</value>
|
<value>ID: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog3_0_250" xml:space="preserve">
|
<data name="ChangeLog3_0_250" xml:space="preserve">
|
||||||
<value>Anzeige Stationskennung.
|
<value>Anzeige Stationskennung.
|
||||||
|
@ -1140,4 +1140,7 @@ Wenn sich das Schloss weiterhin nicht öffnen lässt, vergewissern Sie sich, das
|
||||||
<value>Neue Funktionen:<ul><li>Wenn Ihr Gerät nicht mit dem Internet verbunden ist, wird dies nun oben angezeigt.</li><li>Sie können jetzt Ihre Fahrradansicht aktualisieren, indem Sie von oben nach unten ziehen. Das ist besonders nützlich, wenn Sie sich wieder mit dem Internet verbunden haben.</li></ul>
|
<value>Neue Funktionen:<ul><li>Wenn Ihr Gerät nicht mit dem Internet verbunden ist, wird dies nun oben angezeigt.</li><li>Sie können jetzt Ihre Fahrradansicht aktualisieren, indem Sie von oben nach unten ziehen. Das ist besonders nützlich, wenn Sie sich wieder mit dem Internet verbunden haben.</li></ul>
|
||||||
<br/>Außerdem:<ul><li>Software Pakete wurde aktualisiert.</li><li>Kleinere Fehlerbehebungen.</li></ul></value>
|
<br/>Außerdem:<ul><li>Software Pakete wurde aktualisiert.</li><li>Kleinere Fehlerbehebungen.</li></ul></value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ChangeLog_3_0_361_MK_SB" xml:space="preserve">
|
||||||
|
<value>Wenn Sie ein Rad reserviert oder gemietet haben, wird dies Ihnen nun auf der Kartenseite als Symbol angezeigt. Ein Klick darauf führt Sie direkt zur Seite 'Meine Räder'. Wir haben außerdem kleine Designänderungen vorgenommen.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -717,7 +717,7 @@ Layout of bike names and id display improved.</value>
|
||||||
<value>Contact operator?</value>
|
<value>Contact operator?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingContactSupport" xml:space="preserve">
|
<data name="MarkingContactSupport" xml:space="preserve">
|
||||||
<value><font color="blue"><u>Contact</u></font> {0}.</value>
|
<value><u>Contact</u> {0}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingLoginRequiredToRerserve" xml:space="preserve">
|
<data name="MarkingLoginRequiredToRerserve" xml:space="preserve">
|
||||||
<value>Please login to reserve bikes! Tap <font color="blue"><u>here</u></font> to switch to login page.</value>
|
<value>Please login to reserve bikes! Tap <font color="blue"><u>here</u></font> to switch to login page.</value>
|
||||||
|
@ -802,7 +802,7 @@ Minor fixes.</value>
|
||||||
<value>Third-party components updated.</value>
|
<value>Third-party components updated.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="MarkingBikesAtStationStationId" xml:space="preserve">
|
<data name="MarkingBikesAtStationStationId" xml:space="preserve">
|
||||||
<value>Station id: {0}</value>
|
<value>ID: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog3_0_250" xml:space="preserve">
|
<data name="ChangeLog3_0_250" xml:space="preserve">
|
||||||
<value>Station id displayed.
|
<value>Station id displayed.
|
||||||
|
@ -1230,4 +1230,7 @@ Try it out!</value>
|
||||||
<data name="MarkingNoNetworkConnection" xml:space="preserve">
|
<data name="MarkingNoNetworkConnection" xml:space="preserve">
|
||||||
<value>Oops, there is no internet connection.</value>
|
<value>Oops, there is no internet connection.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ChangeLog_3_0_361_MK_SB" xml:space="preserve">
|
||||||
|
<value>If you have reserved or rented a bike, this will now be shown to you as an icon on the map page. Clicking on it will take you directly to the 'My bikes' page. We have also made small design changes.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -802,8 +802,8 @@ Layout Anzeige Radnamen und nummern verbessert.</target>
|
||||||
<target state="translated">Wahl eines Rads über die Radnummer hinzugefügt.</target>
|
<target state="translated">Wahl eines Rads über die Radnummer hinzugefügt.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="MarkingContactSupport" translate="yes" xml:space="preserve">
|
<trans-unit id="MarkingContactSupport" translate="yes" xml:space="preserve">
|
||||||
<source><bpt id="1"><font color="blue"></bpt><bpt id="2"><u></bpt>Contact<ept id="2"></u></ept><ept id="1"></font></ept> {0}.</source>
|
<source><bpt id="1"><u></bpt>Contact<ept id="1"></u></ept> {0}.</source>
|
||||||
<target state="translated">{0} <bpt id="1"><font color="blue"></bpt><bpt id="2"><u></bpt>kontaktieren<ept id="2"></u></ept><ept id="1"></font></ept>.</target>
|
<target state="translated">{0} <bpt id="1"><u></bpt>kontaktieren<ept id="1"></u></ept>.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="MarkingLoginRequiredToRerserve" translate="yes" xml:space="preserve">
|
<trans-unit id="MarkingLoginRequiredToRerserve" translate="yes" xml:space="preserve">
|
||||||
<source>Please login to reserve bikes! Tap <bpt id="1"><font color="blue"></bpt><bpt id="2"><u></bpt>here<ept id="2"></u></ept><ept id="1"></font></ept> to switch to login page.</source>
|
<source>Please login to reserve bikes! Tap <bpt id="1"><font color="blue"></bpt><bpt id="2"><u></bpt>here<ept id="2"></u></ept><ept id="1"></font></ept> to switch to login page.</source>
|
||||||
|
@ -929,8 +929,8 @@ Kleinere Verbesserungen.</target>
|
||||||
<target state="translated">Komponenten von Fremdanbietern aktualisiert.</target>
|
<target state="translated">Komponenten von Fremdanbietern aktualisiert.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="MarkingBikesAtStationStationId" translate="yes" xml:space="preserve">
|
<trans-unit id="MarkingBikesAtStationStationId" translate="yes" xml:space="preserve">
|
||||||
<source>Station id: {0}</source>
|
<source>ID: {0}</source>
|
||||||
<target state="translated">Stationskennung: {0}</target>
|
<target state="translated">ID: {0}</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ChangeLog3_0_250" translate="yes" xml:space="preserve">
|
<trans-unit id="ChangeLog3_0_250" translate="yes" xml:space="preserve">
|
||||||
<source>Station id displayed.
|
<source>Station id displayed.
|
||||||
|
@ -1562,6 +1562,10 @@ Wenn sich das Schloss weiterhin nicht öffnen lässt, vergewissern Sie sich, das
|
||||||
<target state="translated">Neue Funktionen:<bpt id="1"><ul></bpt><bpt id="2"><li></bpt>Wenn Ihr Gerät nicht mit dem Internet verbunden ist, wird dies nun oben angezeigt.<ept id="2"></li></ept><bpt id="3"><li></bpt>Sie können jetzt Ihre Fahrradansicht aktualisieren, indem Sie von oben nach unten ziehen. Das ist besonders nützlich, wenn Sie sich wieder mit dem Internet verbunden haben.<ept id="3"></li></ept><ept id="1"></ul></ept>
|
<target state="translated">Neue Funktionen:<bpt id="1"><ul></bpt><bpt id="2"><li></bpt>Wenn Ihr Gerät nicht mit dem Internet verbunden ist, wird dies nun oben angezeigt.<ept id="2"></li></ept><bpt id="3"><li></bpt>Sie können jetzt Ihre Fahrradansicht aktualisieren, indem Sie von oben nach unten ziehen. Das ist besonders nützlich, wenn Sie sich wieder mit dem Internet verbunden haben.<ept id="3"></li></ept><ept id="1"></ul></ept>
|
||||||
<br/>Außerdem:<bpt id="4"><ul></bpt><bpt id="5"><li></bpt>Software Pakete wurde aktualisiert.<ept id="5"></li></ept><bpt id="6"><li></bpt>Kleinere Fehlerbehebungen.<ept id="6"></li></ept><ept id="4"></ul></ept></target>
|
<br/>Außerdem:<bpt id="4"><ul></bpt><bpt id="5"><li></bpt>Software Pakete wurde aktualisiert.<ept id="5"></li></ept><bpt id="6"><li></bpt>Kleinere Fehlerbehebungen.<ept id="6"></li></ept><ept id="4"></ul></ept></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="ChangeLog_3_0_361_MK_SB" translate="yes" xml:space="preserve">
|
||||||
|
<source>If you have reserved or rented a bike, this will now be shown to you as an icon on the map page. Clicking on it will take you directly to the 'My bikes' page. We have also made small design changes.</source>
|
||||||
|
<target state="translated">Wenn Sie ein Rad reserviert oder gemietet haben, wird dies Ihnen nun auf der Kartenseite als Symbol angezeigt. Ein Klick darauf führt Sie direkt zur Seite 'Meine Räder'. Wir haben außerdem kleine Designänderungen vorgenommen.</target>
|
||||||
|
</trans-unit>
|
||||||
</group>
|
</group>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
using TINK.Model.Device;
|
|
||||||
using TINK.Repository.Request;
|
using TINK.Repository.Request;
|
||||||
using TINK.Repository.Response;
|
using TINK.Repository.Response;
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
<!--Secondary color-->
|
<!--Secondary color-->
|
||||||
<Color x:Key="secondary-back-title-color">#FF0020</Color>
|
<Color x:Key="secondary-back-title-color">#FF0020</Color>
|
||||||
|
|
||||||
|
<!--Background color-->
|
||||||
|
<Color x:Key="background-color">#BEBEBE</Color>
|
||||||
|
|
||||||
<!--Attention color-->
|
<!--Attention color-->
|
||||||
<Color x:Key="attention-color">#06D1B1</Color>
|
<Color x:Key="attention-color">#06D1B1</Color>
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
<!--Main color-->
|
<!--Main color-->
|
||||||
<Color x:Key="primary-back-title-color">#009899</Color>
|
<Color x:Key="primary-back-title-color">#009899</Color>
|
||||||
|
|
||||||
|
<!--Background color-->
|
||||||
|
<Color x:Key="background-color">#BEBEBE</Color>
|
||||||
|
|
||||||
<!--Attention color-->
|
<!--Attention color-->
|
||||||
<Color x:Key="attention-color">#FC870D</Color>
|
<Color x:Key="attention-color">#FC870D</Color>
|
||||||
|
|
||||||
|
|
|
@ -387,6 +387,11 @@ namespace TINK.ViewModel.Bikes
|
||||||
return Exception.GetShortErrorInfoText(IsReportLevelVerbose);
|
return Exception.GetShortErrorInfoText(IsReportLevelVerbose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IsConnected)
|
||||||
|
{
|
||||||
|
return AppResources.ActivityTextConnectionStateOffline;
|
||||||
|
}
|
||||||
|
|
||||||
return ActionText ?? string.Empty;
|
return ActionText ?? string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,11 @@ using TINK.Repository;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.Model.State;
|
using TINK.Model.State;
|
||||||
using TINK.ViewModel.Bikes;
|
using TINK.ViewModel.Bikes;
|
||||||
|
using Location = Xamarin.Essentials.Location;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -238,6 +243,7 @@ namespace TINK.ViewModel.Map
|
||||||
{
|
{
|
||||||
Log.ForContext<MapPageViewModel>().Debug($"Starting update of stations pins color for {stationsColorList.Count} stations...");
|
Log.ForContext<MapPageViewModel>().Debug($"Starting update of stations pins color for {stationsColorList.Count} stations...");
|
||||||
|
|
||||||
|
int MyBikesCount = 0;
|
||||||
// Update colors of pins.
|
// Update colors of pins.
|
||||||
for (int pinIndex = 0; pinIndex < stationsColorList.Count; pinIndex++)
|
for (int pinIndex = 0; pinIndex < stationsColorList.Count; pinIndex++)
|
||||||
{
|
{
|
||||||
|
@ -247,6 +253,10 @@ namespace TINK.ViewModel.Map
|
||||||
: "Open"; // there is no station marker. Use open marker.
|
: "Open"; // there is no station marker. Use open marker.
|
||||||
|
|
||||||
var colorPartPrefix = GetRessourceNameColorPart(stationsColorList[pinIndex]);
|
var colorPartPrefix = GetRessourceNameColorPart(stationsColorList[pinIndex]);
|
||||||
|
if (colorPartPrefix == "Blue" || colorPartPrefix == "LightBlue")
|
||||||
|
{
|
||||||
|
MyBikesCount = MyBikesCount + 1;
|
||||||
|
};
|
||||||
|
|
||||||
var name = $"{indexPartPrefix.ToString().PadLeft(2, '0')}_{colorPartPrefix}{(DeviceInfo.Platform == DevicePlatform.Android ? ".png" : string.Empty)}";
|
var name = $"{indexPartPrefix.ToString().PadLeft(2, '0')}_{colorPartPrefix}{(DeviceInfo.Platform == DevicePlatform.Android ? ".png" : string.Empty)}";
|
||||||
try
|
try
|
||||||
|
@ -263,6 +273,8 @@ namespace TINK.ViewModel.Map
|
||||||
Pins[pinIndex].IsVisible = true;
|
Pins[pinIndex].IsVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MyBikesCountText = MyBikesCount > 0 ? string.Format(MyBikesCount.ToString()) : string.Empty;
|
||||||
|
|
||||||
var pinsCount = Pins.Count;
|
var pinsCount = Pins.Count;
|
||||||
for (int pinIndex = stationsColorList.Count; pinIndex < pinsCount; pinIndex++)
|
for (int pinIndex = stationsColorList.Count; pinIndex < pinsCount; pinIndex++)
|
||||||
{
|
{
|
||||||
|
@ -273,6 +285,20 @@ namespace TINK.ViewModel.Map
|
||||||
Log.ForContext<MapPageViewModel>().Debug("Update of stations pins color done.");
|
Log.ForContext<MapPageViewModel>().Debug("Update of stations pins color done.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// label for number of reserved/rented bikes;
|
||||||
|
/// </summary>
|
||||||
|
private string _myBikesCountText = string.Empty;
|
||||||
|
public string MyBikesCountText
|
||||||
|
{
|
||||||
|
get { return _myBikesCountText; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_myBikesCountText = value;
|
||||||
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyBikesCountText)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Gets the color related part of the ressrouce name.</summary>
|
/// <summary> Gets the color related part of the ressrouce name.</summary>
|
||||||
/// <param name="color">Color to get name for.</param>
|
/// <param name="color">Color to get name for.</param>
|
||||||
/// <returns>Resource name.</returns>
|
/// <returns>Resource name.</returns>
|
||||||
|
@ -340,7 +366,7 @@ namespace TINK.ViewModel.Map
|
||||||
{
|
{
|
||||||
// Context switch should not be required because code is called from GUI thread
|
// Context switch should not be required because code is called from GUI thread
|
||||||
// but a xf-issue requires call (see issue #594).
|
// but a xf-issue requires call (see issue #594).
|
||||||
TinkApp.PostAction( async (x) =>
|
TinkApp.PostAction(async (x) =>
|
||||||
{
|
{
|
||||||
// Show COPRI message once.
|
// Show COPRI message once.
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
|
@ -858,11 +884,44 @@ namespace TINK.ViewModel.Map
|
||||||
// An error occurred getting data from copri.
|
// An error occurred getting data from copri.
|
||||||
return Exception.GetShortErrorInfoText(TinkApp.IsReportLevelVerbose);
|
return Exception.GetShortErrorInfoText(TinkApp.IsReportLevelVerbose);
|
||||||
}
|
}
|
||||||
|
if (!IsConnected)
|
||||||
|
{
|
||||||
|
return AppResources.ActivityTextConnectionStateOffline;
|
||||||
|
}
|
||||||
|
|
||||||
return ActionText ?? string.Empty;
|
return ActionText ?? string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary> Processes request to view my bikes.</summary>
|
||||||
|
public System.Windows.Input.ICommand OnMyBikesButtonClicked => new Xamarin.Forms.Command(async () =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log.ForContext<MapPageViewModel>().Information($"User clicked on MyBikesButton.");
|
||||||
|
|
||||||
|
// Lock action to prevent multiple instances of "BikeAtStation" being opened.
|
||||||
|
IsMapPageEnabled = false;
|
||||||
|
|
||||||
|
// Show page.
|
||||||
|
await ViewService.PushAsync(ViewTypes.MyBikesPage);
|
||||||
|
|
||||||
|
IsMapPageEnabled = true;
|
||||||
|
ActionText = string.Empty;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
IsMapPageEnabled = true;
|
||||||
|
ActionText = string.Empty;
|
||||||
|
|
||||||
|
Log.ForContext<MapPageViewModel>().Error("Fehler beim Öffnen der Ansicht \"Meine Räder\" aufgetreten. {Exception}", exception);
|
||||||
|
await ViewService.DisplayAlert(
|
||||||
|
"Fehler",
|
||||||
|
$"Fehler beim Öffnen der Ansicht \"Meine Räder\" aufgetreten. {exception.Message}",
|
||||||
|
"OK");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/// <summary> Command object to bind login button to view model.</summary>
|
/// <summary> Command object to bind login button to view model.</summary>
|
||||||
public System.Windows.Input.ICommand OnToggleTinkToKonrad => new Xamarin.Forms.Command(async () => await ToggleTinkToKonrad());
|
public System.Windows.Input.ICommand OnToggleTinkToKonrad => new Xamarin.Forms.Command(async () => await ToggleTinkToKonrad());
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ using System.Threading.Tasks;
|
||||||
using TestFramework.Repository;
|
using TestFramework.Repository;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
using TINK.Model.Device;
|
|
||||||
using TINK.Model.Services.CopriApi;
|
using TINK.Model.Services.CopriApi;
|
||||||
using TINK.Repository.Request;
|
using TINK.Repository.Request;
|
||||||
using TINK.Repository.Response;
|
using TINK.Repository.Response;
|
||||||
|
|
|
@ -188,7 +188,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
|
|
||||||
cache.IsBikesAvailableExpired.Returns(true);
|
cache.IsBikesAvailableExpired.Returns(true);
|
||||||
cache.GetBikesAvailableAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<BikesAvailableResponse>(BIKESAVAILABLE)));
|
cache.GetBikesAvailableAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<BikesAvailableResponse>(BIKESAVAILABLE)));
|
||||||
https.GetBikesAvailableAsync().Returns<BikesAvailableResponse>(x => { throw new WebConnectFailureException("Bang...", new Exception()); });
|
https.GetBikesAvailableAsync().Returns<BikesAvailableResponse>(x => { throw new WebConnectFailureException("Bang...", new System.Exception()); });
|
||||||
|
|
||||||
var provider = new CopriProviderHttps(
|
var provider = new CopriProviderHttps(
|
||||||
new Uri("http://1.2.3.4"),
|
new Uri("http://1.2.3.4"),
|
||||||
|
@ -288,7 +288,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
|
|
||||||
cache.IsBikesOccupiedExpired.Returns(true);
|
cache.IsBikesOccupiedExpired.Returns(true);
|
||||||
cache.GetBikesOccupiedAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<BikesReservedOccupiedResponse>(BIKESOCCUPIED)));
|
cache.GetBikesOccupiedAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<BikesReservedOccupiedResponse>(BIKESOCCUPIED)));
|
||||||
https.GetBikesOccupiedAsync().Returns<BikesReservedOccupiedResponse>(x => { throw new WebConnectFailureException("Bang...", new Exception()); });
|
https.GetBikesOccupiedAsync().Returns<BikesReservedOccupiedResponse>(x => { throw new WebConnectFailureException("Bang...", new System.Exception()); });
|
||||||
|
|
||||||
var provider = new CopriProviderHttps(
|
var provider = new CopriProviderHttps(
|
||||||
new Uri("http://1.2.3.4"),
|
new Uri("http://1.2.3.4"),
|
||||||
|
@ -387,7 +387,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
|
|
||||||
cache.IsStationsExpired.Returns(true);
|
cache.IsStationsExpired.Returns(true);
|
||||||
cache.GetStationsAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<StationsAvailableResponse>(STATIONSALL)));
|
cache.GetStationsAsync().Returns(Task.Run(() => JsonConvert.DeserializeObject<StationsAvailableResponse>(STATIONSALL)));
|
||||||
https.GetStationsAsync().Returns<StationsAvailableResponse>(x => { throw new WebConnectFailureException("Bang...", new Exception()); });
|
https.GetStationsAsync().Returns<StationsAvailableResponse>(x => { throw new WebConnectFailureException("Bang...", new System.Exception()); });
|
||||||
|
|
||||||
var provider = new CopriProviderHttps(
|
var provider = new CopriProviderHttps(
|
||||||
new Uri("http://1.2.3.4"),
|
new Uri("http://1.2.3.4"),
|
||||||
|
@ -424,7 +424,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Do not add if an excption occurred
|
// Do not add if an excption occurred
|
||||||
provider.AddToCache(new Result<StationsAvailableResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<StationsAvailableResponse>(STATIONSALL), new GeneralData(), new Exception("Bang...")));
|
provider.AddToCache(new Result<StationsAvailableResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<StationsAvailableResponse>(STATIONSALL), new GeneralData(), new System.Exception("Bang...")));
|
||||||
stations = await provider.GetStations(true);
|
stations = await provider.GetStations(true);
|
||||||
Assert.AreEqual(0, stations.Response.stations.Count);
|
Assert.AreEqual(0, stations.Response.stations.Count);
|
||||||
|
|
||||||
|
@ -464,7 +464,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Do not add if an excption occurred
|
// Do not add if an excption occurred
|
||||||
provider.AddToCache(new Result<BikesAvailableResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<BikesAvailableResponse>(BIKESAVAILABLE), new GeneralData(), new Exception("Bang...")));
|
provider.AddToCache(new Result<BikesAvailableResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<BikesAvailableResponse>(BIKESAVAILABLE), new GeneralData(), new System.Exception("Bang...")));
|
||||||
bikes = await provider.GetBikesAvailable(true);
|
bikes = await provider.GetBikesAvailable(true);
|
||||||
Assert.AreEqual(0, bikes.Response.bikes.Count);
|
Assert.AreEqual(0, bikes.Response.bikes.Count);
|
||||||
|
|
||||||
|
@ -506,7 +506,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.Connector
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Do not add if an excption occurred
|
// Do not add if an excption occurred
|
||||||
provider.AddToCache(new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<BikesReservedOccupiedResponse>(BIKESOCCUPIED), new GeneralData(), new Exception("Bang...")));
|
provider.AddToCache(new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsHttps), JsonConvert.DeserializeObject<BikesReservedOccupiedResponse>(BIKESOCCUPIED), new GeneralData(), new System.Exception("Bang...")));
|
||||||
bikes = await provider.GetBikesOccupied(true);
|
bikes = await provider.GetBikesOccupied(true);
|
||||||
Assert.AreEqual(0, bikes.Response.bikes_occupied.Count);
|
Assert.AreEqual(0, bikes.Response.bikes_occupied.Count);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
using TINK.Model.Services.CopriApi.ServerUris;
|
using TINK.Model.Services.CopriApi.ServerUris;
|
||||||
|
@ -6,7 +6,7 @@ using TINK.Settings;
|
||||||
using TINK.ViewModel.Map;
|
using TINK.ViewModel.Map;
|
||||||
using TINK.ViewModel.Settings;
|
using TINK.ViewModel.Settings;
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Settings
|
namespace TestTINKLib.Fixtures.ObjectTests.SettingsNS
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestSettings
|
public class TestSettings
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using TestFramework;
|
||||||
using TINK.Model.State;
|
using TINK.Model.State;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using TestFramework;
|
||||||
using TINK.Model.State;
|
using TINK.Model.State;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Rhino.Mocks;
|
|
||||||
using TestFramework.Model.Services.Geolocation;
|
using TestFramework.Model.Services.Geolocation;
|
||||||
using TestFramework.Services.BluetoothLock;
|
using TestFramework.Services.BluetoothLock;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
||||||
|
@ -42,8 +41,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */ ,
|
null /* viewService */ ,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for requested bike with state unknown.
|
// Verify handler for requested bike with state unknown.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -60,8 +59,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for requested bike with state closed.
|
// Verify handler for requested bike with state closed.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -79,8 +78,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for requested bike with state open.
|
// Verify handler for requested bike with state open.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -98,8 +97,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for booked bike with state closed.
|
// Verify handler for booked bike with state closed.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -117,8 +116,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for booked bike with state open.
|
// Verify handler for booked bike with state open.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -136,8 +135,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
|
|
||||||
// Verify handler for booked bike with state unknown.
|
// Verify handler for booked bike with state unknown.
|
||||||
bike = new BikeInfoMutable(
|
bike = new BikeInfoMutable(
|
||||||
|
@ -155,8 +154,8 @@ namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
||||||
null, // viewUpdateManager
|
null, // viewUpdateManager
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null /* viewService */,
|
null /* viewService */,
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
MockRepository.GenerateStub<IUser>()).GetType());
|
NSubstitute.Substitute.For<IUser>()).GetType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Rhino.Mocks;
|
|
||||||
using TestFramework.Model.Services.Geolocation;
|
using TestFramework.Model.Services.Geolocation;
|
||||||
using TestFramework.Services.BluetoothLock;
|
using TestFramework.Services.BluetoothLock;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BC;
|
using TINK.Model.Bikes.BikeInfoNS.BC;
|
||||||
|
@ -32,9 +31,9 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null, // viewService
|
null, // viewService
|
||||||
new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", LockModel.ILockIt), new Drive(), DataSource.Copri, 5200544, new Guid("00000000-0000-0000-0000-000000000001"), "42"), "My Station Name"),
|
new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", LockModel.ILockIt), new Drive(), DataSource.Copri, 5200544, new Guid("00000000-0000-0000-0000-000000000001"), "42"), "My Station Name"),
|
||||||
MockRepository.GenerateStub<IUser>(), // user
|
NSubstitute.Substitute.For<IUser>(), // user
|
||||||
MockRepository.GenerateStub<IInUseStateInfoProvider>(),
|
NSubstitute.Substitute.For<IInUseStateInfoProvider>(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }).GetType()); // stateInfoProvider
|
url => { }).GetType()); // stateInfoProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,9 +52,9 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null, // viewService
|
null, // viewService
|
||||||
new TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", LockModel.ILockIt), new Drive(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri, "17", new TINK.Model.Bikes.BikeInfoNS.CopriLock.LockInfo.Builder { State = TINK.Model.Bikes.BikeInfoNS.CopriLock.LockingState.Closed }.Build()), "My Station Name"),
|
new TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.CopriLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", LockModel.ILockIt), new Drive(), TINK.Model.Bikes.BikeInfoNS.BC.DataSource.Copri, "17", new TINK.Model.Bikes.BikeInfoNS.CopriLock.LockInfo.Builder { State = TINK.Model.Bikes.BikeInfoNS.CopriLock.LockingState.Closed }.Build()), "My Station Name"),
|
||||||
MockRepository.GenerateStub<IUser>(), // user
|
NSubstitute.Substitute.For<IUser>(), // user
|
||||||
MockRepository.GenerateStub<IInUseStateInfoProvider>(),
|
NSubstitute.Substitute.For<IInUseStateInfoProvider>(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }).GetType()); // stateInfoProvider
|
url => { }).GetType()); // stateInfoProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,9 +72,9 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel
|
||||||
NSubstitute.Substitute.For<ISmartDevice>(),
|
NSubstitute.Substitute.For<ISmartDevice>(),
|
||||||
null, // viewService
|
null, // viewService
|
||||||
new TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", TINK.Model.Bikes.BikeInfoNS.BikeNS.LockModel.ILockIt), new Drive(), DataSource.Copri, 5200544, new Guid("00000000-0000-0000-0000-000000000001"), "42"), "My Station Name"),
|
new TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable(new TINK.Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfo(new TINK.Model.Bikes.BikeInfoNS.BikeNS.Bike("42", TINK.Model.Bikes.BikeInfoNS.BikeNS.LockModel.ILockIt), new Drive(), DataSource.Copri, 5200544, new Guid("00000000-0000-0000-0000-000000000001"), "42"), "My Station Name"),
|
||||||
MockRepository.GenerateStub<IUser>(), // user
|
NSubstitute.Substitute.For<IUser>(), // user
|
||||||
MockRepository.GenerateStub<IInUseStateInfoProvider>(),
|
NSubstitute.Substitute.For<IInUseStateInfoProvider>(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }),
|
url => { }),
|
||||||
Is.Null);
|
Is.Null);
|
||||||
}
|
}
|
|
@ -1109,7 +1109,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel
|
||||||
|
|
||||||
await bikesAtStation.OnAppearingOrRefresh();
|
await bikesAtStation.OnAppearingOrRefresh();
|
||||||
|
|
||||||
//Assert.AreEqual("Offline.", bikesAtStation.StatusInfoText);
|
Assert.AreEqual("Offline.", bikesAtStation.StatusInfoText);
|
||||||
|
|
||||||
// Verify list of bikes
|
// Verify list of bikes
|
||||||
Assert.AreEqual(2, bikesAtStation.Count); // Count of bikes was 3. There is no more bike with id 26.
|
Assert.AreEqual(2, bikesAtStation.Count); // Count of bikes was 3. There is no more bike with id 26.
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using TINK.Model;
|
using TINK.Model;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
using TINK.ViewModel.Settings;
|
using TINK.ViewModel.Settings;
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Settings
|
namespace TestTINKLib.Fixtures.ObjectTests.SettingsNS
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestGroupFilterSettings
|
public class TestGroupFilterSettings
|
|
@ -1,8 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using TINK.Settings;
|
using TINK.Settings;
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Settings
|
namespace TestTINKLib.Fixtures.ObjectTests.SettingsNS
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestPollingParameters
|
public class TestPollingParameters
|
|
@ -1,7 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BC;
|
using TINK.Model.Bikes.BikeInfoNS.BC;
|
||||||
|
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
||||||
using TINK.ViewModel;
|
using TINK.ViewModel;
|
||||||
|
|
||||||
namespace TestShareeLib.ViewModel
|
namespace TestShareeLib.ViewModel
|
||||||
|
@ -124,5 +125,76 @@ namespace TestShareeLib.ViewModel
|
||||||
new AggregateException(new Exception("Oh yes"), new Exception("Oh no")).GetErrorMessage(),
|
new AggregateException(new Exception("Oh yes"), new Exception("Oh no")).GetErrorMessage(),
|
||||||
Is.EqualTo("One or more errors occurred.\r\nOh yes\r\nOh no"));
|
Is.EqualTo("One or more errors occurred.\r\nOh yes\r\nOh no"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestGetDisplayName_DefinedTypes()
|
||||||
|
{
|
||||||
|
var bike = Substitute.For<IBikeInfoMutable>();
|
||||||
|
bike.WheelType.Returns(WheelType.Two);
|
||||||
|
bike.TypeOfBike.Returns(TypeOfBike.City);
|
||||||
|
bike.Description.Returns("MeinStadtrad");
|
||||||
|
bike.Id.Returns("22");
|
||||||
|
Assert.AreEqual(
|
||||||
|
"MeinStadtrad",
|
||||||
|
bike.GetDisplayName());
|
||||||
|
|
||||||
|
Assert.AreEqual(
|
||||||
|
"22",
|
||||||
|
bike.GetDisplayId());
|
||||||
|
|
||||||
|
bike = Substitute.For<IBikeInfoMutable>();
|
||||||
|
bike.WheelType.Returns(WheelType.Two);
|
||||||
|
bike.TypeOfBike.Returns(TypeOfBike.City);
|
||||||
|
bike.Id.Returns("22");
|
||||||
|
bike.IsDemo.Returns(true);
|
||||||
|
bike.Description.Returns("MeinStadtrad");
|
||||||
|
Assert.AreEqual(
|
||||||
|
"MeinStadtrad",
|
||||||
|
bike.GetDisplayName());
|
||||||
|
Assert.AreEqual(
|
||||||
|
"22",
|
||||||
|
bike.GetDisplayId());
|
||||||
|
|
||||||
|
bike = Substitute.For<IBikeInfoMutable>();
|
||||||
|
bike.WheelType.Returns(WheelType.Trike);
|
||||||
|
bike.TypeOfBike.Returns(TypeOfBike.Cargo);
|
||||||
|
bike.Description.Returns("MeinCargoDreiradl");
|
||||||
|
bike.Id.Returns("22");
|
||||||
|
Assert.AreEqual(
|
||||||
|
"MeinCargoDreiradl",
|
||||||
|
bike.GetDisplayName());
|
||||||
|
Assert.AreEqual(
|
||||||
|
"22",
|
||||||
|
bike.GetDisplayId());
|
||||||
|
|
||||||
|
bike = Substitute.For<IBikeInfoMutable>();
|
||||||
|
bike.WheelType.Returns(WheelType.Two);
|
||||||
|
bike.TypeOfBike.Returns(TypeOfBike.Cargo);
|
||||||
|
bike.Description.Returns("MeinCargoALololong");
|
||||||
|
bike.Id.Returns("22");
|
||||||
|
Assert.AreEqual(
|
||||||
|
"MeinCargoALololong",
|
||||||
|
bike.GetDisplayName());
|
||||||
|
Assert.AreEqual(
|
||||||
|
"22",
|
||||||
|
bike.GetDisplayId());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestGetDisplayName_UndefinedTypes()
|
||||||
|
{
|
||||||
|
var bike = Substitute.For<IBikeInfoMutable>();
|
||||||
|
bike.WheelType.Returns(WheelType.Mono);
|
||||||
|
bike.TypeOfBike.Returns(TypeOfBike.Cargo);
|
||||||
|
bike.Description.Returns("SuperCargo");
|
||||||
|
bike.Id.Returns("22");
|
||||||
|
Assert.AreEqual(
|
||||||
|
"SuperCargo",
|
||||||
|
bike.GetDisplayName());
|
||||||
|
|
||||||
|
Assert.AreEqual(
|
||||||
|
"22",
|
||||||
|
bike.GetDisplayId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using TINK.Model.Bike.BluetoothLock;
|
|
||||||
using TINK.Model.State;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBikeInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[Test]
|
|
||||||
public void TestCtorCopyNull()
|
|
||||||
{
|
|
||||||
Assert.Throws<System.ArgumentException>(
|
|
||||||
() => new BikeInfo(null, null),
|
|
||||||
"Verify that no unspecific reference not set to... exception is thrown");
|
|
||||||
|
|
||||||
Assert.Throws<System.ArgumentException>(
|
|
||||||
() => new BikeInfo(new TINK.Model.Bike.BC.BikeInfo(12,1), null),
|
|
||||||
"Verify that no unspecific reference not set to... exception is thrown");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestCtorAvailable()
|
|
||||||
{
|
|
||||||
Assert.AreEqual (12,new BikeInfo(12, 13).Id);
|
|
||||||
Assert.AreEqual(13, new BikeInfo(12, 13).CurrentStation);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Disposable, new BikeInfo(12, 13).State.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestCtorRequested()
|
|
||||||
{
|
|
||||||
Assert.AreEqual(12, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020, 1, 1), "a@b", 13, dateTimeProvider: () => new DateTime(2019, 1, 1)).Id);
|
|
||||||
Assert.AreEqual(112, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020,1,1), "a@b", 13, dateTimeProvider: () => new DateTime(2019, 1, 1)).LockInfo.Id);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Reserved, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020, 1, 1), "a@b", 13, dateTimeProvider: () => new DateTime(2019, 1, 1)).State.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestCtorBooked()
|
|
||||||
{
|
|
||||||
Assert.AreEqual(12, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020, 1, 1), "a@b", 13).Id);
|
|
||||||
Assert.AreEqual(112, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020, 1, 1), "a@b", 13).LockInfo.Id);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Booked, new BikeInfo(12, 112, new Guid(), null, null, null, new DateTime(2020, 1, 1), "a@b", 13).State.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,155 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using TINK.Model.Bike.BluetoothLock;
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
|
||||||
{
|
|
||||||
[TestFixture]
|
|
||||||
public class TestLockInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[Test]
|
|
||||||
public void TestCtor()
|
|
||||||
{
|
|
||||||
Assert.AreEqual(
|
|
||||||
LockingState.Unknown,
|
|
||||||
new LockInfo.Builder { Id = 123 }.Build().State);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
123,
|
|
||||||
new LockInfo.Builder { Id = 123 }.Build().Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestEquals()
|
|
||||||
{
|
|
||||||
Assert.IsTrue(new LockInfo.Builder {
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed}.Build() == new LockInfo.Builder {
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestEqualsFalse()
|
|
||||||
{
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 3,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("1000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 5, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 9, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 11, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build());
|
|
||||||
|
|
||||||
Assert.IsFalse(new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Closed
|
|
||||||
}.Build() == new LockInfo.Builder
|
|
||||||
{
|
|
||||||
Id = 2,
|
|
||||||
Guid = new Guid("0000f00d-1212-efde-1523-785fef13d123"),
|
|
||||||
Seed = new byte[] { 1, 2 },
|
|
||||||
UserKey = new byte[] { 7, 2 },
|
|
||||||
AdminKey = new byte[] { 2, 1 },
|
|
||||||
State = LockingState.Open
|
|
||||||
}.Build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using TINK.Model.Bike.BluetoothLock;
|
|
||||||
using TINK.Services.BluetoothLock.Tdo;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestLockInfoHelper
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestUpdateById_State()
|
|
||||||
{
|
|
||||||
var locksInfo = new List<LockInfo> {
|
|
||||||
new LockInfo.Builder { Id = 12, Seed = new byte[] { 3, 5 }, UserKey = new byte[] {2, 1 }, State = LockingState.Unknown }.Build(),
|
|
||||||
new LockInfo.Builder { Id = 14, Seed = new byte[] { 3, 1 }, UserKey = new byte[] {2, 7 }, State = LockingState.Open }.Build(),
|
|
||||||
new LockInfo.Builder { Id = 3, Seed = new byte[] { 1, 5 }, UserKey = new byte[] {2, 9 }, State = LockingState.Closed }.Build(),
|
|
||||||
};
|
|
||||||
|
|
||||||
var locksInfoTdo = new List<LockInfoTdo> {
|
|
||||||
new LockInfoTdo.Builder { Id =14, State = LockitLockingState.Closed}.Build()
|
|
||||||
};
|
|
||||||
|
|
||||||
var resultList = locksInfo.UpdateById(locksInfoTdo);
|
|
||||||
|
|
||||||
var result = resultList.FirstOrDefault(x => x.Id == 14);
|
|
||||||
Assert.NotNull(result, "Target element was removed.");
|
|
||||||
Assert.AreEqual(LockingState.Closed, result.State);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestUpdateById_Guid()
|
|
||||||
{
|
|
||||||
var locksInfo = new List<LockInfo> {
|
|
||||||
new LockInfo.Builder { Id = 12, Seed = new byte[] { 3, 5 }, UserKey = new byte[] {2, 1 }, State = LockingState.Unknown }.Build(),
|
|
||||||
new LockInfo.Builder { Id = 14, Seed = new byte[] { 3, 1 }, UserKey = new byte[] {2, 7 }, State = LockingState.Open }.Build(),
|
|
||||||
new LockInfo.Builder { Id = 3, Seed = new byte[] { 1, 5 }, UserKey = new byte[] {2, 9 }, State = LockingState.Closed }.Build(),
|
|
||||||
};
|
|
||||||
|
|
||||||
var locksInfoTdo = new List<LockInfoTdo> {
|
|
||||||
new LockInfoTdo.Builder { Id =14, Guid = new System.Guid("00000000-0000-0000-0000-e57e6b9aee16"), State = LockitLockingState.Open}.Build()
|
|
||||||
};
|
|
||||||
|
|
||||||
var resultList = locksInfo.UpdateById(locksInfoTdo);
|
|
||||||
|
|
||||||
var result = resultList.FirstOrDefault(x => x.Id == 14);
|
|
||||||
Assert.NotNull(result, "Target element was removed.");
|
|
||||||
Assert.AreEqual(new Guid("00000000-0000-0000-0000-e57e6b9aee16"), result.Guid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using TINK.Model.Bike.BluetoothLock;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike.BluetoothLock
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestLockInfoMutable
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestCtor()
|
|
||||||
{
|
|
||||||
var lockInfo = new LockInfoMutable(1, new Guid(), new byte[] { 1, 2, 3 }, new byte[] { 1, 23 }, new byte[] { 1, 12 }, LockingState.Closed);
|
|
||||||
|
|
||||||
Assert.AreEqual(1, lockInfo.Id);
|
|
||||||
Assert.AreEqual(new Guid(), lockInfo.Guid);
|
|
||||||
Assert.IsTrue((new byte[] { 1, 2, 3 }).SequenceEqual(lockInfo.UserKey));
|
|
||||||
Assert.IsTrue((new byte[] { 1, 23 }).SequenceEqual(lockInfo.AdminKey));
|
|
||||||
Assert.IsTrue((new byte[] { 1, 12 }).SequenceEqual(lockInfo.Seed));
|
|
||||||
Assert.AreEqual(LockingState.Closed, lockInfo.State);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestSetGuid()
|
|
||||||
{
|
|
||||||
var lockInfo = new LockInfoMutable(1, new Guid(), new byte[] { 1, 2, 3 }, new byte[] { 1, 23 }, new byte[] { 1, 12 }, LockingState.Closed);
|
|
||||||
|
|
||||||
lockInfo.Guid = new Guid("00000000-0000-0000-0000-e57e6b9aee16");
|
|
||||||
Assert.AreEqual(new Guid("00000000-0000-0000-0000-e57e6b9aee16"), lockInfo.Guid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike
|
|
||||||
{
|
|
||||||
using TINK.Model.Bike;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBike
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestConstruct()
|
|
||||||
{
|
|
||||||
var l_oBike = new Bike(43);
|
|
||||||
Assert.AreEqual(43, l_oBike.Id);
|
|
||||||
Assert.AreEqual(null, l_oBike.TypeOfBike);
|
|
||||||
Assert.AreEqual(null, l_oBike.WheelType);
|
|
||||||
|
|
||||||
l_oBike = new Bike(43, WheelType.Mono, TypeOfBike.Cargo);
|
|
||||||
|
|
||||||
Assert.AreEqual(43, l_oBike.Id);
|
|
||||||
Assert.AreEqual(TypeOfBike.Cargo, l_oBike.TypeOfBike);
|
|
||||||
Assert.AreEqual(WheelType.Mono, l_oBike.WheelType);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestCompare()
|
|
||||||
{
|
|
||||||
var l_oBike1 = new Bike(43);
|
|
||||||
Assert.AreEqual(43, l_oBike1.Id);
|
|
||||||
Assert.AreEqual(null, l_oBike1.TypeOfBike);
|
|
||||||
Assert.AreEqual(null, l_oBike1.WheelType);
|
|
||||||
|
|
||||||
var l_oBike2 = new Bike(42, WheelType.Two, TypeOfBike.Allround);
|
|
||||||
Assert.IsFalse(l_oBike1 == l_oBike2);
|
|
||||||
|
|
||||||
l_oBike2 = new Bike(43, WheelType.Mono, TypeOfBike.Allround);
|
|
||||||
Assert.IsFalse(l_oBike1 == l_oBike2);
|
|
||||||
|
|
||||||
l_oBike2 = new Bike(43, WheelType.Two, TypeOfBike.Cargo);
|
|
||||||
Assert.IsFalse(l_oBike1 == l_oBike2);
|
|
||||||
|
|
||||||
l_oBike2 = new Bike(43, null, null);
|
|
||||||
Assert.IsTrue(l_oBike1 == l_oBike2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using TINK.Model.Bike;
|
|
||||||
|
|
||||||
|
|
||||||
namespace TestTINKLib
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBikeCollection
|
|
||||||
{
|
|
||||||
/// <summary> Tests the member.</summary>
|
|
||||||
[Test]
|
|
||||||
public void TestConstruct()
|
|
||||||
{
|
|
||||||
var l_oColl = new BikeCollection();
|
|
||||||
|
|
||||||
Assert.AreEqual(0, l_oColl.Count);
|
|
||||||
Assert.IsNull(l_oColl.GetById(1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using TINK.Model;
|
|
||||||
using TINK.Model.Bike;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBikeCollectionFilter
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestGetAtStation()
|
|
||||||
{
|
|
||||||
var coll = new BikeCollection(
|
|
||||||
new Dictionary<int, TINK.Model.Bike.BC.BikeInfo>
|
|
||||||
{
|
|
||||||
{3, new TINK.Model.Bike.BC.BikeInfo(7, 3 /* Stadion id */) },
|
|
||||||
{7, new TINK.Model.Bike.BC.BikeInfo(8, 12 /* Stadion id */) },
|
|
||||||
{12, new TINK.Model.Bike.BC.BikeInfo(33, 12 /* Stadion id */) }
|
|
||||||
});
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
0,
|
|
||||||
BikeCollectionFilter.GetAtStation(null, 12).Count);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
0,
|
|
||||||
coll.GetAtStation(null).Count);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
0,
|
|
||||||
coll.GetAtStation(22).Count);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
1,
|
|
||||||
coll.GetAtStation(3).Count);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
2,
|
|
||||||
coll.GetAtStation(12).Count);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestGetLockIt()
|
|
||||||
{
|
|
||||||
var coll = new BikeCollection(
|
|
||||||
new Dictionary<int, TINK.Model.Bike.BC.BikeInfo>
|
|
||||||
{
|
|
||||||
{7, new TINK.Model.Bike.BC.BikeInfo(8, 12 /* Stadion id */) },
|
|
||||||
{12, new TINK.Model.Bike.BC.BikeInfo(33, 12 /* Stadion id */) }
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
0,
|
|
||||||
coll.GetLockIt().Count);
|
|
||||||
|
|
||||||
coll = new BikeCollection(
|
|
||||||
new Dictionary<int, TINK.Model.Bike.BC.BikeInfo>
|
|
||||||
{
|
|
||||||
{7, new TINK.Model.Bike.BC.BikeInfo(8, 12 /* Stadion id */) },
|
|
||||||
{11, new TINK.Model.Bike.BluetoothLock.BikeInfo(33, 12 /* Stadion id */) },
|
|
||||||
{12, new TINK.Model.Bike.BC.BikeInfo(33, 12 /* Stadion id */) }
|
|
||||||
});
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
0,
|
|
||||||
BikeCollectionFilter.GetLockIt(null).Count);
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
1,
|
|
||||||
coll.GetLockIt().Count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using TINK.Model.Bike;
|
|
||||||
using TINK.Model.State;
|
|
||||||
|
|
||||||
using BikeInfo = TINK.Model.Bike.BC.BikeInfo;
|
|
||||||
using BikeInfoMutable = TINK.Model.Bike.BC.BikeInfoMutable;
|
|
||||||
|
|
||||||
namespace TestTINKLib
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBikeCollectionMutable
|
|
||||||
{
|
|
||||||
/// <summary> Tests the member.</summary>
|
|
||||||
[Test]
|
|
||||||
public void TestAdd()
|
|
||||||
{
|
|
||||||
var l_oColl = new BikeCollectionMutable();
|
|
||||||
|
|
||||||
l_oColl.Add(new BikeInfoMutable(57, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Allround));
|
|
||||||
|
|
||||||
Assert.Throws<Exception>(() => l_oColl.Add(new BikeInfoMutable(57, false, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Cargo)));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestUpdate_Null()
|
|
||||||
{
|
|
||||||
var l_oBikeRequested = new BikeInfoMutable(20, false, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Allround);
|
|
||||||
l_oBikeRequested.State.Load(new StateInfo(() => DateTime.Now, DateTime.Now, "john@long", "1234"));
|
|
||||||
|
|
||||||
var l_oBikeColl = new BikeCollectionMutable
|
|
||||||
{
|
|
||||||
new BikeInfoMutable(63, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Allround),
|
|
||||||
new BikeInfoMutable(57, false, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Cargo),
|
|
||||||
l_oBikeRequested,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Verify initial state
|
|
||||||
Assert.NotNull(l_oBikeColl.GetById("63"));
|
|
||||||
Assert.AreEqual(InUseStateEnum.Disposable, l_oBikeColl.GetById("57").State.Value);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Reserved, l_oBikeColl.GetById("20").State.Value);
|
|
||||||
Assert.Null(l_oBikeColl.GetById("33"));
|
|
||||||
|
|
||||||
l_oBikeColl.Update(null);
|
|
||||||
|
|
||||||
// Verify modified state
|
|
||||||
Assert.Null(l_oBikeColl.GetById("63"));
|
|
||||||
Assert.Null(l_oBikeColl.GetById("57"));
|
|
||||||
Assert.Null(l_oBikeColl.GetById("20"));
|
|
||||||
Assert.Null(l_oBikeColl.GetById("33"));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestUpdate()
|
|
||||||
{
|
|
||||||
var l_oBikeRequested = new BikeInfoMutable(20, false, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Allround);
|
|
||||||
l_oBikeRequested.State.Load(new StateInfo(() => DateTime.Now, DateTime.Now, "john@long", "1234"));
|
|
||||||
|
|
||||||
var l_oBikeColl = new BikeCollectionMutable
|
|
||||||
{
|
|
||||||
new BikeInfoMutable(63, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Allround),
|
|
||||||
new BikeInfoMutable(57, false, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Cargo),
|
|
||||||
l_oBikeRequested,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Verify initial state
|
|
||||||
Assert.NotNull(l_oBikeColl.GetById("63")); // Will be removed
|
|
||||||
Assert.AreEqual(InUseStateEnum.Disposable, l_oBikeColl.GetById("57").State.Value); // Will be requested
|
|
||||||
Assert.AreEqual(InUseStateEnum.Reserved, l_oBikeColl.GetById("20").State.Value); // Will be booked
|
|
||||||
Assert.Null(l_oBikeColl.GetById("33")); //
|
|
||||||
|
|
||||||
var l_oBikeResponse = new List<BikeInfo>
|
|
||||||
{
|
|
||||||
new BikeInfo("57", false, new [] { "TINK" }, WheelType.Trike, TypeOfBike.Allround, "Test description", 7, DateTime.Now, "john@long,", "1234"),
|
|
||||||
new BikeInfo("20", false, new [] {"TINK" }, WheelType.Trike, TypeOfBike.Allround, "Test description", 7, DateTime.Now, "john@long,", "1234"),
|
|
||||||
new BikeInfo("33", 7, false, new [] {"TINK" }, WheelType.Trike, TypeOfBike.Allround),
|
|
||||||
};
|
|
||||||
|
|
||||||
l_oBikeColl.Update(l_oBikeResponse);
|
|
||||||
|
|
||||||
// Verify modified state
|
|
||||||
Assert.Null(l_oBikeColl.GetById("63"));
|
|
||||||
Assert.AreEqual(InUseStateEnum.Booked, l_oBikeColl.GetById("57").State.Value);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Booked, l_oBikeColl.GetById("20").State.Value);
|
|
||||||
Assert.NotNull(l_oBikeColl.GetById("33"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using TINK.Model.Bike;
|
|
||||||
using TINK.Model.State;
|
|
||||||
|
|
||||||
using BikeInfoMutable = TINK.Model.Bike.BC.BikeInfoMutable;
|
|
||||||
|
|
||||||
namespace TestTINKLib
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
class TestBikeMutable
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestConstruct()
|
|
||||||
{
|
|
||||||
var l_oBike = new BikeInfoMutable(
|
|
||||||
42,
|
|
||||||
false,
|
|
||||||
new List<string> { "TINK" },
|
|
||||||
WheelType.Two,
|
|
||||||
TypeOfBike.Cargo);
|
|
||||||
|
|
||||||
Assert.AreEqual(42, l_oBike.Id);
|
|
||||||
Assert.IsFalse(l_oBike.IsDemo);
|
|
||||||
Assert.AreEqual(WheelType.Two, l_oBike.WheelType);
|
|
||||||
Assert.AreEqual(TypeOfBike.Cargo, l_oBike.TypeOfBike);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Disposable, l_oBike.State.Value);
|
|
||||||
Assert.IsNull(l_oBike.CurrentStation);
|
|
||||||
|
|
||||||
l_oBike = new BikeInfoMutable(
|
|
||||||
17,
|
|
||||||
true,
|
|
||||||
new List<string> { "TINK" },
|
|
||||||
WheelType.Mono,
|
|
||||||
TypeOfBike.Allround,
|
|
||||||
"Test description",
|
|
||||||
1);
|
|
||||||
|
|
||||||
Assert.AreEqual(17, l_oBike.Id);
|
|
||||||
Assert.IsTrue(l_oBike.IsDemo);
|
|
||||||
Assert.AreEqual(WheelType.Mono, l_oBike.WheelType);
|
|
||||||
Assert.AreEqual(TypeOfBike.Allround, l_oBike.TypeOfBike);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Disposable, l_oBike.State.Value);
|
|
||||||
Assert.AreEqual(1, l_oBike.CurrentStation);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestToString()
|
|
||||||
{
|
|
||||||
var l_oBike = new BikeInfoMutable(3, false, new List<string> { "TINK" }, WheelType.Two, TypeOfBike.Cargo, p_oDateTimeProvider: () => new DateTime(1970, 1, 1));
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
"Id=3, wheel(s)=Two, type=Cargo, demo=False, state=Disposable, location=On the road.",
|
|
||||||
l_oBike.ToString());
|
|
||||||
|
|
||||||
l_oBike = new BikeInfoMutable(3, true, new List<string> { "TINK" }, WheelType.Trike, TypeOfBike.Allround, "Test description", 5, p_oDateTimeProvider: () => new DateTime(1970, 1, 1));
|
|
||||||
Assert.AreEqual(
|
|
||||||
"Id=3, wheel(s)=Trike, type=Allround, demo=True, state=Disposable, location=Station 5.",
|
|
||||||
l_oBike.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using TINK.Repository.Response;
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.ObjectTests.Bike
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestBikesAvailableResponse
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestDeserializeStationEmpty()
|
|
||||||
{
|
|
||||||
// Response for bike 231 is a real world answer.
|
|
||||||
var l_oBikes = JsonConvert.DeserializeObject<BikesAvailableResponse>(@"
|
|
||||||
{
|
|
||||||
""apiserver"" : ""https://app.tink-konstanz.de"",
|
|
||||||
""response"" : ""bikes_available"",
|
|
||||||
""bikes"" : {
|
|
||||||
""231"" : {
|
|
||||||
""bike"" : ""231"",
|
|
||||||
""description"" : ""Stadtrad"",
|
|
||||||
""system"" : ""BC"",
|
|
||||||
""bike_group"" : [ ""Konrad"" ],
|
|
||||||
""station"" : """",
|
|
||||||
""state"" : ""available"",
|
|
||||||
""gps"" : { ""latitude"": ""9.1594501"", ""longitude"": ""47.6749928"" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
""copri_version"" : ""4.1.0.0"",
|
|
||||||
""authcookie"" : """",
|
|
||||||
""response_state"" : ""OK""
|
|
||||||
}
|
|
||||||
");
|
|
||||||
|
|
||||||
Assert.IsNull(l_oBikes.bikes[231].station);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestDeserializeStationInfoMissing()
|
|
||||||
{
|
|
||||||
// Response for bike 231 might not be real world answer.
|
|
||||||
var l_oBikes = JsonConvert.DeserializeObject<BikesAvailableResponse>(@"
|
|
||||||
{
|
|
||||||
""apiserver"" : ""https://app.tink-konstanz.de"",
|
|
||||||
""response"" : ""bikes_available"",
|
|
||||||
""bikes"" : {
|
|
||||||
""231"" : {
|
|
||||||
""bike"" : ""231"",
|
|
||||||
""description"" : ""Stadtrad"",
|
|
||||||
""system"" : ""BC"",
|
|
||||||
""bike_group"" : [ ""Konrad"" ],
|
|
||||||
""state"" : ""available"",
|
|
||||||
""gps"" : { ""latitude"": ""9.1594501"", ""longitude"": ""47.6749928"" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
""copri_version"" : ""4.1.0.0"",
|
|
||||||
""authcookie"" : """",
|
|
||||||
""response_state"" : ""OK""
|
|
||||||
}
|
|
||||||
");
|
|
||||||
|
|
||||||
Assert.IsNull(l_oBikes.bikes[231].station);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NUnit.Framework;
|
|
||||||
using System;
|
|
||||||
using TINK.Model.State;
|
|
||||||
|
|
||||||
|
|
||||||
namespace TestTINKLib.Fixtures.Bike
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Moved to TestShareeLib (.Net Core)
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
|
||||||
public class TestStateBookedInfoSerializeJSON
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestSerializeJSON()
|
|
||||||
{
|
|
||||||
// Create object to test.
|
|
||||||
var l_oInfoSource = new StateOccupiedInfo(
|
|
||||||
new DateTime(2017, 09, 20, 23, 05, 0),
|
|
||||||
"Heinz@mueller",
|
|
||||||
"17 xxb");
|
|
||||||
|
|
||||||
// Serialize object and verify.
|
|
||||||
var l_oDetected = JsonConvert.SerializeObject(l_oInfoSource);
|
|
||||||
const string EXPECTED = @"
|
|
||||||
{
|
|
||||||
""From"":""2017 - 09 - 20T23: 05:00"",
|
|
||||||
""MailAddress"":""Heinz@mueller"",
|
|
||||||
""Code"":""17 xxb""
|
|
||||||
}";
|
|
||||||
Assert.AreEqual(
|
|
||||||
TestHelper.PrepareXmlForStringCompare(EXPECTED.Replace("\n", string.Empty).Replace("\r", string.Empty)),
|
|
||||||
TestHelper.PrepareXmlForStringCompare(l_oDetected.Replace("\n", string.Empty).Replace("\r", string.Empty)));
|
|
||||||
|
|
||||||
// Deserialize object and verify.
|
|
||||||
var l_oInfoTarget = JsonConvert.DeserializeObject<StateOccupiedInfo>(l_oDetected);
|
|
||||||
Assert.AreEqual(InUseStateEnum.Booked, l_oInfoTarget.Value);
|
|
||||||
Assert.AreEqual("Heinz@mueller", l_oInfoTarget.MailAddress);
|
|
||||||
Assert.AreEqual("17 xxb", l_oInfoTarget.Code);
|
|
||||||
Assert.AreEqual(new DateTime(2017, 9, 20, 23, 5, 0), l_oInfoTarget.From);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using Rhino.Mocks;
|
|
||||||
using TestFramework.Model.User.Account;
|
using TestFramework.Model.User.Account;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS;
|
using TINK.Model.Bikes.BikeInfoNS.DriveNS;
|
||||||
|
@ -78,7 +77,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
l_oBike,
|
l_oBike,
|
||||||
l_oUser,
|
l_oUser,
|
||||||
new MyBikeInUseStateInfoProvider(),
|
new MyBikeInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { });
|
url => { });
|
||||||
|
|
||||||
Assert.AreEqual("2", l_oViewModel.Name);
|
Assert.AreEqual("2", l_oViewModel.Name);
|
||||||
|
@ -105,7 +104,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
bike,
|
bike,
|
||||||
user,
|
user,
|
||||||
new BikeAtStationInUseStateInfoProvider(),
|
new BikeAtStationInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }));
|
url => { }));
|
||||||
|
|
||||||
Assert.AreEqual("Still 15 min. reserved.", l_oViewModel.StateText);
|
Assert.AreEqual("Still 15 min. reserved.", l_oViewModel.StateText);
|
||||||
|
@ -128,7 +127,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
bike,
|
bike,
|
||||||
user,
|
user,
|
||||||
new BikeAtStationInUseStateInfoProvider(),
|
new BikeAtStationInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }));
|
url => { }));
|
||||||
|
|
||||||
Assert.AreEqual("Code 4asdfA, still 7 min. reserved.", l_oViewModel.StateText);
|
Assert.AreEqual("Code 4asdfA, still 7 min. reserved.", l_oViewModel.StateText);
|
||||||
|
@ -151,7 +150,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
bike,
|
bike,
|
||||||
user,
|
user,
|
||||||
new BikeAtStationInUseStateInfoProvider(),
|
new BikeAtStationInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { }));
|
url => { }));
|
||||||
|
|
||||||
Assert.AreEqual(
|
Assert.AreEqual(
|
||||||
|
@ -188,7 +187,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
l_oStoreMock.Load().Result,
|
l_oStoreMock.Load().Result,
|
||||||
"123456789"), // Device id
|
"123456789"), // Device id
|
||||||
new BikeAtStationInUseStateInfoProvider(),
|
new BikeAtStationInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { });
|
url => { });
|
||||||
|
|
||||||
Assert.AreEqual("Test description", l_oViewModel.Name);
|
Assert.AreEqual("Test description", l_oViewModel.Name);
|
||||||
|
@ -227,7 +226,7 @@ namespace UITest.Fixtures.ViewModel
|
||||||
l_oStoreMock.Load().Result,
|
l_oStoreMock.Load().Result,
|
||||||
"123456789"),
|
"123456789"),
|
||||||
new BikeAtStationInUseStateInfoProvider(),
|
new BikeAtStationInUseStateInfoProvider(),
|
||||||
MockRepository.GenerateStub<IBikesViewModel>(),
|
NSubstitute.Substitute.For<IBikesViewModel>(),
|
||||||
url => { });
|
url => { });
|
||||||
|
|
||||||
Assert.AreEqual("Test description", l_oViewModel.Name);
|
Assert.AreEqual("Test description", l_oViewModel.Name);
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
using NUnit.Framework;
|
|
||||||
using Rhino.Mocks;
|
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BC;
|
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BikeNS;
|
|
||||||
using TINK.ViewModel;
|
|
||||||
|
|
||||||
namespace UITest.Fixtures.ObjectTests.ViewModel
|
|
||||||
{
|
|
||||||
|
|
||||||
[TestFixture]
|
|
||||||
public class TestViewModelHelper
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestGetDisplayName_DefinedTypes()
|
|
||||||
{
|
|
||||||
var l_oBike = MockRepository.GenerateStub<IBikeInfoMutable>();
|
|
||||||
l_oBike.Stub(x => x.WheelType).Return(WheelType.Two);
|
|
||||||
l_oBike.Stub(x => x.TypeOfBike).Return(TypeOfBike.City);
|
|
||||||
l_oBike.Stub(x => x.Description).Return("MeinStadtrad");
|
|
||||||
l_oBike.Stub(x => x.Id).Return("22");
|
|
||||||
Assert.AreEqual(
|
|
||||||
"MeinStadtrad",
|
|
||||||
l_oBike.GetDisplayName());
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
"22",
|
|
||||||
l_oBike.GetDisplayId());
|
|
||||||
|
|
||||||
l_oBike = MockRepository.GenerateStub<IBikeInfoMutable>();
|
|
||||||
l_oBike.Stub(x => x.WheelType).Return(WheelType.Two);
|
|
||||||
l_oBike.Stub(x => x.TypeOfBike).Return(TypeOfBike.City);
|
|
||||||
l_oBike.Stub(x => x.Id).Return("22");
|
|
||||||
l_oBike.Stub(x => x.IsDemo).Return(true);
|
|
||||||
l_oBike.Stub(x => x.Description).Return("MeinStadtrad");
|
|
||||||
Assert.AreEqual(
|
|
||||||
"MeinStadtrad",
|
|
||||||
l_oBike.GetDisplayName());
|
|
||||||
Assert.AreEqual(
|
|
||||||
"22",
|
|
||||||
l_oBike.GetDisplayId());
|
|
||||||
|
|
||||||
l_oBike = MockRepository.GenerateStub<IBikeInfoMutable>();
|
|
||||||
l_oBike.Stub(x => x.WheelType).Return(WheelType.Trike);
|
|
||||||
l_oBike.Stub(x => x.TypeOfBike).Return(TypeOfBike.Cargo);
|
|
||||||
l_oBike.Stub(x => x.Description).Return("MeinCargoDreiradl");
|
|
||||||
l_oBike.Stub(x => x.Id).Return("22");
|
|
||||||
Assert.AreEqual(
|
|
||||||
"MeinCargoDreiradl",
|
|
||||||
l_oBike.GetDisplayName());
|
|
||||||
Assert.AreEqual(
|
|
||||||
"22",
|
|
||||||
l_oBike.GetDisplayId());
|
|
||||||
|
|
||||||
l_oBike = MockRepository.GenerateStub<IBikeInfoMutable>();
|
|
||||||
l_oBike.Stub(x => x.WheelType).Return(WheelType.Two);
|
|
||||||
l_oBike.Stub(x => x.TypeOfBike).Return(TypeOfBike.Cargo);
|
|
||||||
l_oBike.Stub(x => x.Description).Return("MeinCargoALololong");
|
|
||||||
l_oBike.Stub(x => x.Id).Return("22");
|
|
||||||
Assert.AreEqual(
|
|
||||||
"MeinCargoALololong",
|
|
||||||
l_oBike.GetDisplayName());
|
|
||||||
Assert.AreEqual(
|
|
||||||
"22",
|
|
||||||
l_oBike.GetDisplayId());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestGetDisplayName_UndefinedTypes()
|
|
||||||
{
|
|
||||||
var l_oBike = MockRepository.GenerateStub<IBikeInfoMutable>();
|
|
||||||
l_oBike.Stub(x => x.WheelType).Return(WheelType.Mono);
|
|
||||||
l_oBike.Stub(x => x.TypeOfBike).Return(TypeOfBike.Cargo);
|
|
||||||
l_oBike.Stub(x => x.Description).Return("SuperCargo");
|
|
||||||
l_oBike.Stub(x => x.Id).Return("22");
|
|
||||||
Assert.AreEqual(
|
|
||||||
"SuperCargo",
|
|
||||||
l_oBike.GetDisplayName());
|
|
||||||
|
|
||||||
Assert.AreEqual(
|
|
||||||
"22",
|
|
||||||
l_oBike.GetDisplayId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -40,84 +40,33 @@
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\BluetoothLock\Tdo\TestLockInfoAuthTdo.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\TestLocksServicesContainerMutable.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\TestServicesContainerMutable.cs" />
|
<Compile Include="Fixtures\ObjectTests\Services\TestServicesContainerMutable.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Settings\BluetoothLock\TestLockIt.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Account\TestAccountPageViewModel.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\Account\TestAccountPageViewModel.cs" />
|
||||||
<None Include="Fixtures\ObjectTests\Bike\BluetoothLock\TestLockInfo.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\BluetoothLock\TestLockInfoHelper.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\BluetoothLock\TestLockInfoMutable.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBike.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeCollection.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeCollectionFilter.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikesAvailableResponse.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\CopriCallsHttpReference.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\CopriCallsHttpReference.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Exception\TestAuthcookieNotDefinedException.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Filter\TestIntersectFilter.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Filter\TestNullFilter.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestCachedQuery.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestCachedQuery.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestCachedQueryLoggedIn.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestCachedQueryLoggedIn.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestConnectorCache.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestConnectorCache.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriCallsHttps.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriCallsHttps.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriCallsStatic.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriCallsStatic.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestResponseHelper.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestCommandLoggedIn.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestCommandLoggedIn.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestConnector.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestConnector.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriServerUriList.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestFilter.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\TestFilter.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestQuery.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestQuery.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestQueryLoggedIn.cs" />
|
<Compile Include="Fixtures\ObjectTests\Connector\Query\TestQueryLoggedIn.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Logging\TestLoggingDirectoryManager.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Map\TestMapPageFilter.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\BluetoothLock\Crypto\TestCryptoHelper.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\BluetoothLock\TestLockItBaseService.cs" />
|
<Compile Include="Fixtures\ObjectTests\Services\BluetoothLock\TestLockItBaseService.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\Services\BluetoothLock\TestLockServiceSimulation.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Settings\TestGroupFilterSettings.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Settings\TestPollingParameters.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Settings\TestSettings.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Station\TestNullStation.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\TestFilterCollection.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\TestFilterCollectionStore.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\User\Account\TestAccount.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\User\Account\TestAccountExtensions.cs" />
|
<Compile Include="Fixtures\ObjectTests\User\Account\TestAccountExtensions.cs" />
|
||||||
<None Include="Fixtures\ObjectTests\User\Account\TestStore.cs" />
|
<None Include="Fixtures\ObjectTests\User\Account\TestStore.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Bikes\Bike\BluetoothLock\TestRequestHandlerFactory.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Info\TestInfoViewModel.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Map\TestMapPageFilter.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\Map\TestMapPageFilter.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Map\TestMapPageViewModel.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\Settings\TestFilterCollectionMutable.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeAtStationInUseStateInfoProvider.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeAtStationViewModel.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeAtStationViewModel.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeViewModel.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeViewModel.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestBikeViewModelFactory.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestMyBikeInUseStateInfoProvider.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestMyBikePageViewModel.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\TestMyBikePageViewModel.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestMyBikesPageViewModel.cs" />
|
<Compile Include="Fixtures\ObjectTests\ViewModel\TestMyBikesPageViewModel.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\ViewModel\TestViewModelHelper.cs" />
|
|
||||||
<Compile Include="Fixtures\UseCases\ConnectedOffline\TestTinkApp.cs" />
|
<Compile Include="Fixtures\UseCases\ConnectedOffline\TestTinkApp.cs" />
|
||||||
<Compile Include="Fixtures\UseCases\TestHelper.cs" />
|
<Compile Include="Fixtures\UseCases\TestHelper.cs" />
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeSerializeJSON.cs" />
|
<None Include="Fixtures\ObjectTests\Bike\TestBikeSerializeJSON.cs" />
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeCollectionSerializeJSON.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestStateBookedInfoSerializeJSON.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\TestCopriCallsMemory.cs.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestBikesAvailableResponse.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestBikesOccupiedResponse.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestBookingResponse.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestResponseBase.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Connector\Response\TestStationsAllResponse.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateBookedInfo.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateDisposableInfo.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateInfoMutable.cs" />
|
<Compile Include="Fixtures\ObjectTests\State\TestStateInfoMutable.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateInfoSerializeJSON.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateRequestedInfo.cs" />
|
<Compile Include="Fixtures\ObjectTests\State\TestStateRequestedInfo.cs" />
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeMutable.cs" />
|
|
||||||
<None Include="Fixtures\ObjectTests\Bike\TestBikeCollectionMutable.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\State\TestStateRequestedInfoSerializeJSON.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\Station\TestStation.cs" />
|
|
||||||
<Compile Include="Fixtures\UseCases\SelectStation\TestTinkApp.cs" />
|
<Compile Include="Fixtures\UseCases\SelectStation\TestTinkApp.cs" />
|
||||||
<Compile Include="Fixtures\ObjectTests\User\Account\TestValidator.cs" />
|
|
||||||
<Compile Include="Fixtures\ObjectTests\User\TestUser.cs" />
|
|
||||||
<Compile Include="Mocks\Bike\BikeCollectionMock.cs" />
|
<Compile Include="Mocks\Bike\BikeCollectionMock.cs" />
|
||||||
<Compile Include="Mocks\Connector\CopriCallsCacheMemory.cs" />
|
<Compile Include="Mocks\Connector\CopriCallsCacheMemory.cs" />
|
||||||
<Compile Include="Mocks\DateTimeMocker.cs" />
|
<Compile Include="Mocks\DateTimeMocker.cs" />
|
||||||
|
@ -185,7 +134,13 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Connector\Exception\" />
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Connector\Filter\" />
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Connector\Response\" />
|
||||||
<Folder Include="Fixtures\ObjectTests\Connector\Updater\" />
|
<Folder Include="Fixtures\ObjectTests\Connector\Updater\" />
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Services\BluetoothLock\Crypto\" />
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Services\BluetoothLock\Tdo\" />
|
||||||
|
<Folder Include="Fixtures\ObjectTests\Settings\BluetoothLock\" />
|
||||||
<Folder Include="Fixtures\UseCases\Startup\" />
|
<Folder Include="Fixtures\UseCases\Startup\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
|
Loading…
Reference in a new issue