Version 3.0.365

This commit is contained in:
Anja 2023-05-11 17:39:28 +02:00
parent 0b9196a78d
commit 0eb7362cb8
64 changed files with 1423 additions and 1045 deletions

View file

@ -237,7 +237,6 @@
<GoogleServicesJson Include="google-services.json" /> <GoogleServicesJson Include="google-services.json" />
<None Include="Resources\AboutResources.txt" /> <None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" /> <None Include="Assets\AboutAssets.txt" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\layout\Tabbar.axml" /> <AndroidResource Include="Resources\layout\Tabbar.axml" />

View file

@ -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.364" android:versionCode="364"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.365" android:versionCode="365">
<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 -->

View file

@ -12,7 +12,7 @@ using Xamarin.Forms;
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LastenradBayern.Android")] [assembly: AssemblyProduct("LastenradBayern.Android")]
[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif #endif
[assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")] [assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")]
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]

View file

@ -56,8 +56,8 @@
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>LastenradBayern</string> <string>LastenradBayern</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>364</string> <string>365</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.364</string> <string>3.0.365</string>
</dict> </dict>
</plist> </plist>

View file

@ -241,7 +241,6 @@
<ITunesArtwork Include="iTunesArtwork@2x" /> <ITunesArtwork Include="iTunesArtwork@2x" />
<Compile Include="Device\AppInfo.cs" /> <Compile Include="Device\AppInfo.cs" />
<Compile Include="Device\ExternalBrowseService.cs" /> <Compile Include="Device\ExternalBrowseService.cs" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<BundleResource Include="Resources\Icon-60%403x.png" /> <BundleResource Include="Resources\Icon-60%403x.png" />

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
@ -29,6 +29,10 @@ using Arendi.BleLibrary.Local;
// Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings. // Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings.
[assembly: XamlCompilation(XamlCompilationOptions.Compile)] [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
// Add ExportFont attribute
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
namespace TINK namespace TINK
{ {
public partial class App : Application public partial class App : Application

View file

@ -330,4 +330,9 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator> <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Free-Solid-900.otf">
<Generator>MSBuild:Compile</Generator>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

View file

@ -56,12 +56,12 @@
Text="{x:Static resources:AppResources.StatusTextCopriLock}" Text="{x:Static resources:AppResources.StatusTextCopriLock}"
FontSize="Small" FontSize="Small"
IsVisible="{Binding IsBikeWithCopriLock}"/> IsVisible="{Binding IsBikeWithCopriLock}"/>
<!-- Rental description (tarif name, options and rental info --> <!-- Rental description (tariff name, options and rental info -->
<Grid <Grid
RowSpacing="0" RowSpacing="0"
IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}"> IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<!-- start tarif- entries --> <!-- start tariff entries -->
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@ -84,7 +84,7 @@
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- start tarif- entries (should be a CollectionView) --> <!-- start tariff entries (should be a CollectionView) -->
<Label <Label
Text= "{x:Static resources:AppResources.MessageBikesManagementTariffDescriptionTariffHeader}" Text= "{x:Static resources:AppResources.MessageBikesManagementTariffDescriptionTariffHeader}"
IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}" IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}"
@ -177,7 +177,7 @@
IsVisible="{Binding TariffDescription.TarifEntry9.Value, Converter={StaticResource Label_Converter}}" IsVisible="{Binding TariffDescription.TarifEntry9.Value, Converter={StaticResource Label_Converter}}"
Grid.Row="9" Grid.Row="9"
Grid.Column="1"/> Grid.Column="1"/>
<!-- start tarif- entries (should be a CollectionView) --> <!-- start tariff entries (should be a CollectionView) -->
<Label <Label
Text= "{Binding TariffDescription.InfoEntry1}" Text= "{Binding TariffDescription.InfoEntry1}"
IsVisible="{Binding TariffDescription.InfoEntry1, Converter={StaticResource Label_Converter}}" IsVisible="{Binding TariffDescription.InfoEntry1, Converter={StaticResource Label_Converter}}"

View file

@ -67,23 +67,11 @@
<StackLayout> <StackLayout>
<Label FormattedText="{Binding LikeTinkApp}"/> <Label FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app- related support --> <!--- Mail to app- related support -->
<Button <Button
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}" Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}" IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/> Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store </StackLayout>
inactivated since most feedback in App Store is not app-related-->
<!--<Label
Margin="0,10,0,0"
TextType="Html"
HorizontalOptions="Center"
TextColor="{DynamicResource primary-back-title-color}"
Text="{x:Static resources:AppResources.ActionContactRate}">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OnRateRequest}"/>
</Label.GestureRecognizers>
</Label>-->
</StackLayout>
</Frame> </Frame>
</StackLayout> </StackLayout>
</Frame> </Frame>

View file

@ -60,7 +60,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"
@ -79,7 +79,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"

View file

@ -237,7 +237,6 @@
<GoogleServicesJson Include="google-services.json" /> <GoogleServicesJson Include="google-services.json" />
<None Include="Resources\AboutResources.txt" /> <None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" /> <None Include="Assets\AboutAssets.txt" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\layout\Tabbar.axml" /> <AndroidResource Include="Resources\layout\Tabbar.axml" />

View file

@ -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.364" android:versionCode="364"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.365" android:versionCode="365">
<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 -->

View file

@ -12,7 +12,7 @@ using Xamarin.Forms;
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Meinkonrad.Android")] [assembly: AssemblyProduct("Meinkonrad.Android")]
[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif #endif
[assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")] [assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")]
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]

View file

@ -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>364</string> <string>365</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.364</string> <string>3.0.365</string>
</dict> </dict>
</plist> </plist>

View file

@ -240,7 +240,6 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Device\AppInfo.cs" /> <Compile Include="Device\AppInfo.cs" />
<Compile Include="Device\ExternalBrowseService.cs" /> <Compile Include="Device\ExternalBrowseService.cs" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<BundleResource Include="Resources\Icon-60%403x.png" /> <BundleResource Include="Resources\Icon-60%403x.png" />

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
@ -28,6 +28,10 @@ using Arendi.BleLibrary.Local;
// Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings. // Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings.
[assembly: XamlCompilation(XamlCompilationOptions.Compile)] [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
// Add ExportFont attribute
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
namespace TINK namespace TINK
{ {
public partial class App : Application public partial class App : Application

View file

@ -181,6 +181,7 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="$(MSBuildThisFileDirectory)Resources\Fonts\" />
<Folder Include="$(MSBuildThisFileDirectory)View\BikesAtStation\" /> <Folder Include="$(MSBuildThisFileDirectory)View\BikesAtStation\" />
<Folder Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\" /> <Folder Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\" />
<Folder Include="$(MSBuildThisFileDirectory)View\Login\" /> <Folder Include="$(MSBuildThisFileDirectory)View\Login\" />
@ -339,4 +340,9 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator> <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Free-Solid-900.otf">
<Generator>MSBuild:Compile</Generator>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

View file

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
mc:Ignorable="d" mc:Ignorable="d"
x:Class="TINK.View.Account.AccountPage"> x:Class="TINK.View.Account.AccountPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
@ -13,24 +15,48 @@
Text="{x:Static resources:AppResources.MarkingAccount}"/> Text="{x:Static resources:AppResources.MarkingAccount}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Content>
<Frame> <ContentPage.Content>
<StackLayout>
<Frame> <ScrollView>
<StackLayout>
<Label Text="{Binding LoggedInInfo}" /> <StackLayout>
<Label IsVisible="{Binding IsBookingStateInfoVisible}"
Text="{Binding BookingStateInfo}" /> <Frame
<Button Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}" Padding="10"
Command="{Binding OnManageAccount}" Margin="0,10,0,5"
IsEnabled="{Binding IsLogoutPossible}"/> HorizontalOptions="FillAndExpand"
<Button Style="{StaticResource SecondaryButton}" BackgroundColor="White">
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
Command="{Binding OnLogoutRequest}" <StackLayout
IsEnabled="{Binding IsLogoutPossible}"/> Padding="10">
</StackLayout>
</Frame> <Label
</StackLayout> Text="{Binding LoggedInInfo}" />
</Frame>
</ContentPage.Content> <Label
</ContentPage> IsVisible="{Binding IsBookingStateInfoVisible}"
Text="{Binding BookingStateInfo}" />
<Button
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
Command="{Binding OnManageAccount}"
IsEnabled="{Binding IsLogoutPossible}"/>
<Button
Style="{StaticResource SecondaryButton}"
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
Command="{Binding OnLogoutRequest}"
IsEnabled="{Binding IsLogoutPossible}"/>
</StackLayout>
</Frame>
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>

View file

@ -9,13 +9,14 @@
mc:Ignorable="d" mc:Ignorable="d"
x:Class="TINK.View.Bike.ILockItBike"> x:Class="TINK.View.Bike.ILockItBike">
<ContentView> <ContentView>
<ContentView.Resources> <ContentView.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/> <conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
</ContentView.Resources> </ContentView.Resources>
<Frame <Frame
Padding="10" Padding="10"
Margin="0,5,0,5" Margin="0,10,0,5"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
BackgroundColor="White"> BackgroundColor="White">

View file

@ -3,7 +3,9 @@
xmlns:conv="clr-namespace:TINK.View" xmlns:conv="clr-namespace:TINK.View"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.ContactPage"> x:Class="TINK.View.Contact.ContactPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
@ -11,85 +13,110 @@
Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/> Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Resources> <ContentPage.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/> <conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
<conv:BoolInverterConverter x:Key="BoolInvert_Converter"/> <conv:BoolInverterConverter x:Key="BoolInvert_Converter"/>
</ContentPage.Resources> </ContentPage.Resources>
<ContentPage.Content>
<ScrollView> <ContentPage.Content>
<Frame>
<StackLayout x:Name="ContactPageView"> <ScrollView>
<Frame
IsVisible="{Binding <StackLayout
Path=IsOperatorInfoAvaliable, x:Name="ContactPageView">
Converter={StaticResource BoolInvert_Converter}}">
<!-- Button to select station and explanation text --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,10,0,5"
TextType="Html" HorizontalOptions="FillAndExpand"
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/> BackgroundColor="White">
<Button
Text="{x:Static resources:AppResources.ActionSelectStation}" <StackLayout
Command="{Binding OnSelectStationRequest}"/> Padding="10">
</StackLayout>
</Frame> <!-- Button to select station and explanation text -->
<Frame <StackLayout
IsVisible="{Binding IsOperatorInfoAvaliable}"> IsVisible="{Binding Path=IsOperatorInfoAvaliable, Converter={StaticResource BoolInvert_Converter}}">
<!-- Operator info -->
<StackLayout> <Label
<Label TextType="Html"
IsVisible="{Binding IsOperatorInfoAvaliable}" Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
HorizontalOptions="Center" <Button
FontAttributes="Bold" Text="{x:Static resources:AppResources.ActionSelectStation}"
Text="{Binding ProviderNameText}"/> Command="{Binding OnSelectStationRequest}"/>
<!--- Mail to operator -->
<Label </StackLayout>
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding MailAddressAndMotivationsText}"/> <!-- Contact operator -->
<Button <StackLayout
x:Name="MailAddressButton" IsVisible="{Binding IsOperatorInfoAvaliable}">
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding MailAddressText}" <!--- Name of operator -->
IsEnabled="{Binding IsSendMailAvailable}" <Label
Command="{Binding OnMailToOperatorRequest}"/> IsVisible="{Binding IsOperatorInfoAvaliable}"
<!--- Phone --> HorizontalOptions="Center"
<Label FontAttributes="Bold"
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}" Text="{Binding ProviderNameText}"/>
FormattedText="{Binding PhoneContactText}"/>
<Button <!--- Mail to operator -->
Style="{StaticResource SecondaryButton}" <Label
x:Name="PhoneNumberButton" IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}" FormattedText="{Binding MailAddressAndMotivationsText}"/>
Text="{Binding PhoneNumberText}" <Button
IsEnabled="{Binding IsDoPhoncallAvailable}" x:Name="MailAddressButton"
Command="{Binding OnPhoneRequest}"/> IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
</StackLayout> Text="{Binding MailAddressText}"
</Frame> IsEnabled="{Binding IsSendMailAvailable}"
<Frame> Command="{Binding OnMailToOperatorRequest}"/>
<StackLayout>
<Label FormattedText="{Binding LikeTinkApp}"/> <!--- Phone to operator -->
<!--- Mail to app- related support --> <Label
<Button IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding PhoneContactText}"/>
<Button
Style="{StaticResource SecondaryButton}"
x:Name="PhoneNumberButton"
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding PhoneNumberText}"
IsEnabled="{Binding IsDoPhoncallAvailable}"
Command="{Binding OnPhoneRequest}"/>
</StackLayout>
</StackLayout>
</Frame>
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<!--- Contact app-developer -->
<StackLayout
Padding="10">
<Label
FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app-developer -->
<Button
Style="{StaticResource SecondaryButton}" Style="{StaticResource SecondaryButton}"
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}" Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}" IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/> Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store
inactivated since most feedback in App Store is not app-related--> </StackLayout>
<!--<Label
Margin="0,10,0,0" </Frame>
TextType="Html"
HorizontalOptions="Center" </StackLayout>
TextColor="{DynamicResource primary-back-title-color}"
Text="{x:Static resources:AppResources.ActionContactRate}"> </ScrollView>
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OnRateRequest}"/> </ContentPage.Content>
</Label.GestureRecognizers>
</Label>-->
</StackLayout>
</Frame>
</StackLayout>
</Frame>
</ScrollView>
</ContentPage.Content>
</ContentPage> </ContentPage>

View file

@ -65,7 +65,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"
@ -84,7 +84,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"

View file

@ -7,77 +7,121 @@
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View" xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.FeedbackPopup"> x:Class="TINK.View.FeedbackPopup">
<xct:Popup.Resources>
<x:String x:Key="check_circle">&#xf058;</x:String>
</xct:Popup.Resources>
<StackLayout>
<!-- Head and title --> <xct:Popup.Resources>
<StackLayout <x:String x:Key="check_circle">&#xf058;</x:String>
Padding="30" </xct:Popup.Resources>
BackgroundColor="{DynamicResource primary-back-title-color}">
<Label
HorizontalTextAlignment="Center"
FontSize="Large"
TextColor="White"
Text="{x:Static resources:AppResources.MarkingReturnBikeMainMessage}"/>
<Image>
<Image.Source>
<FontImageSource Size="60" Glyph="{StaticResource check_circle}" FontFamily="FA-S" Color="White"/>
</Image.Source>
</Image>
</StackLayout>
<!-- Co2saving --> <ScrollView
<Frame Orientation="Vertical"
x:Name="Co2SavingFrame"> HorizontalOptions="FillAndExpand"
<Label VerticalOptions="FillAndExpand">
x:Name="Co2SavingLabel"
Text=""/>
</Frame>
<!-- Checkbox and input elements --> <StackLayout
<ScrollView> HorizontalOptions="FillAndExpand"
<StackLayout> VerticalOptions="FillAndExpand"
<!-- Battery level --> Padding="0,0,0,300">
<!-- Head and title -->
<StackLayout
Padding="20"
BackgroundColor="{DynamicResource primary-back-title-color}">
<Label
HorizontalTextAlignment="Center"
FontSize="Large"
TextColor="White"
Text="{x:Static resources:AppResources.MarkingReturnBikeMainMessage}"/>
<Image>
<Image.Source>
<FontImageSource Size="60" Glyph="{StaticResource check_circle}" FontFamily="FA-S" Color="White"/>
</Image.Source>
</Image>
</StackLayout>
<!-- Content -->
<StackLayout
Margin="10"
Spacing="10">
<!-- Co2saving -->
<Frame
x:Name="Co2SavingFrame">
<Label
x:Name="Co2SavingLabel"
Text=""/>
</Frame>
<!-- Battery level -->
<sharedGui:BarLevelInputView <sharedGui:BarLevelInputView
x:Name="BarLevelInputView" x:Name="BarLevelInputView"
HorizontalOptions="Center"/> HorizontalOptions="Center"/>
<!-- Checkbox Is Broken -->
<StackLayout Orientation="Horizontal"> <!-- Is bike okay? -->
<CheckBox x:Name="brockenCheckBox" IsChecked="True" HeightRequest="20"/> <Grid
<Label ColumnDefinitions="*,Auto,Auto,Auto,*"
FontSize="Medium" RowDefinitions="Auto,Auto"
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeStateIsOK}"/> Margin="0,20,0,0">
</StackLayout> <Label
<Editor Grid.Column="1"
x:Name="feedbackMessage" Grid.Row="0"
AutoSize="TextChanges" FontSize="Medium"
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}" FontAttributes="Bold"
Text=""> Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
<Editor.Triggers> </Label>
<DataTrigger TargetType="Editor" <Switch
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}" Grid.Column="2"
Value="true"> Grid.Row="0"
<Setter Property="Placeholder" VerticalOptions="Center"
Value="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}" /> HorizontalOptions="End"
</DataTrigger> x:Name="bikeIsOkSwitch"
<DataTrigger TargetType="Editor" IsToggled="True"/>
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}" <Label
Value="false"> Grid.Column="3"
<Setter Property="Placeholder" Grid.Row="0"
Value="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}" /> VerticalOptions="Center"
</DataTrigger> HorizontalOptions="Start">
</Editor.Triggers> <Label.Triggers>
</Editor> <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
</StackLayout> <Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerNo}"/>
</ScrollView> </DataTrigger>
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="True">
<Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerYes}"/>
</DataTrigger>
</Label.Triggers>
</Label>
<!-- Text input bike is not OK -->
<Editor
Grid.Column="0"
Grid.ColumnSpan="5"
Grid.Row="1"
x:Name="feedbackMessage"
AutoSize="TextChanges"
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}"
Text=""
IsVisible="False">
<Editor.Triggers>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}"
Value="False">
<Setter Property="IsVisible" Value="True"/>
<Setter Property="Text" Value=""/>
</DataTrigger>
</Editor.Triggers>
</Editor>
</Grid>
<!-- Buttons -->
<Button
WidthRequest="100"
Clicked="OnOkClicked"
Text="{x:Static resources:AppResources.MessageAnswerOk}"/>
</StackLayout>
</StackLayout>
</ScrollView>
<!-- Buttons -->
<Button
WidthRequest="100"
Clicked="OnOkClicked"
Text="OK"
Margin="0,0,0,3"/>
</StackLayout>
</xct:Popup> </xct:Popup>

View file

@ -43,7 +43,7 @@ namespace TINK.View
return new Result return new Result
{ {
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null, CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked, IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text Message = feedbackMessage.Text
}; };
} }
@ -53,7 +53,7 @@ namespace TINK.View
var result = new Result var result = new Result
{ {
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null, CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked, IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text Message = feedbackMessage.Text
}; };

View file

@ -39,23 +39,42 @@
<sharedGui:NotConnectedToNetView/> <sharedGui:NotConnectedToNetView/>
<!--Search bike--> <!--Search bike-->
<StackLayout <Frame
BackgroundColor="White" Padding="10"
Margin="0,10,0,5"
IsVisible="{Binding IsSelectBikeVisible}" IsVisible="{Binding IsSelectBikeVisible}"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="20"> Padding="20">
<Entry <Label Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}" Margin="0,0,0,-5">
MaxLength="10" <Label.Triggers>
CursorPosition="0" <DataTrigger
Text="{Binding BikeIdUserInput}"/> TargetType="Label"
Binding="{Binding Source={x:Reference FindBikeEntry}, Path=Text, TargetNullValue=''}"
Value="">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Label.Triggers>
</Label>
<Entry
x:Name="FindBikeEntry"
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
MaxLength="10"
CursorPosition="0"
Text="{Binding BikeIdUserInput}"/>
<Button <Button
Text="{x:Static resources:AppResources.MarkingFindBike}" Text="{x:Static resources:AppResources.MarkingSearchBike}"
IsEnabled="{Binding IsSelectBikeEnabled}" IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/> Command="{Binding OnSelectBikeRequest}"/>
</StackLayout> </StackLayout>
</Frame>
<!-- Bike --> <!-- Bike -->
<StackLayout <StackLayout

View file

@ -3,7 +3,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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"
x:Class="TINK.View.Login.LoginPage"> x:Class="TINK.View.Login.LoginPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
@ -11,91 +13,119 @@
Text="{x:Static resources:AppResources.MarkingLogin}"/> Text="{x:Static resources:AppResources.MarkingLogin}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ScrollView>
<Frame> <StackLayout>
<StackLayout x:Name="LoginPageView">
<Frame> <Frame
<StackLayout> Padding="10"
<Label Text="{x:Static resources:AppResources.MarkingLoginEmailAddressLabel}" Margin="0,10,0,5"
Margin="0,0,0,-10"> HorizontalOptions="FillAndExpand"
<Label.Triggers> BackgroundColor="White">
<DataTrigger
TargetType="Label" <StackLayout
Binding="{Binding Source={x:Reference EMailEntry}, Path=Text, TargetNullValue=''}" x:Name="LoginPageView"
Value=""> Padding="10">
<Setter Property="IsVisible" Value="False" />
</DataTrigger> <Label
</Label.Triggers> Text="{x:Static resources:AppResources.MarkingLoginEmailAddressLabel}"
</Label> Margin="0,0,0,-5">
<Entry <Label.Triggers>
Placeholder="{x:Static resources:AppResources.MarkingLoginEmailAddressPlaceholder}" <DataTrigger
Keyboard="Email" TargetType="Label"
AutomationId="mail_address_text" Binding="{Binding Source={x:Reference EMailEntry}, Path=Text, TargetNullValue=''}"
x:Name="EMailEntry" Value="">
Text="{Binding MailAddress}" <Setter
IsEnabled="{Binding IsLoggedOut}"/> Property="IsVisible"
<Label Text="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}" Value="False" />
Margin="0,0,0,-10"> </DataTrigger>
<Label.Triggers> </Label.Triggers>
<DataTrigger </Label>
TargetType="Label"
Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}" <Entry
Value=""> Placeholder="{x:Static resources:AppResources.MarkingLoginEmailAddressPlaceholder}"
<Setter Property="IsVisible" Value="False" /> Keyboard="Email"
</DataTrigger> AutomationId="mail_address_text"
</Label.Triggers> x:Name="EMailEntry"
</Label> Text="{Binding MailAddress}"
<sharedGui:TogglePasswordEntry IsEnabled="{Binding IsLoggedOut}"/>
Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
Text="{Binding Password}" <Label
HidePassword="True" Text="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
AutomationId="password_text" Margin="0,0,0,-5">
x:Name="PasswordEntry" <Label.Triggers>
IsEnabled="{Binding IsLoggedOut}"/> <DataTrigger
<Label Text="{x:Static resources:AppResources.MarkingLoginPasswordLabel}" TargetType="Label"
HorizontalOptions="End" Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}"
Margin="0,-10,0,5" Value="">
FontSize="Small"> <Setter
<Label.Triggers> Property="IsVisible"
<DataTrigger Value="False" />
TargetType="Label" </DataTrigger>
Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}" </Label.Triggers>
Value=""> </Label>
<Setter Property="IsVisible" Value="False" />
</DataTrigger> <sharedGui:TogglePasswordEntry
</Label.Triggers> Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
</Label> Text="{Binding Password}"
<Button HidePassword="True"
Text="{x:Static resources:AppResources.ActionLoginLogin}" AutomationId="password_text"
AutomationId="login_button" x:Name="PasswordEntry"
Command="{Binding OnLoginRequest}" IsEnabled="{Binding IsLoggedOut}"/>
IsEnabled="{Binding IsLoginRequestAllowed}">
</Button> <Label
<Button Text="{x:Static resources:AppResources.MarkingLoginPasswordLabel}"
Style="{StaticResource SecondaryButton}" HorizontalOptions="End"
Text="{x:Static resources:AppResources.ActionLoginRegister}" Margin="0,-10,0,5"
AutomationId="register_button" FontSize="Small">
Command="{Binding OnRegisterRequest}" <Label.Triggers>
IsVisible="{Binding IsWebViewElementsVisible}"> <DataTrigger
</Button> TargetType="Label"
<Label Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}"
IsVisible="{Binding IsRegisterTargetsInfoVisible}" Value="">
FormattedText="{Binding RegisterTargetsInfo}"> <Setter
</Label> Property="IsVisible"
<Label Value="False" />
Margin="0,10,0,0" </DataTrigger>
TextType="Html" </Label.Triggers>
AutomationId="password_forgotten_button" </Label>
HorizontalOptions="Center"
TextColor="{DynamicResource primary-back-title-color}" <Button
Text="{x:Static resources:AppResources.ActionLoginPasswordForgotten}"> Text="{x:Static resources:AppResources.ActionLoginLogin}"
<Label.GestureRecognizers> AutomationId="login_button"
<TapGestureRecognizer Command="{Binding OnPasswordForgottonRequest}"/> Command="{Binding OnLoginRequest}"
</Label.GestureRecognizers> IsEnabled="{Binding IsLoginRequestAllowed}">
</Label> </Button>
</StackLayout>
</Frame> <Button
</StackLayout> Style="{StaticResource SecondaryButton}"
</Frame> Text="{x:Static resources:AppResources.ActionLoginRegister}"
</ScrollView> AutomationId="register_button"
Command="{Binding OnRegisterRequest}"
IsVisible="{Binding IsWebViewElementsVisible}">
</Button>
<Label
IsVisible="{Binding IsRegisterTargetsInfoVisible}"
FormattedText="{Binding RegisterTargetsInfo}">
</Label>
<Label
Margin="0,10,0,0"
TextType="Html"
AutomationId="password_forgotten_button"
HorizontalOptions="Center"
TextColor="{DynamicResource primary-back-title-color}"
Text="{x:Static resources:AppResources.ActionLoginPasswordForgotten}">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding OnPasswordForgottonRequest}"/>
</Label.GestureRecognizers>
</Label>
</StackLayout>
</Frame>
</StackLayout>
</ContentPage> </ContentPage>

View file

@ -4,7 +4,8 @@
x:Class="TINK.View.Settings.SettingsPage" x:Class="TINK.View.Settings.SettingsPage"
xmlns:conv="clr-namespace:TINK.View.Settings;assembly=TINKLib" xmlns:conv="clr-namespace:TINK.View.Settings;assembly=TINKLib"
xmlns:account="clr-namespace:TINK.Model.User.Account;assembly=TINKLib" xmlns:account="clr-namespace:TINK.Model.User.Account;assembly=TINKLib"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"> xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
BackgroundColor="{DynamicResource background-color}">
<ContentPage.Resources> <ContentPage.Resources>
<conv:BackendPermissionsToVisibleConverter x:Key="Frame_Converter"/> <conv:BackendPermissionsToVisibleConverter x:Key="Frame_Converter"/>
@ -19,6 +20,7 @@
<conv:PermissionToVisibleConverter x:Key="ShowDiagnostics_Converter" VisibleFlag="{x:Static account:Permissions.ShowDiagnostics}"/> <conv:PermissionToVisibleConverter x:Key="ShowDiagnostics_Converter" VisibleFlag="{x:Static account:Permissions.ShowDiagnostics}"/>
<conv:PermissionToVisibleConverter x:Key="SwitchSiteCaching_Converter" VisibleFlag="{x:Static account:Permissions.SwitchNoSiteCaching}"/> <conv:PermissionToVisibleConverter x:Key="SwitchSiteCaching_Converter" VisibleFlag="{x:Static account:Permissions.SwitchNoSiteCaching}"/>
</ContentPage.Resources> </ContentPage.Resources>
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
@ -26,224 +28,269 @@
Text="{x:Static resources:AppResources.MarkingSettings}"/> Text="{x:Static resources:AppResources.MarkingSettings}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Content>
<ScrollView> <ContentPage.Content>
<Frame>
<StackLayout> <ScrollView>
<!--
<Button Text="Feedback" Clicked="OnFeedbackClickedAsync"/> <StackLayout>
-->
<Frame> <Frame
<StackLayout> Padding="10"
<Label Text="{x:Static resources:AppResources.MarkingCenterMapToCurrentPos}"/> Margin="0,10,0,5"
<Switch IsToggled="{Binding CenterMapToCurrentLocation}"/> HorizontalOptions="FillAndExpand"
</StackLayout> BackgroundColor="White">
</Frame> <Grid ColumnDefinitions="*,Auto">
<!-- Filter on view TINK/ Konrad --> <Label Text="{x:Static resources:AppResources.MarkingCenterMapToCurrentPos}"/>
<Frame IsVisible="{Binding IsGroupFilterVisible}"> <Switch Grid.Column="1" IsToggled="{Binding CenterMapToCurrentLocation}"/>
<StackLayout> </Grid>
<Label Text="{x:Static resources:AppResources.MarkingShowHideBikesOfType}"/> </Frame>
<ListView
<!-- Filter on view TINK/ Konrad -->
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding IsGroupFilterVisible}">
<StackLayout>
<Label Text="{x:Static resources:AppResources.MarkingShowHideBikesOfType}"/>
<ListView
HasUnevenRows="True" HasUnevenRows="True"
HeightRequest="120" HeightRequest="120"
x:Name="Filters"> x:Name="Filters">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<ViewCell IsEnabled="{Binding IsEnabled}"> <ViewCell IsEnabled="{Binding IsEnabled}">
<StackLayout Orientation="Horizontal"> <Grid ColumnDefinitions="*,Auto">
<Label Text="{Binding Text}"/> <Label Text="{Binding Text}"/>
<Switch IsToggled="{Binding IsActivated}"/> <Switch Grid.Column="1" IsToggled="{Binding IsActivated}"/>
</StackLayout> </Grid>
</ViewCell> </ViewCell>
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
</StackLayout> </StackLayout>
</Frame> </Frame>
<!-- Picker to selct startup page -->
<Frame IsVisible="False">
<StackLayout>
<Label Text="{x:Static resources:AppResources.MarkingStartupPage}"/>
<Picker
ItemsSource="{Binding StartupSettings.ServicesTextList}"
SelectedItem="{Binding StartupSettings.ActiveText}"/>
</StackLayout>
</Frame>
<!-- Themes -->
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}">
<StackLayout>
<Label <!-- Themes -->
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}"
Text="Theme"/> Text="Theme"/>
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}"
ItemsSource="{Binding Themes.ServicesTextList}" ItemsSource="{Binding Themes.ServicesTextList}"
SelectedItem="{Binding Themes.ActiveText}"/> SelectedItem="{Binding Themes.ActiveText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}"> <!-- COPRI server selection -->
<!-- COPRI server selection --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
Text="{Binding CopriServerUriList.CopriServerUriDescription}"/> Text="{Binding CopriServerUriList.CopriServerUriDescription}"/>
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
ItemsSource="{Binding CopriServerUriList.ServerTextList}" ItemsSource="{Binding CopriServerUriList.ServerTextList}"
SelectedItem="{Binding CopriServerUriList.NextActiveServerText}"/> SelectedItem="{Binding CopriServerUriList.NextActiveServerText}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Text="{Binding Polling.PollingText}"/> Text="{Binding Polling.PollingText}"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
IsToggled="{Binding Polling.IsActivated}"/> IsToggled="{Binding Polling.IsActivated}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Text="{Binding Polling.PeriodeTotalSecondsText}"/> Text="{Binding Polling.PeriodeTotalSecondsText}"/>
<Stepper <Stepper
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Minimum="5" Minimum="5"
Increment="5" Increment="5"
Maximum="600" Maximum="600"
IsEnabled="{Binding Polling.IsActivated}" IsEnabled="{Binding Polling.IsActivated}"
Value="{Binding Polling.PeriodeTotalSeconds}"/> Value="{Binding Polling.PeriodeTotalSeconds}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
Text="Time after which COPRI-cache expires [s]"/> Text="Time after which COPRI-cache expires [s]"/>
<Slider <Slider
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
x:Name="expiresAfter" x:Name="expiresAfter"
Minimum="0" Minimum="0"
Maximum="15" Maximum="15"
Value="{Binding ExpiresAfterTotalSeconds}"/> Value="{Binding ExpiresAfterTotalSeconds}"/>
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
IsReadOnly="True" IsReadOnly="True"
Text="{Binding ExpiresAfterTotalSecondsText}"/> Text="{Binding ExpiresAfterTotalSecondsText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"> <!-- Lock control -->
<!-- Lock control --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="{x:Static resources:AppResources.MarkingLockControl}" /> Text="{x:Static resources:AppResources.MarkingLockControl}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
ItemsSource="{Binding LocksServices.Services.ServicesTextList}" ItemsSource="{Binding LocksServices.Services.ServicesTextList}"
SelectedItem="{Binding LocksServices.Services.ActiveText}"/> SelectedItem="{Binding LocksServices.Services.ActiveText}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="Bluetooth Connect Timeout [sec]"/> Text="Bluetooth Connect Timeout [sec]"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="{Binding LocksServices.ConnectTimeoutSecText}"/> Text="{Binding LocksServices.ConnectTimeoutSecText}"/>
<Stepper <Stepper
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Minimum="0.1" Minimum="0.1"
Increment="0.25" Increment="0.25"
Maximum="60" Maximum="60"
Value="{Binding LocksServices.ConnectTimeoutSec}"/> Value="{Binding LocksServices.ConnectTimeoutSec}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}">
<!-- Geolocation -->
<StackLayout>
<Label <!-- Geolocation -->
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
Text="{x:Static resources:AppResources.MarkingGeolocationControl}" /> Text="{x:Static resources:AppResources.MarkingGeolocationControl}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
ItemsSource="{Binding GeolocationServices.ServicesTextList}" ItemsSource="{Binding GeolocationServices.ServicesTextList}"
SelectedItem="{Binding GeolocationServices.ActiveText}"/> SelectedItem="{Binding GeolocationServices.ActiveText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"> <!-- Web site caching -->
<!-- Web site caching --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
Text="{x:Static resources:AppResources.MarkingWebsiteCaching}"/> Text="{x:Static resources:AppResources.MarkingWebsiteCaching}"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
IsToggled="{Binding IsSiteCachingOnDisplayValue}"/> IsToggled="{Binding IsSiteCachingOnDisplayValue}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"> <!-- Logging -->
<!-- Logging --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
Text="{x:Static resources:AppResources.MarkingLoggingLevel}" /> Text="{x:Static resources:AppResources.MarkingLoggingLevel}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
ItemsSource="{Binding LoggingLevels}" ItemsSource="{Binding LoggingLevels}"
SelectedItem="{Binding SelectedLoggingLevel}"/> SelectedItem="{Binding SelectedLoggingLevel}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
Text="Logdatei in externen Pfad schreiben"/> Text="Logdatei in externen Pfad schreiben"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
IsToggled="{Binding LogToExternalFolderDisplayValue}" IsToggled="{Binding LogToExternalFolderDisplayValue}"
IsEnabled="{Binding IsLogToExternalFolderVisible}"/> IsEnabled="{Binding IsLogToExternalFolderVisible}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"> <!-- Logging -->
<!-- Logging --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
Text="{x:Static resources:AppResources.MarkingVerboseErrorMessage}" /> Text="{x:Static resources:AppResources.MarkingVerboseErrorMessage}" />
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
IsToggled="{Binding IsReportLevelVerbose}"/> IsToggled="{Binding IsReportLevelVerbose}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"> <!-- Display of parameters -->
<!-- Display of parameters --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Device Identifier" /> Text="Device Identifier" />
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding DeviceIdentifier}"/> Text="{Binding DeviceIdentifier}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Copri Sitzungkeks"/> Text="Copri Sitzungkeks"/>
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding SessionCookie}"/> Text="{Binding SessionCookie}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Interner Pfad (Einstell./ ggf. Logging)"/> Text="Interner Pfad (Einstell./ ggf. Logging)"/>
<Editor <Editor
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding InternalPath}"/> Text="{Binding InternalPath}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Externer Pfad (Mock/ ggf. Logging)"/> Text="Externer Pfad (Mock/ ggf. Logging)"/>
<Editor <Editor
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding ExternalPath}"/> Text="{Binding ExternalPath}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
</StackLayout>
</Frame> </StackLayout>
</ScrollView>
</ContentPage.Content> </ScrollView>
</ContentPage.Content>
</ContentPage> </ContentPage>

View file

@ -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.364" android:versionCode="364"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.365" android:versionCode="365">
<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 -->

View file

@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif #endif
[assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")] [assembly: MetaData("com.google.android.geo.API_KEY", Value = "000000000000000000000000000000000000000")]
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]

View file

@ -237,7 +237,6 @@
<GoogleServicesJson Include="google-services.json" /> <GoogleServicesJson Include="google-services.json" />
<None Include="Resources\AboutResources.txt" /> <None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" /> <None Include="Assets\AboutAssets.txt" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\Location_Button.png"> <AndroidResource Include="Resources\drawable\Location_Button.png">

View file

@ -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>364</string> <string>365</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.364</string> <string>3.0.365</string>
</dict> </dict>
</plist> </plist>

View file

@ -241,7 +241,6 @@
<ITunesArtwork Include="iTunesArtwork@2x" /> <ITunesArtwork Include="iTunesArtwork@2x" />
<Compile Include="Device\AppInfo.cs" /> <Compile Include="Device\AppInfo.cs" />
<Compile Include="Device\ExternalBrowseService.cs" /> <Compile Include="Device\ExternalBrowseService.cs" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
<ITunesArtwork Include="iTunesArtwork" /> <ITunesArtwork Include="iTunesArtwork" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -14,13 +14,10 @@
<x:String x:Key="IconMyBikes">&#xf206;</x:String> <x:String x:Key="IconMyBikes">&#xf206;</x:String>
<x:String x:Key="IconAccount">&#xf007;</x:String> <x:String x:Key="IconAccount">&#xf007;</x:String>
<x:String x:Key="IconLogin">&#xf2f6;</x:String> <x:String x:Key="IconLogin">&#xf2f6;</x:String>
<x:String x:Key="IconSettings">&#xf013;</x:String> <x:String x:Key="IconSettings">&#xf013;</x:String>
<!--<x:String x:Key="IconFeesAndBikes">&#xf153;</x:String>--> <x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String> <x:String x:Key="IconContact">&#xf0e0;</x:String>
<!--<x:String x:Key="IconContact">&#xf095;</x:String>--> <x:String x:Key="IconInfo">&#xf05a;</x:String>
<x:String x:Key="IconContact">&#xf0e0;</x:String>
<x:String x:Key="IconInfo">&#xf05a;</x:String>
<!--<x:String x:Key="IconClose">&#xf00d;</x:String>-->
<x:String x:Key="IconClose">&#xf00d;</x:String> <x:String x:Key="IconClose">&#xf00d;</x:String>
<!--TogglePasswortEntry--> <!--TogglePasswortEntry-->

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
@ -28,6 +28,11 @@ using Arendi.BleLibrary.Local;
// Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings. // Required for support of binding package, see https://github.com/nuitsjp/Xamarin.Forms.GoogleMaps.Bindings.
[assembly: XamlCompilation(XamlCompilationOptions.Compile)] [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
// Add ExportFont attribute
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
[assembly: ExportFont("Roboto-Regular.ttf", Alias = "RobotoRegular")]
namespace TINK namespace TINK
{ {
public partial class App : Application public partial class App : Application

Binary file not shown.

View file

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html xml:lang="de" lang="de">
<title>TINK Konstanz</title>
<meta charset="utf-8"/>
<body>
<h1>WIE FUNKTIONIERT DAS TRANSPORTRAD-MIETEN?</h1>
<h2>Erstmalige Registrierung</h2><br>
Vor der ersten Anmietung eines Transportrades ist es notwendig, sich
kostenlos als Nutzerin oder Nutzer zu registrieren. Das dauert nur
wenige Minuten und geht am einfachsten über den <a href="https://tink-konstanz.de/TINK-Konstanz/Mieten">Mieten</a> Button. Sobald der Account freigeschaltet ist, kann es losgehen.<br><br>
<h2>Transportrad mieten</h2><br>
Einfach zur nächsten TINK Station gehen (freie Räder siehe Karte) und den Code
für das Zahlenschloss mittels SMS anfordern. Die Anleitung, wie es genau
geht, findet sich direkt an den Stationen, auf den Rädern oder hier: <br><a href="https://tink-konstanz.de/TINK-Konstanz/Anleitungen#3401">
<li>Anleitung Mietvorgang</a><br><a href="https://tink-konstanz.de/TINK-Konstanz/Anleitungen#3402">
<li>Anleitung TINK Räder</a><br>
<span style="font-weight:bold"> <li>Wichtig:</span> Nach der Nutzung das Rad an eine der TINK Stationen zurückbringen, an der Station anschließen und mittels SMS ausloggen.<br><br>
Die erste Version der TINK APP ist verfügbar. Wir freuen uns auf konstruktives feedback.
<br><br><h2>Preise</h2><br>
Die erste Stunde pro Tag ist kostenfrei, danach kostet jede weitere halbe Stunde 1 Euro. Maximal
kostet ein Rad pro 24 Stunden 9 Euro. Es kann ein Rad pro Account
gemietet werden. Bezahlung per Abbuchung oder Kreditkarte.<br>Servicegebühren:
Bei Abstellen eines Rades außerhalb der Stationen werden
entfernungsabhängige Gebühren für die Rückführung berechnet. Aktuelle
Preisliste siehe AGBs.</div>
<h1>WELCHE TRANSPORTRÄDER GIBT ES BEI TINK?</h1>
<div class="content2"><span class="content1">Zweirädriges Transportrad mit Platz für zwei Getränkekisten, Zuladung bis 80 kg. <br>Dreirädriges Transportrad sogar mit Platz für vier Getränkekisten, Zuladung bis 100 kg.</span><br>Jedes
Rad verfügt über eine leichtgängige Achtgang-Schaltung und einen
höhenverstellbaren Sattel. Im Zweirad können 2 Kinder, im Dreirad sogar 4
Kinder bis 6 Jahre mitgenommen werden. Die wegklappbaren Kindersitze
verfügen über Sicherheitsgurte.<br>Die Räder sind nach etwas Gewöhnung
leicht und sicher zu fahren. Vor der ersten Nutzung empfehlen wir ein
kurzes Üben ohne Beladung abseits des Straßenverkehrs. Einfach mal
ausprobieren, es macht richtig Spaß!
</body>
</html>

View file

@ -330,4 +330,14 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator> <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Roboto-Regular.ttf">
<Generator>MSBuild:Compile</Generator>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Free-Solid-900.otf">
<Generator>MSBuild:Compile</Generator>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

View file

@ -1,35 +1,61 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
mc:Ignorable="d" mc:Ignorable="d"
x:Class="TINK.View.Account.AccountPage"> x:Class="TINK.View.Account.AccountPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAccount}"/> Text="{x:Static resources:AppResources.MarkingAccount}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Content> <ContentPage.Content>
<Frame>
<StackLayout> <ScrollView>
<Frame>
<StackLayout> <StackLayout>
<Label Text="{Binding LoggedInInfo}" />
<Label IsVisible="{Binding IsBookingStateInfoVisible}" <Frame
Text="{Binding BookingStateInfo}" /> Padding="10"
<Button Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}" Margin="0,10,0,5"
Command="{Binding OnManageAccount}" HorizontalOptions="FillAndExpand"
IsEnabled="{Binding IsLogoutPossible}"/> BackgroundColor="White">
<Button Style="{StaticResource SecondaryButton}"
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}" <StackLayout
Command="{Binding OnLogoutRequest}" Padding="10">
IsEnabled="{Binding IsLogoutPossible}"/>
</StackLayout> <Label
</Frame> Text="{Binding LoggedInInfo}" />
</StackLayout>
</Frame> <Label
</ContentPage.Content> IsVisible="{Binding IsBookingStateInfoVisible}"
</ContentPage> Text="{Binding BookingStateInfo}" />
<Button
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
Command="{Binding OnManageAccount}"
IsEnabled="{Binding IsLogoutPossible}"/>
<Button
Style="{StaticResource SecondaryButton}"
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
Command="{Binding OnLogoutRequest}"
IsEnabled="{Binding IsLogoutPossible}"/>
</StackLayout>
</Frame>
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>

View file

@ -16,7 +16,7 @@
<Frame <Frame
Padding="10" Padding="10"
Margin="0,5,0,5" Margin="0,10,0,0"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
BackgroundColor="White"> BackgroundColor="White">
@ -172,12 +172,12 @@
IsVisible="{Binding IsLockitButtonVisible}" IsVisible="{Binding IsLockitButtonVisible}"
Command="{Binding OnLockitButtonClicked}"/> Command="{Binding OnLockitButtonClicked}"/>
<!-- Rental description (tarif name, options and rental info --> <!-- Rental description (tariff name, options and rental info -->
<Grid <Grid
RowSpacing="0" RowSpacing="0"
IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}"> IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<!-- start tarif- entries --> <!-- start tariff entries -->
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@ -202,7 +202,7 @@
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- start tarif- entries (should be a CollectionView) --> <!-- start tariff entries (should be a CollectionView) -->
<Label <Label
Text= "{x:Static resources:AppResources.MessageBikesManagementTariffDescriptionTariffHeader}" Text= "{x:Static resources:AppResources.MessageBikesManagementTariffDescriptionTariffHeader}"
IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}" IsVisible="{Binding TariffDescription.Header, Converter={StaticResource Label_Converter}}"
@ -335,7 +335,7 @@
Grid.Row="9" Grid.Row="9"
Grid.Column="1" Grid.Column="1"
Grid.ColumnSpan="2"/> Grid.ColumnSpan="2"/>
<!-- start tarif- entries (should be a CollectionView) --> <!-- start tariff entries (should be a CollectionView) -->
<Label <Label
Text= "{Binding TariffDescription.InfoEntry1}" Text= "{Binding TariffDescription.InfoEntry1}"
IsVisible="{Binding TariffDescription.InfoEntry1, Converter={StaticResource Label_Converter}}" IsVisible="{Binding TariffDescription.InfoEntry1, Converter={StaticResource Label_Converter}}"

View file

@ -3,92 +3,119 @@
xmlns:conv="clr-namespace:TINK.View" xmlns:conv="clr-namespace:TINK.View"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.ContactPage"> x:Class="TINK.View.Contact.ContactPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/> Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Resources> <ContentPage.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/> <conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
<conv:BoolInverterConverter x:Key="BoolInvert_Converter"/> <conv:BoolInverterConverter x:Key="BoolInvert_Converter"/>
</ContentPage.Resources> </ContentPage.Resources>
<ContentPage.Content> <ContentPage.Content>
<ScrollView>
<Frame> <ScrollView>
<StackLayout x:Name="ContactPageView">
<Frame <StackLayout
IsVisible="{Binding x:Name="ContactPageView">
Path=IsOperatorInfoAvaliable,
Converter={StaticResource BoolInvert_Converter}}"> <Frame
<!-- Button to select station and explanation text --> Padding="10"
<StackLayout> Margin="0,10,0,5"
<Label HorizontalOptions="FillAndExpand"
TextType="Html" BackgroundColor="White">
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
<Button <StackLayout
Text="{x:Static resources:AppResources.ActionSelectStation}" Padding="10">
Command="{Binding OnSelectStationRequest}"/>
</StackLayout> <!-- Button to select station and explanation text -->
</Frame> <StackLayout
<Frame IsVisible="{Binding Path=IsOperatorInfoAvaliable, Converter={StaticResource BoolInvert_Converter}}">
IsVisible="{Binding IsOperatorInfoAvaliable}">
<!-- Operator info --> <Label
<StackLayout> TextType="Html"
<Label Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
IsVisible="{Binding IsOperatorInfoAvaliable}" <Button
HorizontalOptions="Center" Text="{x:Static resources:AppResources.ActionSelectStation}"
FontAttributes="Bold" Command="{Binding OnSelectStationRequest}"/>
Text="{Binding ProviderNameText}"/>
<!--- Mail to operator --> </StackLayout>
<Label
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}" <!-- Contact operator -->
FormattedText="{Binding MailAddressAndMotivationsText}"/> <StackLayout
<Button IsVisible="{Binding IsOperatorInfoAvaliable}">
x:Name="MailAddressButton"
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}" <!--- Name of operator -->
Text="{Binding MailAddressText}" <Label
IsEnabled="{Binding IsSendMailAvailable}" IsVisible="{Binding IsOperatorInfoAvaliable}"
Command="{Binding OnMailToOperatorRequest}"/> HorizontalOptions="Center"
<!--- Phone --> FontAttributes="Bold"
<Label Text="{Binding ProviderNameText}"/>
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding PhoneContactText}"/> <!--- Mail to operator -->
<Button <Label
Style="{StaticResource SecondaryButton}" IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
x:Name="PhoneNumberButton" FormattedText="{Binding MailAddressAndMotivationsText}"/>
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}" <Button
Text="{Binding PhoneNumberText}" x:Name="MailAddressButton"
IsEnabled="{Binding IsDoPhoncallAvailable}" IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Command="{Binding OnPhoneRequest}"/> Text="{Binding MailAddressText}"
</StackLayout> IsEnabled="{Binding IsSendMailAvailable}"
</Frame> Command="{Binding OnMailToOperatorRequest}"/>
<Frame>
<StackLayout> <!--- Phone to operator -->
<Label FormattedText="{Binding LikeTinkApp}"/> <Label
<!--- Mail to app- related support --> IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
<Button FormattedText="{Binding PhoneContactText}"/>
<Button
Style="{StaticResource SecondaryButton}"
x:Name="PhoneNumberButton"
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding PhoneNumberText}"
IsEnabled="{Binding IsDoPhoncallAvailable}"
Command="{Binding OnPhoneRequest}"/>
</StackLayout>
</StackLayout>
</Frame>
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<!--- Contact app-developer -->
<StackLayout
Padding="10">
<Label
FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app-developer -->
<Button
Style="{StaticResource SecondaryButton}" Style="{StaticResource SecondaryButton}"
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}" Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}" IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/> Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store
inactivated since most feedback in App Store is not app-related--> </StackLayout>
<!--<Label
Margin="0,10,0,0" </Frame>
TextType="Html"
HorizontalOptions="Center" </StackLayout>
TextColor="{DynamicResource primary-back-title-color}"
Text="{x:Static resources:AppResources.ActionContactRate}">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OnRateRequest}"/>
</Label.GestureRecognizers>
</Label>-->
</StackLayout>
</Frame>
</StackLayout>
</Frame>
</ScrollView> </ScrollView>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>

View file

@ -54,7 +54,7 @@
Padding="0"> Padding="0">
<Button <Button
x:Name="KonradButton" x:Name="KonradButton"
AutomationId ="FilterKonrad_button" AutomationId ="FilterKonrad_button"
Text="{x:Static resources:AppResources.MarkingCityBike}" Text="{x:Static resources:AppResources.MarkingCityBike}"
Command="{Binding OnToggleTinkToKonrad}" Command="{Binding OnToggleTinkToKonrad}"
IsVisible="false" IsVisible="false"
@ -65,7 +65,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"
@ -84,7 +84,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"

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<xct:Popup xmlns="http://xamarin.com/schemas/2014/forms" <xct:Popup xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit" xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
@ -7,78 +7,121 @@
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View" xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.FeedbackPopup"> x:Class="TINK.View.FeedbackPopup">
<xct:Popup.Resources> <xct:Popup.Resources>
<x:String x:Key="check_circle">&#xf058;</x:String> <x:String x:Key="check_circle">&#xf058;</x:String>
</xct:Popup.Resources> </xct:Popup.Resources>
<StackLayout> <ScrollView
Orientation="Vertical"
<!-- Head and title --> HorizontalOptions="FillAndExpand"
<StackLayout VerticalOptions="FillAndExpand">
Padding="30"
BackgroundColor="{DynamicResource primary-back-title-color}"> <StackLayout
<Label HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Center" VerticalOptions="FillAndExpand"
FontSize="Large" Padding="0,0,0,300">
TextColor="White"
Text="{x:Static resources:AppResources.MarkingReturnBikeMainMessage}"/> <!-- Head and title -->
<Image> <StackLayout
<Image.Source> Padding="20"
<FontImageSource Size="60" Glyph="{StaticResource check_circle}" FontFamily="FA-S" Color="White"/> BackgroundColor="{DynamicResource primary-back-title-color}">
</Image.Source> <Label
</Image> HorizontalTextAlignment="Center"
</StackLayout> FontSize="Large"
TextColor="White"
<!-- Co2saving --> Text="{x:Static resources:AppResources.MarkingReturnBikeMainMessage}"/>
<Frame <Image>
x:Name="Co2SavingFrame"> <Image.Source>
<Label <FontImageSource Size="60" Glyph="{StaticResource check_circle}" FontFamily="FA-S" Color="White"/>
x:Name="Co2SavingLabel" </Image.Source>
Text=""/> </Image>
</Frame> </StackLayout>
<!-- Checkbox and input elements --> <!-- Content -->
<ScrollView> <StackLayout
<StackLayout> Margin="10"
<!-- Battery level --> Spacing="10">
<sharedGui:BarLevelInputView
x:Name="BarLevelInputView" <!-- Co2saving -->
HorizontalOptions="Center"/> <Frame
<!-- Checkbox Is Broken --> x:Name="Co2SavingFrame">
<StackLayout Orientation="Horizontal"> <Label
<CheckBox x:Name="brockenCheckBox" IsChecked="True" HeightRequest="20"/> x:Name="Co2SavingLabel"
<Label Text=""/>
FontSize="Medium" </Frame>
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeStateIsOK}"/>
</StackLayout> <!-- Battery level -->
<Editor <sharedGui:BarLevelInputView
x:Name="feedbackMessage" x:Name="BarLevelInputView"
AutoSize="TextChanges" HorizontalOptions="Center"/>
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}"
Text=""> <!-- Is bike okay? -->
<Editor.Triggers> <Grid
<DataTrigger TargetType="Editor" ColumnDefinitions="*,Auto,Auto,Auto,*"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}" RowDefinitions="Auto,Auto"
Value="true"> Margin="0,20,0,0">
<Setter Property="Placeholder" <Label
Value="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}" /> Grid.Column="1"
</DataTrigger> Grid.Row="0"
<DataTrigger TargetType="Editor" FontSize="Medium"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}" FontAttributes="Bold"
Value="false"> Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
<Setter Property="Placeholder" </Label>
Value="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}" /> <Switch
</DataTrigger> Grid.Column="2"
</Editor.Triggers> Grid.Row="0"
</Editor> VerticalOptions="Center"
</StackLayout> HorizontalOptions="End"
</ScrollView> x:Name="bikeIsOkSwitch"
IsToggled="True"/>
<!-- Buttons --> <Label
<Button Grid.Column="3"
WidthRequest="100" Grid.Row="0"
Clicked="OnOkClicked" VerticalOptions="Center"
Text="OK" HorizontalOptions="Start">
Margin="0,0,0,3"/> <Label.Triggers>
</StackLayout> <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
</xct:Popup> <Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerNo}"/>
</DataTrigger>
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="True">
<Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerYes}"/>
</DataTrigger>
</Label.Triggers>
</Label>
<!-- Text input bike is not OK -->
<Editor
Grid.Column="0"
Grid.ColumnSpan="5"
Grid.Row="1"
x:Name="feedbackMessage"
AutoSize="TextChanges"
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}"
Text=""
IsVisible="False">
<Editor.Triggers>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}"
Value="False">
<Setter Property="IsVisible" Value="True"/>
<Setter Property="Text" Value=""/>
</DataTrigger>
</Editor.Triggers>
</Editor>
</Grid>
<!-- Buttons -->
<Button
WidthRequest="100"
Clicked="OnOkClicked"
Text="{x:Static resources:AppResources.MessageAnswerOk}"/>
</StackLayout>
</StackLayout>
</ScrollView>
</xct:Popup>

View file

@ -42,7 +42,7 @@ namespace TINK.View
return new Result return new Result
{ {
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null, CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked, IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text Message = feedbackMessage.Text
}; };
} }
@ -52,7 +52,7 @@ namespace TINK.View
var result = new Result var result = new Result
{ {
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null, CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked, IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text Message = feedbackMessage.Text
}; };

View file

@ -40,23 +40,42 @@
<sharedGui:NotConnectedToNetView/> <sharedGui:NotConnectedToNetView/>
<!--Search bike--> <!--Search bike-->
<StackLayout <Frame
BackgroundColor="White" Padding="10"
Margin="0,10,0,5"
IsVisible="{Binding IsSelectBikeVisible}" IsVisible="{Binding IsSelectBikeVisible}"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="20"> Padding="20">
<Entry <Label Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}" Margin="0,0,0,-5">
MaxLength="10" <Label.Triggers>
CursorPosition="0" <DataTrigger
Text="{Binding BikeIdUserInput}"/> TargetType="Label"
Binding="{Binding Source={x:Reference FindBikeEntry}, Path=Text, TargetNullValue=''}"
Value="">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Label.Triggers>
</Label>
<Entry
x:Name="FindBikeEntry"
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
MaxLength="10"
CursorPosition="0"
Text="{Binding BikeIdUserInput}"/>
<Button <Button
Text="{x:Static resources:AppResources.MarkingFindBike}" Text="{x:Static resources:AppResources.MarkingSearchBike}"
IsEnabled="{Binding IsSelectBikeEnabled}" IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/> Command="{Binding OnSelectBikeRequest}"/>
</StackLayout> </StackLayout>
</Frame>
<!-- Bike --> <!-- Bike -->
<StackLayout <StackLayout

View file

@ -3,98 +3,128 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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"
x:Class="TINK.View.Login.LoginPage"> x:Class="TINK.View.Login.LoginPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingLogin}"/> Text="{x:Static resources:AppResources.MarkingLogin}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ScrollView>
<Frame> <StackLayout>
<StackLayout x:Name="LoginPageView">
<Frame> <Frame
<StackLayout> Padding="10"
<Label Text="{x:Static resources:AppResources.MarkingLoginEmailAddressLabel}" Margin="0,10,0,5"
Margin="0,0,0,-10"> HorizontalOptions="FillAndExpand"
<Label.Triggers> BackgroundColor="White">
<DataTrigger
TargetType="Label" <StackLayout
Binding="{Binding Source={x:Reference EMailEntry}, Path=Text, TargetNullValue=''}" x:Name="LoginPageView"
Value=""> Padding="10">
<Setter Property="IsVisible" Value="False" />
</DataTrigger> <Label
</Label.Triggers> Text="{x:Static resources:AppResources.MarkingLoginEmailAddressLabel}"
</Label> Margin="0,0,0,-5">
<Entry <Label.Triggers>
Placeholder="{x:Static resources:AppResources.MarkingLoginEmailAddressPlaceholder}" <DataTrigger
Keyboard="Email" TargetType="Label"
AutomationId="mail_address_text" Binding="{Binding Source={x:Reference EMailEntry}, Path=Text, TargetNullValue=''}"
x:Name="EMailEntry" Value="">
Text="{Binding MailAddress}" <Setter
IsEnabled="{Binding IsLoggedOut}"/> Property="IsVisible"
<Label Text="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}" Value="False" />
Margin="0,0,0,-10"> </DataTrigger>
<Label.Triggers> </Label.Triggers>
<DataTrigger </Label>
TargetType="Label"
Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}" <Entry
Value=""> Placeholder="{x:Static resources:AppResources.MarkingLoginEmailAddressPlaceholder}"
<Setter Property="IsVisible" Value="False" /> Keyboard="Email"
</DataTrigger> AutomationId="mail_address_text"
</Label.Triggers> x:Name="EMailEntry"
</Label> Text="{Binding MailAddress}"
<sharedGui:TogglePasswordEntry IsEnabled="{Binding IsLoggedOut}"/>
Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
Text="{Binding Password}" <Label
HidePassword="True" Text="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
AutomationId="password_text" Margin="0,0,0,-5">
x:Name="PasswordEntry" <Label.Triggers>
IsEnabled="{Binding IsLoggedOut}"/> <DataTrigger
<Label Text="{x:Static resources:AppResources.MarkingLoginPasswordLabel}" TargetType="Label"
HorizontalOptions="End" Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}"
Margin="0,-10,0,5" Value="">
FontSize="Small"> <Setter
<Label.Triggers> Property="IsVisible"
<DataTrigger Value="False" />
TargetType="Label" </DataTrigger>
Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}" </Label.Triggers>
Value=""> </Label>
<Setter Property="IsVisible" Value="False" />
</DataTrigger> <sharedGui:TogglePasswordEntry
</Label.Triggers> Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
</Label> Text="{Binding Password}"
<Button HidePassword="True"
Text="{x:Static resources:AppResources.ActionLoginLogin}" AutomationId="password_text"
AutomationId="login_button" x:Name="PasswordEntry"
Command="{Binding OnLoginRequest}" IsEnabled="{Binding IsLoggedOut}"/>
IsEnabled="{Binding IsLoginRequestAllowed}">
</Button> <Label
<Button Text="{x:Static resources:AppResources.MarkingLoginPasswordLabel}"
Style="{StaticResource SecondaryButton}" HorizontalOptions="End"
Text="{x:Static resources:AppResources.ActionLoginRegister}" Margin="0,-10,0,5"
AutomationId="register_button" FontSize="Small">
Command="{Binding OnRegisterRequest}" <Label.Triggers>
IsVisible="{Binding IsWebViewElementsVisible}"> <DataTrigger
</Button> TargetType="Label"
<Label Binding="{Binding Source={x:Reference PasswordEntry}, Path=Text, TargetNullValue=''}"
IsVisible="{Binding IsRegisterTargetsInfoVisible}" Value="">
FormattedText="{Binding RegisterTargetsInfo}"> <Setter
</Label> Property="IsVisible"
<Label Value="False" />
Margin="0,10,0,0" </DataTrigger>
TextType="Html" </Label.Triggers>
AutomationId="password_forgotten_button" </Label>
HorizontalOptions="Center"
TextColor="{DynamicResource primary-back-title-color}" <Button
Text="{x:Static resources:AppResources.ActionLoginPasswordForgotten}"> Text="{x:Static resources:AppResources.ActionLoginLogin}"
<Label.GestureRecognizers> AutomationId="login_button"
<TapGestureRecognizer Command="{Binding OnPasswordForgottonRequest}"/> Command="{Binding OnLoginRequest}"
</Label.GestureRecognizers> IsEnabled="{Binding IsLoginRequestAllowed}">
</Label> </Button>
</StackLayout>
</Frame> <Button
</StackLayout> Style="{StaticResource SecondaryButton}"
</Frame> Text="{x:Static resources:AppResources.ActionLoginRegister}"
</ScrollView> AutomationId="register_button"
Command="{Binding OnRegisterRequest}"
IsVisible="{Binding IsWebViewElementsVisible}">
</Button>
<Label
IsVisible="{Binding IsRegisterTargetsInfoVisible}"
FormattedText="{Binding RegisterTargetsInfo}">
</Label>
<Label
Margin="0,10,0,0"
TextType="Html"
AutomationId="password_forgotten_button"
HorizontalOptions="Center"
TextColor="{DynamicResource primary-back-title-color}"
Text="{x:Static resources:AppResources.ActionLoginPasswordForgotten}">
<Label.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding OnPasswordForgottonRequest}"/>
</Label.GestureRecognizers>
</Label>
</StackLayout>
</Frame>
</StackLayout>
</ContentPage> </ContentPage>

View file

@ -4,7 +4,8 @@
x:Class="TINK.View.Settings.SettingsPage" x:Class="TINK.View.Settings.SettingsPage"
xmlns:conv="clr-namespace:TINK.View.Settings;assembly=TINKLib" xmlns:conv="clr-namespace:TINK.View.Settings;assembly=TINKLib"
xmlns:account="clr-namespace:TINK.Model.User.Account;assembly=TINKLib" xmlns:account="clr-namespace:TINK.Model.User.Account;assembly=TINKLib"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"> xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
BackgroundColor="{DynamicResource background-color}">
<ContentPage.Resources> <ContentPage.Resources>
<conv:BackendPermissionsToVisibleConverter x:Key="Frame_Converter"/> <conv:BackendPermissionsToVisibleConverter x:Key="Frame_Converter"/>
@ -19,230 +20,288 @@
<conv:PermissionToVisibleConverter x:Key="ShowDiagnostics_Converter" VisibleFlag="{x:Static account:Permissions.ShowDiagnostics}"/> <conv:PermissionToVisibleConverter x:Key="ShowDiagnostics_Converter" VisibleFlag="{x:Static account:Permissions.ShowDiagnostics}"/>
<conv:PermissionToVisibleConverter x:Key="SwitchSiteCaching_Converter" VisibleFlag="{x:Static account:Permissions.SwitchNoSiteCaching}"/> <conv:PermissionToVisibleConverter x:Key="SwitchSiteCaching_Converter" VisibleFlag="{x:Static account:Permissions.SwitchNoSiteCaching}"/>
</ContentPage.Resources> </ContentPage.Resources>
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingSettings}"/> Text="{x:Static resources:AppResources.MarkingSettings}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Content> <ContentPage.Content>
<ScrollView>
<Frame> <ScrollView>
<StackLayout>
<!-- <StackLayout>
<Button Text="Feedback" Clicked="OnFeedbackClickedAsync"/>
--> <Frame
<Frame> Padding="10"
<StackLayout> Margin="0,10,0,5"
<Label Text="{x:Static resources:AppResources.MarkingCenterMapToCurrentPos}"/> HorizontalOptions="FillAndExpand"
<Switch IsToggled="{Binding CenterMapToCurrentLocation}"/> BackgroundColor="White">
</StackLayout> <Grid ColumnDefinitions="*,Auto">
</Frame> <Label Text="{x:Static resources:AppResources.MarkingCenterMapToCurrentPos}"/>
<!-- Filter on view TINK/ Konrad --> <Switch Grid.Column="1" IsToggled="{Binding CenterMapToCurrentLocation}"/>
<Frame IsVisible="{Binding IsGroupFilterVisible}"> </Grid>
<StackLayout> </Frame>
<Label Text="{x:Static resources:AppResources.MarkingShowHideBikesOfType}"/>
<ListView <!-- Filter on view TINK/ Konrad -->
<Frame
Padding="10"
Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding IsGroupFilterVisible}">
<StackLayout>
<Label Text="{x:Static resources:AppResources.MarkingShowHideBikesOfType}"/>
<ListView
HasUnevenRows="True" HasUnevenRows="True"
HeightRequest="120" HeightRequest="120"
x:Name="Filters"> x:Name="Filters">
<ListView.ItemTemplate> <ListView.ItemTemplate>
<DataTemplate> <DataTemplate>
<ViewCell IsEnabled="{Binding IsEnabled}"> <ViewCell IsEnabled="{Binding IsEnabled}">
<StackLayout Orientation="Horizontal"> <Grid ColumnDefinitions="*,Auto">
<Label Text="{Binding Text}"/> <Label Text="{Binding Text}"/>
<Switch IsToggled="{Binding IsActivated}"/> <Switch Grid.Column="1" IsToggled="{Binding IsActivated}"/>
</StackLayout> </Grid>
</ViewCell> </ViewCell>
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView> </ListView>
</StackLayout> </StackLayout>
</Frame> </Frame>
<!-- Picker to selct startup page -->
<Frame> <!-- Picker to select startup page -->
<StackLayout> <Frame
<Label Text="{x:Static resources:AppResources.MarkingStartupPage}"/> Padding="10"
<Picker Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout>
<Label Text="{x:Static resources:AppResources.MarkingStartupPage}"/>
<Picker
ItemsSource="{Binding StartupSettings.ServicesTextList}" ItemsSource="{Binding StartupSettings.ServicesTextList}"
SelectedItem="{Binding StartupSettings.ActiveText}"/> SelectedItem="{Binding StartupSettings.ActiveText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<!-- Themes -->
<Frame <!-- Themes -->
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}"> <Frame
<StackLayout> Padding="10"
Margin="0,5,0,5"
<Label HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}"
Text="Theme"/> Text="Theme"/>
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchTheme_Converter}}"
ItemsSource="{Binding Themes.ServicesTextList}" ItemsSource="{Binding Themes.ServicesTextList}"
SelectedItem="{Binding Themes.ActiveText}"/> SelectedItem="{Binding Themes.ActiveText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}"> <!-- COPRI server selection -->
<!-- COPRI server selection --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
Text="{Binding CopriServerUriList.CopriServerUriDescription}"/> Text="{Binding CopriServerUriList.CopriServerUriDescription}"/>
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
ItemsSource="{Binding CopriServerUriList.ServerTextList}" ItemsSource="{Binding CopriServerUriList.ServerTextList}"
SelectedItem="{Binding CopriServerUriList.NextActiveServerText}"/> SelectedItem="{Binding CopriServerUriList.NextActiveServerText}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Text="{Binding Polling.PollingText}"/> Text="{Binding Polling.PollingText}"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
IsToggled="{Binding Polling.IsActivated}"/> IsToggled="{Binding Polling.IsActivated}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Text="{Binding Polling.PeriodeTotalSecondsText}"/> Text="{Binding Polling.PeriodeTotalSecondsText}"/>
<Stepper <Stepper
IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
Minimum="5" Minimum="5"
Increment="5" Increment="5"
Maximum="600" Maximum="600"
IsEnabled="{Binding Polling.IsActivated}" IsEnabled="{Binding Polling.IsActivated}"
Value="{Binding Polling.PeriodeTotalSeconds}"/> Value="{Binding Polling.PeriodeTotalSeconds}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
Text="Time after which COPRI-cache expires [s]"/> Text="Time after which COPRI-cache expires [s]"/>
<Slider <Slider
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
x:Name="expiresAfter" x:Name="expiresAfter"
Minimum="0" Minimum="0"
Maximum="15" Maximum="15"
Value="{Binding ExpiresAfterTotalSeconds}"/> Value="{Binding ExpiresAfterTotalSeconds}"/>
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
IsReadOnly="True" IsReadOnly="True"
Text="{Binding ExpiresAfterTotalSecondsText}"/> Text="{Binding ExpiresAfterTotalSecondsText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"> <!-- Lock control -->
<!-- Lock control --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="{x:Static resources:AppResources.MarkingLockControl}" /> Text="{x:Static resources:AppResources.MarkingLockControl}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
ItemsSource="{Binding LocksServices.Services.ServicesTextList}" ItemsSource="{Binding LocksServices.Services.ServicesTextList}"
SelectedItem="{Binding LocksServices.Services.ActiveText}"/> SelectedItem="{Binding LocksServices.Services.ActiveText}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="Bluetooth Connect Timeout [sec]"/> Text="Bluetooth Connect Timeout [sec]"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Text="{Binding LocksServices.ConnectTimeoutSecText}"/> Text="{Binding LocksServices.ConnectTimeoutSecText}"/>
<Stepper <Stepper
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
Minimum="0.1" Minimum="0.1"
Increment="0.25" Increment="0.25"
Maximum="60" Maximum="60"
Value="{Binding LocksServices.ConnectTimeoutSec}"/> Value="{Binding LocksServices.ConnectTimeoutSec}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"> <!-- Geolocation -->
<!-- Geolocation --> <Frame
<StackLayout> Padding="10"
Margin="0,5,0,5"
<Label HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
Text="{x:Static resources:AppResources.MarkingGeolocationControl}" /> Text="{x:Static resources:AppResources.MarkingGeolocationControl}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
ItemsSource="{Binding GeolocationServices.ServicesTextList}" ItemsSource="{Binding GeolocationServices.ServicesTextList}"
SelectedItem="{Binding GeolocationServices.ActiveText}"/> SelectedItem="{Binding GeolocationServices.ActiveText}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"> <!-- Web site caching -->
<!-- Web site caching --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
Text="{x:Static resources:AppResources.MarkingWebsiteCaching}"/> Text="{x:Static resources:AppResources.MarkingWebsiteCaching}"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
IsToggled="{Binding IsSiteCachingOnDisplayValue}"/> IsToggled="{Binding IsSiteCachingOnDisplayValue}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"> <!-- Logging -->
<!-- Logging --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
Text="{x:Static resources:AppResources.MarkingLoggingLevel}" /> Text="{x:Static resources:AppResources.MarkingLoggingLevel}" />
<Picker <Picker
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
ItemsSource="{Binding LoggingLevels}" ItemsSource="{Binding LoggingLevels}"
SelectedItem="{Binding SelectedLoggingLevel}"/> SelectedItem="{Binding SelectedLoggingLevel}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
Text="Logdatei in externen Pfad schreiben"/> Text="Logdatei in externen Pfad schreiben"/>
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
IsToggled="{Binding LogToExternalFolderDisplayValue}" IsToggled="{Binding LogToExternalFolderDisplayValue}"
IsEnabled="{Binding IsLogToExternalFolderVisible}"/> IsEnabled="{Binding IsLogToExternalFolderVisible}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"> <!-- Logging -->
<!-- Logging --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
Text="{x:Static resources:AppResources.MarkingVerboseErrorMessage}" /> Text="{x:Static resources:AppResources.MarkingVerboseErrorMessage}" />
<Switch <Switch
IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
IsToggled="{Binding IsReportLevelVerbose}"/> IsToggled="{Binding IsReportLevelVerbose}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
<Frame
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"> <!-- Display of parameters -->
<!-- Display of parameters --> <Frame
<StackLayout> Padding="10"
<Label Margin="0,5,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}">
<StackLayout>
<Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Device Identifier" /> Text="Device Identifier" />
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding DeviceIdentifier}"/> Text="{Binding DeviceIdentifier}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Copri Sitzungkeks"/> Text="Copri Sitzungkeks"/>
<Entry <Entry
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding SessionCookie}"/> Text="{Binding SessionCookie}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Interner Pfad (Einstell./ ggf. Logging)"/> Text="Interner Pfad (Einstell./ ggf. Logging)"/>
<Editor <Editor
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding InternalPath}"/> Text="{Binding InternalPath}"/>
<Label <Label
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
Text="Externer Pfad (Mock/ ggf. Logging)"/> Text="Externer Pfad (Mock/ ggf. Logging)"/>
<Editor <Editor
IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}" IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
IsEnabled="false" IsEnabled="false"
Text="{Binding ExternalPath}"/> Text="{Binding ExternalPath}"/>
</StackLayout> </StackLayout>
</Frame> </Frame>
</StackLayout>
</Frame> </StackLayout>
</ScrollView>
</ScrollView>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>

View file

@ -42,17 +42,17 @@ namespace TINK.Model.Connector
{ {
if (string.IsNullOrEmpty(mail)) if (string.IsNullOrEmpty(mail))
{ {
throw new ArgumentNullException("Can not loging user. Mail address must not be null or empty."); throw new ArgumentNullException("Can not login user. Mail address must not be null or empty.");
} }
if (string.IsNullOrEmpty(password)) if (string.IsNullOrEmpty(password))
{ {
throw new ArgumentNullException("Can not loging user. Password must not be null or empty."); throw new ArgumentNullException("Can not login user. Password must not be null or empty.");
} }
if (string.IsNullOrEmpty(deviceId)) if (string.IsNullOrEmpty(deviceId))
{ {
throw new ArgumentNullException("Can not loging user. Device not be null or empty."); throw new ArgumentNullException("Can not login user. Device not be null or empty.");
} }
AuthorizationResponse response; AuthorizationResponse response;
@ -103,7 +103,7 @@ namespace TINK.Model.Connector
/// <param name="bike">Bike to book.</param> /// <param name="bike">Bike to book.</param>
public async Task CalculateAuthKeys(Bikes.BikeInfoNS.BluetoothLock.IBikeInfoMutable bike) public async Task CalculateAuthKeys(Bikes.BikeInfoNS.BluetoothLock.IBikeInfoMutable bike)
{ {
Log.ForContext<Command>().Error("Unexpected request to get authenticatin keys detected. No user logged in."); Log.ForContext<Command>().Error("Unexpected request to get authentication keys detected. No user logged in.");
await Task.CompletedTask; await Task.CompletedTask;
} }

View file

@ -41,7 +41,7 @@ namespace TINK.Model.Connector
{ {
if (string.IsNullOrEmpty(mail)) if (string.IsNullOrEmpty(mail))
{ {
throw new ArgumentNullException("Can not loging user. Mail address must not be null or empty."); throw new ArgumentNullException("Can not login user. Mail address must not be null or empty.");
} }
throw new Exception($"Fehler beim Anmelden von unter {mail}. Benutzer {Mail} ist bereits angemeldet."); throw new Exception($"Fehler beim Anmelden von unter {mail}. Benutzer {Mail} ist bereits angemeldet.");
@ -90,7 +90,7 @@ namespace TINK.Model.Connector
} }
catch (Exception) catch (Exception)
{ {
// Exception was not expected or too many subsequent excepitons detected. // Exception was not expected or too many subsequent exceptions detected.
throw; throw;
} }
@ -114,7 +114,7 @@ namespace TINK.Model.Connector
} }
catch (Exception) catch (Exception)
{ {
// Exception was not expected or too many subsequent excepitons detected. // Exception was not expected or too many subsequent exceptions detected.
throw; throw;
} }
@ -148,7 +148,7 @@ namespace TINK.Model.Connector
} }
catch (Exception) catch (Exception)
{ {
// Exception was not expected or too many subsequent excepitons detected. // Exception was not expected or too many subsequent exceptions detected.
throw; throw;
} }
@ -178,7 +178,7 @@ namespace TINK.Model.Connector
} }
catch (Exception) catch (Exception)
{ {
// Exception was not expected or too many subsequent excepitons detected. // Exception was not expected or too many subsequent exceptions detected.
throw; throw;
} }
@ -231,7 +231,7 @@ namespace TINK.Model.Connector
} }
catch (Exception) catch (Exception)
{ {
// Exception was not expected or too many subsequent excepitons detected. // Exception was not expected or too many subsequent exceptions detected.
throw; throw;
} }
} }

View file

@ -25,7 +25,7 @@ namespace TINK.Model.Connector
server = copriServer as ICachedCopriServer; server = copriServer as ICachedCopriServer;
if (server == null) if (server == null)
{ {
throw new ArgumentException($"Copri server is not of expected typ. Type detected is {copriServer.GetType()}."); throw new ArgumentException($"Copri server is not of expected type. Type detected is {copriServer.GetType()}.");
} }
} }

View file

@ -24,7 +24,7 @@ namespace TINK.Model.Connector
server = copriServer as ICopriServer; server = copriServer as ICopriServer;
if (server == null) if (server == null)
{ {
throw new ArgumentException($"Copri server is not of expected typ. Type detected is {copriServer.GetType()}."); throw new ArgumentException($"Copri server is not of expected type. Type detected is {copriServer.GetType()}.");
} }
} }

View file

@ -26,7 +26,7 @@ namespace TINK.Model.Connector
server = copriServer as ICopriServer; server = copriServer as ICopriServer;
if (server == null) if (server == null)
{ {
throw new ArgumentException($"Copri server is not of expected typ. Type detected is {copriServer.GetType()}."); throw new ArgumentException($"Copri server is not of expected type. Type detected is {copriServer.GetType()}.");
} }
server = copriServer as ICopriServer; server = copriServer as ICopriServer;

View file

@ -1,4 +1,4 @@
using System; using System;
namespace TINK.Model.State namespace TINK.Model.State
{ {
@ -24,7 +24,7 @@ namespace TINK.Model.State
Reserved, Reserved,
/// <summary> /// <summary>
/// Bike is booked. Corresponding COPRI statie is "occupied". /// Bike is booked. Corresponding COPRI state is "occupied".
/// </summary> /// </summary>
Booked Booked
} }
@ -40,7 +40,7 @@ namespace TINK.Model.State
/// <summary> /// <summary>
/// Constructs a state info object when state is available. /// Constructs a state info object when state is available.
/// </summary> /// </summary>
/// <param name="isFeedbackPending">Specifieds whether feedback is pending or not.</param> /// <param name="isFeedbackPending">Specifies whether feedback is pending or not.</param>
public StateInfo(bool isFeedbackPending = false) public StateInfo(bool isFeedbackPending = false)
{ {
_InUseState = isFeedbackPending _InUseState = isFeedbackPending
@ -54,7 +54,7 @@ namespace TINK.Model.State
/// <param name="requestedAt">Date time when bike was requested</param> /// <param name="requestedAt">Date time when bike was requested</param>
/// <param name="mailAddress">Mail address of user which requested bike.</param> /// <param name="mailAddress">Mail address of user which requested bike.</param>
/// <param name="code">Booking code.</param> /// <param name="code">Booking code.</param>
/// <param name="dateTimeNowProvider">Date time provider to calculate reaining time.</param> /// <param name="dateTimeNowProvider">Date time provider to calculate remaining time.</param>
public StateInfo( public StateInfo(
Func<DateTime> dateTimeNowProvider, Func<DateTime> dateTimeNowProvider,
DateTime requestedAt, DateTime requestedAt,

View file

@ -12,7 +12,7 @@ namespace TINK.Model.State
public class StateInfoMutable : INotifyPropertyChanged, IStateInfoMutable public class StateInfoMutable : INotifyPropertyChanged, IStateInfoMutable
{ {
/// <summary> /// <summary>
/// Provider for current date time to calculate remainig time on demand for state of type reserved. /// Provider for current date time to calculate remaining time on demand for state of type reserved.
/// </summary> /// </summary>
private readonly Func<DateTime> _DateTimeNowProvider; private readonly Func<DateTime> _DateTimeNowProvider;

View file

@ -688,8 +688,8 @@ namespace TINK.Model
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
}, },
{ {
new Version(3, 0, 364), new Version(3, 0, 365),
AppResources.ChangeLog_MinorImprovements, AppResources.ChangeLog_3_0_365_MK_SB,
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike } new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
}, },
}; };

View file

@ -97,7 +97,7 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Feedback about the app. /// Looks up a localized string similar to Sent e-mail.
/// </summary> /// </summary>
public static string ActionContactMailAppReleated { public static string ActionContactMailAppReleated {
get { get {
@ -793,6 +793,15 @@ namespace TINK.MultilingualResources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Minor design and performance improvements..
/// </summary>
public static string ChangeLog_3_0_365_MK_SB {
get {
return ResourceManager.GetString("ChangeLog_3_0_365_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>
@ -2093,6 +2102,15 @@ namespace TINK.MultilingualResources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Bike ID including prefix.
/// </summary>
public static string MarkingFindBikeLabel {
get {
return ResourceManager.GetString("MarkingFindBikeLabel", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Menu. /// Looks up a localized string similar to Menu.
/// </summary> /// </summary>
@ -2275,7 +2293,16 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Bike is ok. /// Looks up a localized string similar to Is bike okay?.
/// </summary>
public static string MarkingReturnBikeBikeIsStateOkQuestion {
get {
return ResourceManager.GetString("MarkingReturnBikeBikeIsStateOkQuestion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to bike is ok.
/// </summary> /// </summary>
public static string MarkingReturnBikeBikeStateIsOK { public static string MarkingReturnBikeBikeStateIsOK {
get { get {
@ -2284,7 +2311,7 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Please describe condition/defect here.. /// Looks up a localized string similar to Please describe technical defect of bike here..
/// </summary> /// </summary>
public static string MarkingReturnBikeErrorDescriptionInputPlaceholder { public static string MarkingReturnBikeErrorDescriptionInputPlaceholder {
get { get {
@ -2310,6 +2337,15 @@ namespace TINK.MultilingualResources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Search bike.
/// </summary>
public static string MarkingSearchBike {
get {
return ResourceManager.GetString("MarkingSearchBike", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Select Station. /// Looks up a localized string similar to Select Station.
/// </summary> /// </summary>
@ -2749,7 +2785,7 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to No bike with id {0} found.. /// Looks up a localized string similar to No bike with id {0} found. It may already be reserved by another user or it may be defective..
/// </summary> /// </summary>
public static string MessageErrorSelectBikeNoBikeFound { public static string MessageErrorSelectBikeNoBikeFound {
get { get {
@ -2886,7 +2922,7 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Are you enjoying the {0}-app?. /// Looks up a localized string similar to Feedback to app development?.
/// </summary> /// </summary>
public static string MessageRateMail { public static string MessageRateMail {
get { get {
@ -3003,7 +3039,7 @@ namespace TINK.MultilingualResources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Enter bike number here. /// Looks up a localized string similar to Bike ID including prefix e.g. TR15.
/// </summary> /// </summary>
public static string PlaceholderFindBike { public static string PlaceholderFindBike {
get { get {

View file

@ -158,7 +158,7 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
<value>Fragen? Hinweise?</value> <value>Fragen? Hinweise?</value>
</data> </data>
<data name="MessageRateMail" xml:space="preserve"> <data name="MessageRateMail" xml:space="preserve">
<value>Gefällt Ihnen die {0}-App?</value> <value>Rückmeldung an die App-Entwicklung?</value>
</data> </data>
<data name="MessageWaring" xml:space="preserve"> <data name="MessageWaring" xml:space="preserve">
<value>Warnung</value> <value>Warnung</value>
@ -734,7 +734,7 @@ Fehlerbehebung: Supportmails können wieder verschickt werden.</value>
{0}</value> {0}</value>
</data> </data>
<data name="MessageErrorSelectBikeNoBikeFound" xml:space="preserve"> <data name="MessageErrorSelectBikeNoBikeFound" xml:space="preserve">
<value>Kein Rad mit ID {0} gefunden.</value> <value>Kein Rad mit ID {0} gefunden. Möglicherweise ist es bereits durch einen anderen Nutzer / eine andere Nutzerin reserviert oder defekt.</value>
</data> </data>
<data name="MessageErrorSelectBikeTitle" xml:space="preserve"> <data name="MessageErrorSelectBikeTitle" xml:space="preserve">
<value>Fehler beim Auswählen des Rads!</value> <value>Fehler beim Auswählen des Rads!</value>
@ -908,7 +908,7 @@ Kleinere Fehlerbehebungen.
<value>Rückmeldung geben</value> <value>Rückmeldung geben</value>
</data> </data>
<data name="ActionContactMailAppReleated" xml:space="preserve"> <data name="ActionContactMailAppReleated" xml:space="preserve">
<value>Rückmeldung zur App</value> <value>E-Mail senden</value>
</data> </data>
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve"> <data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
<value>{0}-App Anfrage</value> <value>{0}-App Anfrage</value>
@ -947,14 +947,8 @@ Kleinere Fehlerbehebungen.
<data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve"> <data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve">
<value>Ladestand: -</value> <value>Ladestand: -</value>
</data> </data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>Rad ist in Ordnung</value>
</data>
<data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve"> <data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve">
<value>Bitte Zustand/Defekt hier beschreiben.</value> <value>Bitte technischen Defekt des Rads hier beschreiben.</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Bei Bedarf bitte hier Rückmeldung eingeben.</value>
</data> </data>
<data name="MarkingReturnBikeMainMessage" xml:space="preserve"> <data name="MarkingReturnBikeMainMessage" xml:space="preserve">
<value>Rad erfolgreich zurückgegeben!</value> <value>Rad erfolgreich zurückgegeben!</value>
@ -1013,7 +1007,7 @@ Außerdem: Kleine Grafiken lassen auf einen Blick erkennen um was für einen Rad
<value>Einwilligung</value> <value>Einwilligung</value>
</data> </data>
<data name="PlaceholderFindBike" xml:space="preserve"> <data name="PlaceholderFindBike" xml:space="preserve">
<value>Rad-Nummer hier eingeben</value> <value>Rad-ID inklusive Präfix, z.B. TR15</value>
</data> </data>
<data name="ChangeLog3_0_339_MK" xml:space="preserve"> <data name="ChangeLog3_0_339_MK" xml:space="preserve">
<value>Die Lastenräder aus den Vororten zeigen nun ihre Heimatstation im Namen an. Diese Räder müssen dort wieder abgeben werden! <value>Die Lastenräder aus den Vororten zeigen nun ihre Heimatstation im Namen an. Diese Räder müssen dort wieder abgeben werden!
@ -1176,4 +1170,22 @@ Außerdem:&lt;br/&gt;
- Fehlerbehebungen&lt;br/&gt; - Fehlerbehebungen&lt;br/&gt;
- Paketaktualisierungen</value> - Paketaktualisierungen</value>
</data> </data>
<data name="MarkingFindBikeLabel" xml:space="preserve">
<value>Rad-ID inklusive Präfix</value>
</data>
<data name="MarkingSearchBike" xml:space="preserve">
<value>Rad suchen</value>
</data>
<data name="MarkingReturnBikeBikeIsStateOkQuestion" xml:space="preserve">
<value>Ist das Rad in Ordnung?</value>
</data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>Rad ist in Ordnung</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Bei Bedarf bitte hier Rückmeldung eingeben.</value>
</data>
<data name="ChangeLog_3_0_365_MK_SB" xml:space="preserve">
<value>Kleine Verbesserungen in Design und Performance.</value>
</data>
</root> </root>

View file

@ -249,7 +249,7 @@ Please log in again.</value>
<value>Urgent questions?</value> <value>Urgent questions?</value>
</data> </data>
<data name="MessageRateMail" xml:space="preserve"> <data name="MessageRateMail" xml:space="preserve">
<value>Are you enjoying the {0}-app?</value> <value>Feedback to app development?</value>
</data> </data>
<data name="MessageWaring" xml:space="preserve"> <data name="MessageWaring" xml:space="preserve">
<value>Warning</value> <value>Warning</value>
@ -842,7 +842,7 @@ Bugfix: Sending support mails works again. </value>
{0}</value> {0}</value>
</data> </data>
<data name="MessageErrorSelectBikeNoBikeFound" xml:space="preserve"> <data name="MessageErrorSelectBikeNoBikeFound" xml:space="preserve">
<value>No bike with id {0} found.</value> <value>No bike with id {0} found. It may already be reserved by another user or it may be defective.</value>
</data> </data>
<data name="MessageErrorSelectBikeTitle" xml:space="preserve"> <data name="MessageErrorSelectBikeTitle" xml:space="preserve">
<value>Error Selecting Bike!</value> <value>Error Selecting Bike!</value>
@ -1013,7 +1013,7 @@ Minor bugfixes.</value>
<value>Give feedback</value> <value>Give feedback</value>
</data> </data>
<data name="ActionContactMailAppReleated" xml:space="preserve"> <data name="ActionContactMailAppReleated" xml:space="preserve">
<value>Feedback about the app</value> <value>Sent e-mail</value>
</data> </data>
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve"> <data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
<value>{0}-app releated request</value> <value>{0}-app releated request</value>
@ -1052,14 +1052,8 @@ Minor bugfixes.</value>
<data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve"> <data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve">
<value>Charging level: -</value> <value>Charging level: -</value>
</data> </data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>Bike is ok</value>
</data>
<data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve"> <data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve">
<value>Please describe condition/defect here.</value> <value>Please describe technical defect of bike here.</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Please enter feedback here if needed.</value>
</data> </data>
<data name="MarkingReturnBikeMainMessage" xml:space="preserve"> <data name="MarkingReturnBikeMainMessage" xml:space="preserve">
<value>Rental successfully ended!</value> <value>Rental successfully ended!</value>
@ -1118,7 +1112,7 @@ In addition: Small graphics let you see at a glance what type of bike it is.</va
<value>Consent</value> <value>Consent</value>
</data> </data>
<data name="PlaceholderFindBike" xml:space="preserve"> <data name="PlaceholderFindBike" xml:space="preserve">
<value>Enter bike number here</value> <value>Bike ID including prefix e.g. TR15</value>
</data> </data>
<data name="ChangeLog3_0_339_MK" xml:space="preserve"> <data name="ChangeLog3_0_339_MK" xml:space="preserve">
<value>The cargo bikes from the suburbs now show their home station in their name. These bikes must be returned there! <value>The cargo bikes from the suburbs now show their home station in their name. These bikes must be returned there!
@ -1265,4 +1259,22 @@ Also:&lt;br/&gt;
- Bug fixes&lt;br/&gt; - Bug fixes&lt;br/&gt;
- Package updates</value> - Package updates</value>
</data> </data>
<data name="MarkingFindBikeLabel" xml:space="preserve">
<value>Bike ID including prefix</value>
</data>
<data name="MarkingSearchBike" xml:space="preserve">
<value>Search bike</value>
</data>
<data name="MarkingReturnBikeBikeIsStateOkQuestion" xml:space="preserve">
<value>Is bike okay?</value>
</data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>bike is ok</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Please enter feedback here if needed.</value>
</data>
<data name="ChangeLog_3_0_365_MK_SB" xml:space="preserve">
<value>Minor design and performance improvements.</value>
</data>
</root> </root>

View file

@ -203,8 +203,8 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
<target state="translated">Fragen? Hinweise?</target> <target state="translated">Fragen? Hinweise?</target>
</trans-unit> </trans-unit>
<trans-unit id="MessageRateMail" translate="yes" xml:space="preserve"> <trans-unit id="MessageRateMail" translate="yes" xml:space="preserve">
<source>Are you enjoying the {0}-app?</source> <source>Feedback to app development?</source>
<target state="translated">Gefällt Ihnen die {0}-App?</target> <target state="translated">Rückmeldung an die App-Entwicklung?</target>
</trans-unit> </trans-unit>
<trans-unit id="MessageWaring" translate="yes" xml:space="preserve"> <trans-unit id="MessageWaring" translate="yes" xml:space="preserve">
<source>Warning</source> <source>Warning</source>
@ -992,8 +992,8 @@ Fehlerbehebung: Supportmails können wieder verschickt werden.</target>
{0}</target> {0}</target>
</trans-unit> </trans-unit>
<trans-unit id="MessageErrorSelectBikeNoBikeFound" translate="yes" xml:space="preserve"> <trans-unit id="MessageErrorSelectBikeNoBikeFound" translate="yes" xml:space="preserve">
<source>No bike with id {0} found.</source> <source>No bike with id {0} found. It may already be reserved by another user or it may be defective.</source>
<target state="translated">Kein Rad mit ID {0} gefunden.</target> <target state="translated">Kein Rad mit ID {0} gefunden. Möglicherweise ist es bereits durch einen anderen Nutzer / eine andere Nutzerin reserviert oder defekt.</target>
</trans-unit> </trans-unit>
<trans-unit id="MessageErrorSelectBikeTitle" translate="yes" xml:space="preserve"> <trans-unit id="MessageErrorSelectBikeTitle" translate="yes" xml:space="preserve">
<source>Error Selecting Bike!</source> <source>Error Selecting Bike!</source>
@ -1235,9 +1235,8 @@ Kleinere Fehlerbehebungen.
<target state="translated">Rückmeldung geben</target> <target state="translated">Rückmeldung geben</target>
</trans-unit> </trans-unit>
<trans-unit id="ActionContactMailAppReleated" translate="yes" xml:space="preserve"> <trans-unit id="ActionContactMailAppReleated" translate="yes" xml:space="preserve">
<source>Feedback about the app</source> <source>Sent e-mail</source>
<target state="translated">Rückmeldung zur App</target> <target state="translated">E-Mail senden</target>
<note from="MultilingualUpdate" annotates="source" priority="2">Please verify the translations accuracy as the source string was updated after it was translated.</note>
</trans-unit> </trans-unit>
<trans-unit id="MiscContactMailAppReleatedSubject" translate="yes" xml:space="preserve"> <trans-unit id="MiscContactMailAppReleatedSubject" translate="yes" xml:space="preserve">
<source>{0}-app releated request</source> <source>{0}-app releated request</source>
@ -1289,17 +1288,9 @@ Kleinere Fehlerbehebungen.
<source>Charging level: -</source> <source>Charging level: -</source>
<target state="translated">Ladestand: -</target> <target state="translated">Ladestand: -</target>
</trans-unit> </trans-unit>
<trans-unit id="MarkingReturnBikeBikeStateIsOK" translate="yes" xml:space="preserve">
<source>Bike is ok</source>
<target state="translated">Rad ist in Ordnung</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeErrorDescriptionInputPlaceholder" translate="yes" xml:space="preserve"> <trans-unit id="MarkingReturnBikeErrorDescriptionInputPlaceholder" translate="yes" xml:space="preserve">
<source>Please describe condition/defect here.</source> <source>Please describe technical defect of bike here.</source>
<target state="translated">Bitte Zustand/Defekt hier beschreiben.</target> <target state="translated">Bitte technischen Defekt des Rads hier beschreiben.</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeFeedbackInputPlaceholder" translate="yes" xml:space="preserve">
<source>Please enter feedback here if needed.</source>
<target state="translated">Bei Bedarf bitte hier Rückmeldung eingeben.</target>
</trans-unit> </trans-unit>
<trans-unit id="MarkingReturnBikeMainMessage" translate="yes" xml:space="preserve"> <trans-unit id="MarkingReturnBikeMainMessage" translate="yes" xml:space="preserve">
<source>Rental successfully ended!</source> <source>Rental successfully ended!</source>
@ -1382,8 +1373,8 @@ Außerdem: Kleine Grafiken lassen auf einen Blick erkennen um was für einen Rad
<target state="translated">Einwilligung</target> <target state="translated">Einwilligung</target>
</trans-unit> </trans-unit>
<trans-unit id="PlaceholderFindBike" translate="yes" xml:space="preserve"> <trans-unit id="PlaceholderFindBike" translate="yes" xml:space="preserve">
<source>Enter bike number here</source> <source>Bike ID including prefix e.g. TR15</source>
<target state="translated">Rad-Nummer hier eingeben</target> <target state="translated">Rad-ID inklusive Präfix, z.B. TR15</target>
</trans-unit> </trans-unit>
<trans-unit id="ChangeLog3_0_339_MK" translate="yes" xml:space="preserve"> <trans-unit id="ChangeLog3_0_339_MK" translate="yes" xml:space="preserve">
<source>The cargo bikes from the suburbs now show their home station in their name. These bikes must be returned there! <source>The cargo bikes from the suburbs now show their home station in their name. These bikes must be returned there!
@ -1628,6 +1619,30 @@ Außerdem:&lt;br/&gt;
- Fehlerbehebungen&lt;br/&gt; - Fehlerbehebungen&lt;br/&gt;
- Paketaktualisierungen</target> - Paketaktualisierungen</target>
</trans-unit> </trans-unit>
<trans-unit id="MarkingFindBikeLabel" translate="yes" xml:space="preserve">
<source>Bike ID including prefix</source>
<target state="translated">Rad-ID inklusive Präfix</target>
</trans-unit>
<trans-unit id="MarkingSearchBike" translate="yes" xml:space="preserve">
<source>Search bike</source>
<target state="translated">Rad suchen</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeBikeIsStateOkQuestion" translate="yes" xml:space="preserve">
<source>Is bike okay?</source>
<target state="translated">Ist das Rad in Ordnung?</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeBikeStateIsOK" translate="yes" xml:space="preserve">
<source>bike is ok</source>
<target state="translated">Rad ist in Ordnung</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeFeedbackInputPlaceholder" translate="yes" xml:space="preserve">
<source>Please enter feedback here if needed.</source>
<target state="translated">Bei Bedarf bitte hier Rückmeldung eingeben.</target>
</trans-unit>
<trans-unit id="ChangeLog_3_0_365_MK_SB" translate="yes" xml:space="preserve">
<source>Minor design and performance improvements.</source>
<target state="translated">Kleine Verbesserungen in Design und Performance.</target>
</trans-unit>
</group> </group>
</body> </body>
</file> </file>

View file

@ -20,7 +20,7 @@
<Setter Property="WidthRequest" Value="400" /> <Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/> <Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" /> <Setter Property="CornerRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/> <Setter Property="FontSize" Value="Medium"/>
<Setter Property="TextColor" Value="White"/> <Setter Property="TextColor" Value="White"/>
<Style.Triggers> <Style.Triggers>
@ -44,7 +44,7 @@
<Setter Property="WidthRequest" Value="400" /> <Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/> <Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" /> <Setter Property="CornerRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/> <Setter Property="FontSize" Value="Medium"/>
<Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/> <Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Style.Triggers> <Style.Triggers>

View file

@ -6,81 +6,6 @@
<!--Main color--> <!--Main color-->
<Color x:Key="primary-back-title-color">#009BDB</Color> <Color x:Key="primary-back-title-color">#009BDB</Color>
<!--Primary Button-->
<!--<<Style TargetType="Button">
<Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/>
<Setter Property="TextColor" Value="White"/>
<Style.Triggers>
<Trigger TargetType="Button"
Property="IsEnabled"
Value="True">
<Setter Property="BorderColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Setter Property="BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}"/>
</Trigger>
<Trigger TargetType="Button"
Property="IsEnabled"
Value="False">
<Setter Property="BorderColor" Value="LightGray"/>
<Setter Property="BackgroundColor" Value="LightGray"/>
</Trigger>
</Style.Triggers>
</Style>-->
<!--Sedondary Button-->
<!--<Style x:Key="SecondaryButton" TargetType="Button">
<Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/>
<Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Style.Triggers>
<Trigger TargetType="Button"
Property="IsEnabled"
Value="True">
<Setter Property="BorderColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Setter Property="BackgroundColor" Value="White"/>
</Trigger>
<Trigger TargetType="Button"
Property="IsEnabled"
Value="False">
<Setter Property="BorderColor" Value="LightGray"/>
<Setter Property="BackgroundColor" Value="DimGray"/>
</Trigger>
</Style.Triggers>
</Style>-->
<!--Switch-->
<!--<Style TargetType="Switch">
<Style.Triggers>
<Trigger TargetType="Switch"
Property="IsToggled"
Value="True">
<Setter Property="ThumbColor" Value="{DynamicResource Key=primary-back-title-color}"/>
</Trigger>
<Trigger TargetType="Switch"
Property="IsToggled"
Value="False">
<Setter Property="ThumbColor" Value="DimGray"/>
</Trigger>
</Style.Triggers>
</Style>-->
<!--Slider-->
<!--<Style TargetType="Slider">
<Setter Property="ThumbColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Setter Property="Background" Value="LightGray"/>
</Style>-->
<!--Label-->
<!--<Style TargetType="Label">
<Setter Property="FontSize" Value="Default"/>
</Style>-->
<!--Flyout Item--> <!--Flyout Item-->
<Style TargetType="FlyoutItem"> <Style TargetType="FlyoutItem">
<Setter Property="Shell.BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}" /> <Setter Property="Shell.BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}" />
@ -88,9 +13,8 @@
<!--Navbar--> <!--Navbar-->
<Style x:Key="Label-Navbar" TargetType="Label"> <Style x:Key="Label-Navbar" TargetType="Label">
<Setter Property="FontSize" Value="20"/> <Setter Property="FontSize" Value="20"/>
<!--<Setter Property="TextTransform" Value="Uppercase"/>--> <Setter Property="TextColor" Value="White"/>
<Setter Property="TextColor" Value="White"/>
<Setter Property="VerticalOptions" Value="Center"/> <Setter Property="VerticalOptions" Value="Center"/>
<Setter Property="HorizontalOptions" Value="Start"/> <Setter Property="HorizontalOptions" Value="Start"/>
<Setter Property="Grid.Column" Value="1"/> <Setter Property="Grid.Column" Value="1"/>

View file

@ -17,8 +17,9 @@
<Setter Property="WidthRequest" Value="400" /> <Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/> <Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" /> <Setter Property="CornerRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/> <Setter Property="FontSize" Value="Medium"/>
<Setter Property="FontFamily" Value="RobotoRegular"/>
<Setter Property="TextColor" Value="White"/> <Setter Property="TextColor" Value="White"/>
<Style.Triggers> <Style.Triggers>
<Trigger TargetType="Button" <Trigger TargetType="Button"
@ -41,8 +42,9 @@
<Setter Property="WidthRequest" Value="400" /> <Setter Property="WidthRequest" Value="400" />
<Setter Property="HorizontalOptions" Value="Center" /> <Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="BorderWidth" Value="1"/> <Setter Property="BorderWidth" Value="1"/>
<Setter Property="BorderRadius" Value="10" /> <Setter Property="CornerRadius" Value="10" />
<Setter Property="FontSize" Value="Medium"/> <Setter Property="FontSize" Value="Medium"/>
<Setter Property="FontFamily" Value="RobotoRegular"/>
<Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/> <Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/>
<Style.Triggers> <Style.Triggers>
<Trigger TargetType="Button" <Trigger TargetType="Button"
@ -85,8 +87,15 @@
<!--Label--> <!--Label-->
<Style TargetType="Label"> <Style TargetType="Label">
<Setter Property="FontSize" Value="Default"/> <Setter Property="FontSize" Value="Default"/>
<Setter Property="FontFamily" Value="RobotoRegular"/>
</Style> </Style>
<!--Entry-->
<Style TargetType="Entry">
<Setter Property="FontSize" Value="Default"/>
<Setter Property="FontFamily" Value="RobotoRegular"/>
</Style>
<!--Flyout Item--> <!--Flyout Item-->
<Style TargetType="FlyoutItem"> <Style TargetType="FlyoutItem">
<Setter Property="Shell.BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}" /> <Setter Property="Shell.BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}" />
@ -97,6 +106,7 @@
<Setter Property="FontSize" Value="20"/> <Setter Property="FontSize" Value="20"/>
<!--<Setter Property="TextTransform" Value="Uppercase"/>--> <!--<Setter Property="TextTransform" Value="Uppercase"/>-->
<Setter Property="TextColor" Value="White"/> <Setter Property="TextColor" Value="White"/>
<Setter Property="FontFamily" Value="RobotoRegular"/>
<Setter Property="VerticalOptions" Value="Center"/> <Setter Property="VerticalOptions" Value="Center"/>
<Setter Property="HorizontalOptions" Value="Start"/> <Setter Property="HorizontalOptions" Value="Start"/>
<Setter Property="Grid.Column" Value="1"/> <Setter Property="Grid.Column" Value="1"/>

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
using TINK.Model.State; using TINK.Model.State;
@ -29,11 +29,11 @@ namespace TestTINKLib
new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 1, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", null).From); new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 1, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", null).From);
Assert.IsTrue( Assert.IsTrue(
new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 1, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", null).GetIsStillReserved(out TimeSpan? l_oRemainigTime)); new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 1, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", null).GetIsStillReserved(out TimeSpan? remainingTime));
Assert.AreEqual( Assert.AreEqual(
14, 14,
l_oRemainigTime.Value.Minutes); remainingTime.Value.Minutes);
} }
[Test] [Test]
@ -56,11 +56,11 @@ namespace TestTINKLib
new StateRequestedInfo(() => new DateTime(2017, 09, 20), new DateTime(2017, 09, 19), "a@b", "372").From); new StateRequestedInfo(() => new DateTime(2017, 09, 20), new DateTime(2017, 09, 19), "a@b", "372").From);
Assert.IsTrue( Assert.IsTrue(
new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 12, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", "372").GetIsStillReserved(out TimeSpan? l_oRemainigTime)); new StateRequestedInfo(() => new DateTime(2017, 09, 20, 12, 12, 0), new DateTime(2017, 09, 20, 12, 0, 0), "a@b", "372").GetIsStillReserved(out TimeSpan? remainingTime));
Assert.AreEqual( Assert.AreEqual(
3, 3,
l_oRemainigTime.Value.Minutes); remainingTime.Value.Minutes);
} }
[Test] [Test]
@ -77,13 +77,13 @@ namespace TestTINKLib
Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b"); Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b");
// Invoke first update (after simulated 4mns) // Invoke first update (after simulated 4mns)
Assert.IsTrue(l_oReservedInfo.GetIsStillReserved(out TimeSpan? l_oRemainigTime)); Assert.IsTrue(l_oReservedInfo.GetIsStillReserved(out TimeSpan? remainingTime));
Assert.AreEqual(11, l_oRemainigTime.Value.Minutes); Assert.AreEqual(11, remainingTime.Value.Minutes);
Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b"); Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b");
// Invoke second update (after simulated 16 mns) // Invoke second update (after simulated 16 mns)
Assert.IsFalse(l_oReservedInfo.GetIsStillReserved(out l_oRemainigTime)); Assert.IsFalse(l_oReservedInfo.GetIsStillReserved(out remainingTime));
Assert.IsNull(l_oRemainigTime); Assert.IsNull(remainingTime);
Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b"); Assert.AreEqual(new DateTime(2017, 09, 20, 22, 01, 00), l_oReservedInfo.From, "a@b");
} }
} }