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" />
<None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\Tabbar.axml" />

View file

@ -1,5 +1,5 @@
<?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" />
<!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -12,7 +12,7 @@ using Xamarin.Forms;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LastenradBayern.Android")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif
[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>
<string>LastenradBayern</string>
<key>CFBundleVersion</key>
<string>364</string>
<string>365</string>
<key>CFBundleShortVersionString</key>
<string>3.0.364</string>
<string>3.0.365</string>
</dict>
</plist>

View file

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

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
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.
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
// Add ExportFont attribute
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
namespace TINK
{
public partial class App : Application

View file

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

View file

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

View file

@ -67,23 +67,11 @@
<StackLayout>
<Label FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app- related support -->
<Button
<Button
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store
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>
</StackLayout>
</Frame>
</StackLayout>
</Frame>

View file

@ -60,7 +60,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="3,0,0,0"
FontSize="Small"
FontAttributes="Bold"
@ -79,7 +79,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="0,0,3,0"
FontSize="Small"
FontAttributes="Bold"

View file

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

View file

@ -1,5 +1,5 @@
<?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" />
<!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -12,7 +12,7 @@ using Xamarin.Forms;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Meinkonrad.Android")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif
[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>
<string>Mein konrad</string>
<key>CFBundleVersion</key>
<string>364</string>
<string>365</string>
<key>CFBundleShortVersionString</key>
<string>3.0.364</string>
<string>3.0.365</string>
</dict>
</plist>

View file

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

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
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.
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
// Add ExportFont attribute
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
namespace TINK
{
public partial class App : Application

View file

@ -181,6 +181,7 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Folder Include="$(MSBuildThisFileDirectory)Resources\Fonts\" />
<Folder Include="$(MSBuildThisFileDirectory)View\BikesAtStation\" />
<Folder Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\" />
<Folder Include="$(MSBuildThisFileDirectory)View\Login\" />
@ -339,4 +340,9 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Free-Solid-900.otf">
<Generator>MSBuild:Compile</Generator>
</EmbeddedResource>
</ItemGroup>
</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"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
mc:Ignorable="d"
x:Class="TINK.View.Account.AccountPage">
x:Class="TINK.View.Account.AccountPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/>
@ -13,24 +15,48 @@
Text="{x:Static resources:AppResources.MarkingAccount}"/>
</Grid>
</Shell.TitleView>
<ContentPage.Content>
<Frame>
<StackLayout>
<Frame>
<StackLayout>
<Label Text="{Binding LoggedInInfo}" />
<Label 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>
</Frame>
</ContentPage.Content>
</ContentPage>
<ContentPage.Content>
<ScrollView>
<StackLayout>
<Frame
Padding="10"
Margin="0,10,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="10">
<Label
Text="{Binding LoggedInInfo}" />
<Label
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"
x:Class="TINK.View.Bike.ILockItBike">
<ContentView>
<ContentView.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
</ContentView.Resources>
<Frame
Padding="10"
Margin="0,5,0,5"
Margin="0,10,0,5"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
BackgroundColor="White">

View file

@ -3,7 +3,9 @@
xmlns:conv="clr-namespace:TINK.View"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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>
<Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/>
@ -11,85 +13,110 @@
Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/>
</Grid>
</Shell.TitleView>
<ContentPage.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
<conv:BoolInverterConverter x:Key="BoolInvert_Converter"/>
</ContentPage.Resources>
<ContentPage.Content>
<ScrollView>
<Frame>
<StackLayout x:Name="ContactPageView">
<Frame
IsVisible="{Binding
Path=IsOperatorInfoAvaliable,
Converter={StaticResource BoolInvert_Converter}}">
<!-- Button to select station and explanation text -->
<StackLayout>
<Label
TextType="Html"
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
<Button
Text="{x:Static resources:AppResources.ActionSelectStation}"
Command="{Binding OnSelectStationRequest}"/>
</StackLayout>
</Frame>
<Frame
IsVisible="{Binding IsOperatorInfoAvaliable}">
<!-- Operator info -->
<StackLayout>
<Label
IsVisible="{Binding IsOperatorInfoAvaliable}"
HorizontalOptions="Center"
FontAttributes="Bold"
Text="{Binding ProviderNameText}"/>
<!--- Mail to operator -->
<Label
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding MailAddressAndMotivationsText}"/>
<Button
x:Name="MailAddressButton"
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding MailAddressText}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailToOperatorRequest}"/>
<!--- Phone -->
<Label
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>
</Frame>
<Frame>
<StackLayout>
<Label FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app- related support -->
<Button
<ContentPage.Content>
<ScrollView>
<StackLayout
x:Name="ContactPageView">
<Frame
Padding="10"
Margin="0,10,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="10">
<!-- Button to select station and explanation text -->
<StackLayout
IsVisible="{Binding Path=IsOperatorInfoAvaliable, Converter={StaticResource BoolInvert_Converter}}">
<Label
TextType="Html"
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
<Button
Text="{x:Static resources:AppResources.ActionSelectStation}"
Command="{Binding OnSelectStationRequest}"/>
</StackLayout>
<!-- Contact operator -->
<StackLayout
IsVisible="{Binding IsOperatorInfoAvaliable}">
<!--- Name of operator -->
<Label
IsVisible="{Binding IsOperatorInfoAvaliable}"
HorizontalOptions="Center"
FontAttributes="Bold"
Text="{Binding ProviderNameText}"/>
<!--- Mail to operator -->
<Label
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding MailAddressAndMotivationsText}"/>
<Button
x:Name="MailAddressButton"
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding MailAddressText}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailToOperatorRequest}"/>
<!--- Phone to operator -->
<Label
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}"
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store
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>
</StackLayout>
</Frame>
</ScrollView>
</ContentPage.Content>
</StackLayout>
</Frame>
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>

View file

@ -65,7 +65,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="3,0,0,0"
FontSize="Small"
FontAttributes="Bold"
@ -84,7 +84,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="0,0,3,0"
FontSize="Small"
FontAttributes="Bold"

View file

@ -7,77 +7,121 @@
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.FeedbackPopup">
<xct:Popup.Resources>
<x:String x:Key="check_circle">&#xf058;</x:String>
</xct:Popup.Resources>
<StackLayout>
<!-- Head and title -->
<StackLayout
Padding="30"
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>
<xct:Popup.Resources>
<x:String x:Key="check_circle">&#xf058;</x:String>
</xct:Popup.Resources>
<!-- Co2saving -->
<Frame
x:Name="Co2SavingFrame">
<Label
x:Name="Co2SavingLabel"
Text=""/>
</Frame>
<ScrollView
Orientation="Vertical"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<!-- Checkbox and input elements -->
<ScrollView>
<StackLayout>
<!-- Battery level -->
<StackLayout
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
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
x:Name="BarLevelInputView"
HorizontalOptions="Center"/>
<!-- Checkbox Is Broken -->
<StackLayout Orientation="Horizontal">
<CheckBox x:Name="brockenCheckBox" IsChecked="True" HeightRequest="20"/>
<Label
FontSize="Medium"
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeStateIsOK}"/>
</StackLayout>
<Editor
x:Name="feedbackMessage"
AutoSize="TextChanges"
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}"
Text="">
<Editor.Triggers>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}"
Value="true">
<Setter Property="Placeholder"
Value="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}" />
</DataTrigger>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}"
Value="false">
<Setter Property="Placeholder"
Value="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}" />
</DataTrigger>
</Editor.Triggers>
</Editor>
</StackLayout>
</ScrollView>
x:Name="BarLevelInputView"
HorizontalOptions="Center"/>
<!-- Is bike okay? -->
<Grid
ColumnDefinitions="*,Auto,Auto,Auto,*"
RowDefinitions="Auto,Auto"
Margin="0,20,0,0">
<Label
Grid.Column="1"
Grid.Row="0"
FontSize="Medium"
FontAttributes="Bold"
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
</Label>
<Switch
Grid.Column="2"
Grid.Row="0"
VerticalOptions="Center"
HorizontalOptions="End"
x:Name="bikeIsOkSwitch"
IsToggled="True"/>
<Label
Grid.Column="3"
Grid.Row="0"
VerticalOptions="Center"
HorizontalOptions="Start">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
<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>
<!-- Buttons -->
<Button
WidthRequest="100"
Clicked="OnOkClicked"
Text="OK"
Margin="0,0,0,3"/>
</StackLayout>
</xct:Popup>

View file

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

View file

@ -39,23 +39,42 @@
<sharedGui:NotConnectedToNetView/>
<!--Search bike-->
<StackLayout
BackgroundColor="White"
<Frame
Padding="10"
Margin="0,10,0,5"
IsVisible="{Binding IsSelectBikeVisible}"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="20">
<Entry
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
MaxLength="10"
CursorPosition="0"
Text="{Binding BikeIdUserInput}"/>
<Label Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
Margin="0,0,0,-5">
<Label.Triggers>
<DataTrigger
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
Text="{x:Static resources:AppResources.MarkingFindBike}"
IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/>
<Button
Text="{x:Static resources:AppResources.MarkingSearchBike}"
IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/>
</StackLayout>
</StackLayout>
</Frame>
<!-- Bike -->
<StackLayout

View file

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

View file

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

View file

@ -1,5 +1,5 @@
<?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" />
<!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -41,5 +41,3 @@ using Xamarin.Forms;
#endif
[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" />
<None Include="Resources\AboutResources.txt" />
<None Include="Assets\AboutAssets.txt" />
<EmbeddedResource Include="Resources\Font Awesome 5 Free-Solid-900.otf" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\Location_Button.png">

View file

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

View file

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

View file

@ -14,13 +14,10 @@
<x:String x:Key="IconMyBikes">&#xf206;</x:String>
<x:String x:Key="IconAccount">&#xf007;</x:String>
<x:String x:Key="IconLogin">&#xf2f6;</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="IconContact">&#xf095;</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="IconSettings">&#xf013;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</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>
<!--TogglePasswortEntry-->

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
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.
[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
{
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>
</EmbeddedResource>
</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>

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"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
mc:Ignorable="d"
x:Class="TINK.View.Account.AccountPage">
x:Class="TINK.View.Account.AccountPage"
BackgroundColor="{DynamicResource background-color}">
<Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAccount}"/>
</Grid>
</Shell.TitleView>
<ContentPage.Content>
<Frame>
<StackLayout>
<Frame>
<StackLayout>
<Label Text="{Binding LoggedInInfo}" />
<Label 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>
</Frame>
</ContentPage.Content>
</ContentPage>
<ScrollView>
<StackLayout>
<Frame
Padding="10"
Margin="0,10,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="10">
<Label
Text="{Binding LoggedInInfo}" />
<Label
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

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

View file

@ -3,92 +3,119 @@
xmlns:conv="clr-namespace:TINK.View"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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>
<Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingContactPageTitle}"/>
</Grid>
</Shell.TitleView>
<ContentPage.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
<conv:BoolInverterConverter x:Key="BoolInvert_Converter"/>
</ContentPage.Resources>
<ContentPage.Content>
<ScrollView>
<Frame>
<StackLayout x:Name="ContactPageView">
<Frame
IsVisible="{Binding
Path=IsOperatorInfoAvaliable,
Converter={StaticResource BoolInvert_Converter}}">
<!-- Button to select station and explanation text -->
<StackLayout>
<Label
TextType="Html"
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
<Button
Text="{x:Static resources:AppResources.ActionSelectStation}"
Command="{Binding OnSelectStationRequest}"/>
</StackLayout>
</Frame>
<Frame
IsVisible="{Binding IsOperatorInfoAvaliable}">
<!-- Operator info -->
<StackLayout>
<Label
IsVisible="{Binding IsOperatorInfoAvaliable}"
HorizontalOptions="Center"
FontAttributes="Bold"
Text="{Binding ProviderNameText}"/>
<!--- Mail to operator -->
<Label
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding MailAddressAndMotivationsText}"/>
<Button
x:Name="MailAddressButton"
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding MailAddressText}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailToOperatorRequest}"/>
<!--- Phone -->
<Label
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>
</Frame>
<Frame>
<StackLayout>
<Label FormattedText="{Binding LikeTinkApp}"/>
<!--- Mail to app- related support -->
<Button
<ScrollView>
<StackLayout
x:Name="ContactPageView">
<Frame
Padding="10"
Margin="0,10,0,5"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="10">
<!-- Button to select station and explanation text -->
<StackLayout
IsVisible="{Binding Path=IsOperatorInfoAvaliable, Converter={StaticResource BoolInvert_Converter}}">
<Label
TextType="Html"
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
<Button
Text="{x:Static resources:AppResources.ActionSelectStation}"
Command="{Binding OnSelectStationRequest}"/>
</StackLayout>
<!-- Contact operator -->
<StackLayout
IsVisible="{Binding IsOperatorInfoAvaliable}">
<!--- Name of operator -->
<Label
IsVisible="{Binding IsOperatorInfoAvaliable}"
HorizontalOptions="Center"
FontAttributes="Bold"
Text="{Binding ProviderNameText}"/>
<!--- Mail to operator -->
<Label
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
FormattedText="{Binding MailAddressAndMotivationsText}"/>
<Button
x:Name="MailAddressButton"
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
Text="{Binding MailAddressText}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailToOperatorRequest}"/>
<!--- Phone to operator -->
<Label
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}"
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
IsEnabled="{Binding IsSendMailAvailable}"
Command="{Binding OnMailAppRelatedRequest}"/>
<!--- Link to App Store
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>
</StackLayout>
</Frame>
</StackLayout>
</Frame>
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>

View file

@ -54,7 +54,7 @@
Padding="0">
<Button
x:Name="KonradButton"
AutomationId ="FilterKonrad_button"
AutomationId ="FilterKonrad_button"
Text="{x:Static resources:AppResources.MarkingCityBike}"
Command="{Binding OnToggleTinkToKonrad}"
IsVisible="false"
@ -65,7 +65,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="3,0,0,0"
FontSize="Small"
FontAttributes="Bold"
@ -84,7 +84,7 @@
HorizontalOptions="Center"
WidthRequest="94"
HeightRequest="40"
BorderRadius="10"
CornerRadius="10"
Margin="0,0,3,0"
FontSize="Small"
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"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
@ -7,78 +7,121 @@
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.FeedbackPopup">
<xct:Popup.Resources>
<x:String x:Key="check_circle">&#xf058;</x:String>
</xct:Popup.Resources>
<StackLayout>
<!-- Head and title -->
<StackLayout
Padding="30"
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 -->
<Frame
x:Name="Co2SavingFrame">
<Label
x:Name="Co2SavingLabel"
Text=""/>
</Frame>
<!-- Checkbox and input elements -->
<ScrollView>
<StackLayout>
<!-- Battery level -->
<sharedGui:BarLevelInputView
x:Name="BarLevelInputView"
HorizontalOptions="Center"/>
<!-- Checkbox Is Broken -->
<StackLayout Orientation="Horizontal">
<CheckBox x:Name="brockenCheckBox" IsChecked="True" HeightRequest="20"/>
<Label
FontSize="Medium"
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeStateIsOK}"/>
</StackLayout>
<Editor
x:Name="feedbackMessage"
AutoSize="TextChanges"
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}"
Text="">
<Editor.Triggers>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}"
Value="true">
<Setter Property="Placeholder"
Value="{x:Static resources:AppResources.MarkingReturnBikeFeedbackInputPlaceholder}" />
</DataTrigger>
<DataTrigger TargetType="Editor"
Binding="{Binding Source={x:Reference brockenCheckBox}, Path=IsChecked}"
Value="false">
<Setter Property="Placeholder"
Value="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}" />
</DataTrigger>
</Editor.Triggers>
</Editor>
</StackLayout>
</ScrollView>
<!-- Buttons -->
<Button
WidthRequest="100"
Clicked="OnOkClicked"
Text="OK"
Margin="0,0,0,3"/>
</StackLayout>
</xct:Popup>
<ScrollView
Orientation="Vertical"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<StackLayout
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
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
x:Name="BarLevelInputView"
HorizontalOptions="Center"/>
<!-- Is bike okay? -->
<Grid
ColumnDefinitions="*,Auto,Auto,Auto,*"
RowDefinitions="Auto,Auto"
Margin="0,20,0,0">
<Label
Grid.Column="1"
Grid.Row="0"
FontSize="Medium"
FontAttributes="Bold"
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
</Label>
<Switch
Grid.Column="2"
Grid.Row="0"
VerticalOptions="Center"
HorizontalOptions="End"
x:Name="bikeIsOkSwitch"
IsToggled="True"/>
<Label
Grid.Column="3"
Grid.Row="0"
VerticalOptions="Center"
HorizontalOptions="Start">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
<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
{
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked,
IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text
};
}
@ -52,7 +52,7 @@ namespace TINK.View
var result = new Result
{
CurrentChargeBars = int.TryParse(BarLevelInputView.Current, out int current) ? (int?)current : null,
IsBikeBroken = brockenCheckBox.IsChecked,
IsBikeBroken = bikeIsOkSwitch.IsToggled,
Message = feedbackMessage.Text
};

View file

@ -40,23 +40,42 @@
<sharedGui:NotConnectedToNetView/>
<!--Search bike-->
<StackLayout
BackgroundColor="White"
<Frame
Padding="10"
Margin="0,10,0,5"
IsVisible="{Binding IsSelectBikeVisible}"
HorizontalOptions="FillAndExpand"
BackgroundColor="White">
<StackLayout
Padding="20">
<Entry
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
MaxLength="10"
CursorPosition="0"
Text="{Binding BikeIdUserInput}"/>
<Label Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
Margin="0,0,0,-5">
<Label.Triggers>
<DataTrigger
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
Text="{x:Static resources:AppResources.MarkingFindBike}"
IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/>
<Button
Text="{x:Static resources:AppResources.MarkingSearchBike}"
IsEnabled="{Binding IsSelectBikeEnabled}"
Command="{Binding OnSelectBikeRequest}"/>
</StackLayout>
</StackLayout>
</Frame>
<!-- Bike -->
<StackLayout

View file

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

View file

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

View file

@ -42,17 +42,17 @@ namespace TINK.Model.Connector
{
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))
{
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))
{
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;
@ -103,7 +103,7 @@ namespace TINK.Model.Connector
/// <param name="bike">Bike to book.</param>
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;
}

View file

@ -41,7 +41,7 @@ namespace TINK.Model.Connector
{
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.");
@ -90,7 +90,7 @@ namespace TINK.Model.Connector
}
catch (Exception)
{
// Exception was not expected or too many subsequent excepitons detected.
// Exception was not expected or too many subsequent exceptions detected.
throw;
}
@ -114,7 +114,7 @@ namespace TINK.Model.Connector
}
catch (Exception)
{
// Exception was not expected or too many subsequent excepitons detected.
// Exception was not expected or too many subsequent exceptions detected.
throw;
}
@ -148,7 +148,7 @@ namespace TINK.Model.Connector
}
catch (Exception)
{
// Exception was not expected or too many subsequent excepitons detected.
// Exception was not expected or too many subsequent exceptions detected.
throw;
}
@ -178,7 +178,7 @@ namespace TINK.Model.Connector
}
catch (Exception)
{
// Exception was not expected or too many subsequent excepitons detected.
// Exception was not expected or too many subsequent exceptions detected.
throw;
}
@ -231,7 +231,7 @@ namespace TINK.Model.Connector
}
catch (Exception)
{
// Exception was not expected or too many subsequent excepitons detected.
// Exception was not expected or too many subsequent exceptions detected.
throw;
}
}

View file

@ -25,7 +25,7 @@ namespace TINK.Model.Connector
server = copriServer as ICachedCopriServer;
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;
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;
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;

View file

@ -1,4 +1,4 @@
using System;
using System;
namespace TINK.Model.State
{
@ -24,7 +24,7 @@ namespace TINK.Model.State
Reserved,
/// <summary>
/// Bike is booked. Corresponding COPRI statie is "occupied".
/// Bike is booked. Corresponding COPRI state is "occupied".
/// </summary>
Booked
}
@ -40,7 +40,7 @@ namespace TINK.Model.State
/// <summary>
/// Constructs a state info object when state is available.
/// </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)
{
_InUseState = isFeedbackPending
@ -54,7 +54,7 @@ namespace TINK.Model.State
/// <param name="requestedAt">Date time when bike was requested</param>
/// <param name="mailAddress">Mail address of user which requested bike.</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(
Func<DateTime> dateTimeNowProvider,
DateTime requestedAt,

View file

@ -12,7 +12,7 @@ namespace TINK.Model.State
public class StateInfoMutable : INotifyPropertyChanged, IStateInfoMutable
{
/// <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>
private readonly Func<DateTime> _DateTimeNowProvider;

View file

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

View file

@ -97,7 +97,7 @@ namespace TINK.MultilingualResources {
}
/// <summary>
/// Looks up a localized string similar to Feedback about the app.
/// Looks up a localized string similar to Sent e-mail.
/// </summary>
public static string ActionContactMailAppReleated {
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>
/// Looks up a localized string similar to We have fixed some bugs. Enjoy the ride!.
/// </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>
/// Looks up a localized string similar to Menu.
/// </summary>
@ -2275,7 +2293,16 @@ namespace TINK.MultilingualResources {
}
/// <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>
public static string MarkingReturnBikeBikeStateIsOK {
get {
@ -2284,7 +2311,7 @@ namespace TINK.MultilingualResources {
}
/// <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>
public static string MarkingReturnBikeErrorDescriptionInputPlaceholder {
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>
/// Looks up a localized string similar to Select Station.
/// </summary>
@ -2749,7 +2785,7 @@ namespace TINK.MultilingualResources {
}
/// <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>
public static string MessageErrorSelectBikeNoBikeFound {
get {
@ -2886,7 +2922,7 @@ namespace TINK.MultilingualResources {
}
/// <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>
public static string MessageRateMail {
get {
@ -3003,7 +3039,7 @@ namespace TINK.MultilingualResources {
}
/// <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>
public static string PlaceholderFindBike {
get {

View file

@ -158,7 +158,7 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
<value>Fragen? Hinweise?</value>
</data>
<data name="MessageRateMail" xml:space="preserve">
<value>Gefällt Ihnen die {0}-App?</value>
<value>Rückmeldung an die App-Entwicklung?</value>
</data>
<data name="MessageWaring" xml:space="preserve">
<value>Warnung</value>
@ -734,7 +734,7 @@ Fehlerbehebung: Supportmails können wieder verschickt werden.</value>
{0}</value>
</data>
<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 name="MessageErrorSelectBikeTitle" xml:space="preserve">
<value>Fehler beim Auswählen des Rads!</value>
@ -908,7 +908,7 @@ Kleinere Fehlerbehebungen.
<value>Rückmeldung geben</value>
</data>
<data name="ActionContactMailAppReleated" xml:space="preserve">
<value>Rückmeldung zur App</value>
<value>E-Mail senden</value>
</data>
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
<value>{0}-App Anfrage</value>
@ -947,14 +947,8 @@ Kleinere Fehlerbehebungen.
<data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve">
<value>Ladestand: -</value>
</data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>Rad ist in Ordnung</value>
</data>
<data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve">
<value>Bitte Zustand/Defekt hier beschreiben.</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Bei Bedarf bitte hier Rückmeldung eingeben.</value>
<value>Bitte technischen Defekt des Rads hier beschreiben.</value>
</data>
<data name="MarkingReturnBikeMainMessage" xml:space="preserve">
<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>
</data>
<data name="PlaceholderFindBike" xml:space="preserve">
<value>Rad-Nummer hier eingeben</value>
<value>Rad-ID inklusive Präfix, z.B. TR15</value>
</data>
<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!
@ -1176,4 +1170,22 @@ Außerdem:&lt;br/&gt;
- Fehlerbehebungen&lt;br/&gt;
- Paketaktualisierungen</value>
</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>

View file

@ -249,7 +249,7 @@ Please log in again.</value>
<value>Urgent questions?</value>
</data>
<data name="MessageRateMail" xml:space="preserve">
<value>Are you enjoying the {0}-app?</value>
<value>Feedback to app development?</value>
</data>
<data name="MessageWaring" xml:space="preserve">
<value>Warning</value>
@ -842,7 +842,7 @@ Bugfix: Sending support mails works again. </value>
{0}</value>
</data>
<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 name="MessageErrorSelectBikeTitle" xml:space="preserve">
<value>Error Selecting Bike!</value>
@ -1013,7 +1013,7 @@ Minor bugfixes.</value>
<value>Give feedback</value>
</data>
<data name="ActionContactMailAppReleated" xml:space="preserve">
<value>Feedback about the app</value>
<value>Sent e-mail</value>
</data>
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
<value>{0}-app releated request</value>
@ -1052,14 +1052,8 @@ Minor bugfixes.</value>
<data name="MarkingDriveBatteryChargingLevelNotAvailable" xml:space="preserve">
<value>Charging level: -</value>
</data>
<data name="MarkingReturnBikeBikeStateIsOK" xml:space="preserve">
<value>Bike is ok</value>
</data>
<data name="MarkingReturnBikeErrorDescriptionInputPlaceholder" xml:space="preserve">
<value>Please describe condition/defect here.</value>
</data>
<data name="MarkingReturnBikeFeedbackInputPlaceholder" xml:space="preserve">
<value>Please enter feedback here if needed.</value>
<value>Please describe technical defect of bike here.</value>
</data>
<data name="MarkingReturnBikeMainMessage" xml:space="preserve">
<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>
</data>
<data name="PlaceholderFindBike" xml:space="preserve">
<value>Enter bike number here</value>
<value>Bike ID including prefix e.g. TR15</value>
</data>
<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!
@ -1265,4 +1259,22 @@ Also:&lt;br/&gt;
- Bug fixes&lt;br/&gt;
- Package updates</value>
</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>

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>
</trans-unit>
<trans-unit id="MessageRateMail" translate="yes" xml:space="preserve">
<source>Are you enjoying the {0}-app?</source>
<target state="translated">Gefällt Ihnen die {0}-App?</target>
<source>Feedback to app development?</source>
<target state="translated">Rückmeldung an die App-Entwicklung?</target>
</trans-unit>
<trans-unit id="MessageWaring" translate="yes" xml:space="preserve">
<source>Warning</source>
@ -992,8 +992,8 @@ Fehlerbehebung: Supportmails können wieder verschickt werden.</target>
{0}</target>
</trans-unit>
<trans-unit id="MessageErrorSelectBikeNoBikeFound" translate="yes" xml:space="preserve">
<source>No bike with id {0} found.</source>
<target state="translated">Kein Rad mit ID {0} gefunden.</target>
<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. Möglicherweise ist es bereits durch einen anderen Nutzer / eine andere Nutzerin reserviert oder defekt.</target>
</trans-unit>
<trans-unit id="MessageErrorSelectBikeTitle" translate="yes" xml:space="preserve">
<source>Error Selecting Bike!</source>
@ -1235,9 +1235,8 @@ Kleinere Fehlerbehebungen.
<target state="translated">Rückmeldung geben</target>
</trans-unit>
<trans-unit id="ActionContactMailAppReleated" translate="yes" xml:space="preserve">
<source>Feedback about the app</source>
<target state="translated">Rückmeldung zur App</target>
<note from="MultilingualUpdate" annotates="source" priority="2">Please verify the translations accuracy as the source string was updated after it was translated.</note>
<source>Sent e-mail</source>
<target state="translated">E-Mail senden</target>
</trans-unit>
<trans-unit id="MiscContactMailAppReleatedSubject" translate="yes" xml:space="preserve">
<source>{0}-app releated request</source>
@ -1289,17 +1288,9 @@ Kleinere Fehlerbehebungen.
<source>Charging level: -</source>
<target state="translated">Ladestand: -</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="MarkingReturnBikeErrorDescriptionInputPlaceholder" translate="yes" xml:space="preserve">
<source>Please describe condition/defect here.</source>
<target state="translated">Bitte Zustand/Defekt 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>
<source>Please describe technical defect of bike here.</source>
<target state="translated">Bitte technischen Defekt des Rads hier beschreiben.</target>
</trans-unit>
<trans-unit id="MarkingReturnBikeMainMessage" translate="yes" xml:space="preserve">
<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>
</trans-unit>
<trans-unit id="PlaceholderFindBike" translate="yes" xml:space="preserve">
<source>Enter bike number here</source>
<target state="translated">Rad-Nummer hier eingeben</target>
<source>Bike ID including prefix e.g. TR15</source>
<target state="translated">Rad-ID inklusive Präfix, z.B. TR15</target>
</trans-unit>
<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!
@ -1628,6 +1619,30 @@ Außerdem:&lt;br/&gt;
- Fehlerbehebungen&lt;br/&gt;
- Paketaktualisierungen</target>
</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>
</body>
</file>

View file

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

View file

@ -6,81 +6,6 @@
<!--Main 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-->
<Style TargetType="FlyoutItem">
<Setter Property="Shell.BackgroundColor" Value="{DynamicResource Key=primary-back-title-color}" />
@ -88,9 +13,8 @@
<!--Navbar-->
<Style x:Key="Label-Navbar" TargetType="Label">
<Setter Property="FontSize" Value="20"/>
<!--<Setter Property="TextTransform" Value="Uppercase"/>-->
<Setter Property="TextColor" Value="White"/>
<Setter Property="FontSize" Value="20"/>
<Setter Property="TextColor" Value="White"/>
<Setter Property="VerticalOptions" Value="Center"/>
<Setter Property="HorizontalOptions" Value="Start"/>
<Setter Property="Grid.Column" Value="1"/>

View file

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

View file

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