Compare commits
3 commits
0eb7362cb8
...
f5cf9bb22f
Author | SHA1 | Date | |
---|---|---|---|
f5cf9bb22f | |||
1a58bf58d3 | |||
24cdfbb0ca |
|
@ -12,3 +12,4 @@ sharee
|
|||
tink
|
||||
ui
|
||||
xdoc
|
||||
xml
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<TargetFrameworkVersion>v12.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v13.0</TargetFrameworkVersion>
|
||||
<AndroidStoreUncompressedFileExtensions />
|
||||
<MandroidI18n />
|
||||
<JavaMaximumHeapSize>2G</JavaMaximumHeapSize>
|
||||
|
@ -77,7 +77,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -97,7 +97,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -176,24 +176,24 @@
|
|||
<PackageReference Include="Xamarin.Android.Support.v7.RecyclerView" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.Android.Support.Vector.Drawable" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core">
|
||||
<Version>1.9.0.2</Version>
|
||||
<Version>1.10.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.MediaRouter">
|
||||
<Version>1.3.1.2</Version>
|
||||
<Version>1.4.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.Palette">
|
||||
<Version>1.0.0.16</Version>
|
||||
<Version>1.0.0.18</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.RecyclerView">
|
||||
<Version>1.3.0</Version>
|
||||
<Version>1.3.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
|
||||
<PackageReference Include="Xamarin.Forms.AppLinks">
|
||||
|
@ -203,10 +203,10 @@
|
|||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps.Bindings" Version="3.0.0" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Mono.Android" />
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?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.365" android:versionCode="365">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.369" android:versionCode="369">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
<!-- Notice here that we have the package name of our application as a prefix on the permissions. -->
|
||||
|
@ -9,14 +9,11 @@
|
|||
<!-- Access Google based webservices -->
|
||||
<!-- External storage for caching. -->
|
||||
<!-- My Location -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
|
||||
android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-feature android:name="android.hardware.location" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
||||
|
@ -38,4 +35,4 @@
|
|||
</intent>
|
||||
</queries>
|
||||
<meta-data android:name="com.google.android.geo.API_KEY" android:value="000000000000000000000000000000000000000" />
|
||||
</manifest>
|
||||
</manifest>
|
1674
LastenradBayern/TINK.Android/Resources/Resource.Designer.cs
generated
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>LastenradBayern</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>365</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.365</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -120,7 +120,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Bcl.Build" Version="1.0.21" />
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -136,7 +136,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -197,10 +197,10 @@
|
|||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps">
|
||||
<Version>5.0.0</Version>
|
||||
|
|
|
@ -196,40 +196,18 @@
|
|||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake1_image.HZ17PY_678_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Info\InfoTabbedPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt1_image.4XWCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt2_image.X3F1PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt3_image.DYOXPY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat1_image.ZQ65PY_680_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat2_image.QQZCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat3_image.NQ5FQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake2_image.1YBAQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake3_image.FJM2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand1_image.4HJ5PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand2_image.RIX2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand3_image.FDR7PY_679_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\FeesAndBikesPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Konrad.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\WhatsNew\WhatsNewPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
|
|
|
@ -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>
|
|
@ -4,77 +4,171 @@
|
|||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
x:Class="TINK.View.Contact.ContactPage">
|
||||
|
||||
<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
|
||||
x:Name="PhoneNumberButton"
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding PhoneNumberText}"
|
||||
IsEnabled="{Binding IsDoPhoncallAvailable}"
|
||||
Command="{Binding OnPhoneRequest}"/>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="Start"
|
||||
BackgroundColor="White"
|
||||
HasShadow="False">
|
||||
|
||||
<StackLayout
|
||||
Padding="20">
|
||||
|
||||
<!--Title Customer Support-->
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingContactCustomerSupportTitle}"
|
||||
FontAttributes="Bold"
|
||||
FontSize="Large"
|
||||
/>
|
||||
|
||||
<!--No station selected-->
|
||||
<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 of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
|
||||
<!-- info about selected station -->
|
||||
<StackLayout
|
||||
Spacing="0">
|
||||
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingLastSelectedStation}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
</StackLayout>
|
||||
|
||||
<!-- Station -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{Binding SelectedStationName}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding SelectedStationId}"/>
|
||||
</StackLayout>
|
||||
|
||||
<!--- Operator -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingOperator}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Frame>
|
||||
<StackLayout>
|
||||
<Label FormattedText="{Binding LikeTinkApp}"/>
|
||||
<!--- Mail to app- related support -->
|
||||
|
||||
<!--Buttons-->
|
||||
<StackLayout
|
||||
Spacing="5"
|
||||
Margin="0,10,0,0">
|
||||
|
||||
<!--- Phone to operator -->
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
x:Name="PhoneNumberButton"
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding PhoneNumberText}"
|
||||
IsEnabled="{Binding IsDoPhoncallAvailable}"
|
||||
Command="{Binding OnPhoneRequest}"/>
|
||||
|
||||
<!--- Mail to operator -->
|
||||
<Button
|
||||
x:Name="MailAddressButton"
|
||||
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding MailAddressText}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailToOperatorRequest}"/>
|
||||
|
||||
<!-- Change selected Station-->
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionSelectAnotherStation}"
|
||||
Command="{Binding OnSelectStationRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
</ScrollView>
|
||||
</ContentPage.Content>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Grid.Row="1"
|
||||
Padding="10"
|
||||
Margin="0,0,0,10"
|
||||
VerticalOptions="End"
|
||||
Spacing="0">
|
||||
|
||||
<BoxView
|
||||
Margin="0,0,0,10"
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="DimGray"/>
|
||||
|
||||
<Label
|
||||
TextType="Html"
|
||||
HorizontalOptions="Center"
|
||||
TextColor="{DynamicResource primary-back-title-color}"
|
||||
Text="{x:Static resources:AppResources.ActionSendDiagnosis}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}">
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Plugin.BLE" Version="2.1.3" />
|
||||
<PackageReference Include="Polly" Version="7.2.3" />
|
||||
<PackageReference Include="Serilog" Version="2.12.0" />
|
||||
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" />
|
||||
<PackageReference Include="Polly" Version="7.2.4" />
|
||||
<PackageReference Include="Serilog" Version="3.0.1" />
|
||||
<PackageReference Include="Xamarin.Essentials" Version="1.7.7" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Serilog" Version="2.12.0" />
|
||||
<PackageReference Include="Serilog" Version="3.0.1" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="MultilingualResources\Resources.Designer.cs">
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<TargetFrameworkVersion>v12.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v13.0</TargetFrameworkVersion>
|
||||
<AndroidStoreUncompressedFileExtensions />
|
||||
<MandroidI18n />
|
||||
<JavaMaximumHeapSize>2G</JavaMaximumHeapSize>
|
||||
|
@ -77,7 +77,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -97,7 +97,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -176,24 +176,24 @@
|
|||
<PackageReference Include="Xamarin.Android.Support.v7.RecyclerView" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.Android.Support.Vector.Drawable" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core">
|
||||
<Version>1.9.0.2</Version>
|
||||
<Version>1.10.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.MediaRouter">
|
||||
<Version>1.3.1.2</Version>
|
||||
<Version>1.4.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.Palette">
|
||||
<Version>1.0.0.16</Version>
|
||||
<Version>1.0.0.18</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.RecyclerView">
|
||||
<Version>1.3.0</Version>
|
||||
<Version>1.3.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
|
||||
<PackageReference Include="Xamarin.Forms.AppLinks">
|
||||
|
@ -203,10 +203,10 @@
|
|||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps.Bindings" Version="3.0.0" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Mono.Android" />
|
||||
|
@ -302,21 +302,6 @@
|
|||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-hdpi\konrad_nobg.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-mdpi\konrad_nobg.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xhdpi\konrad_nobg.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxhdpi\konrad_nobg.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxxhdpi\konrad_nobg.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\konrad_nobg.png">
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
|
@ -362,41 +347,11 @@
|
|||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-hdpi\swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-mdpi\swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xhdpi\swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxhdpi\swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxxhdpi\swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\swk_theme.png">
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-hdpi\menu_swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-mdpi\menu_swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xhdpi\menu_swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxhdpi\menu_swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable-xxxhdpi\menu_swk_theme.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\menu_swk_theme.png">
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?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.365" android:versionCode="365">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.369" android:versionCode="369">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
<!-- Notice here that we have the package name of our application as a prefix on the permissions. -->
|
||||
|
@ -9,14 +9,11 @@
|
|||
<!-- Access Google based webservices -->
|
||||
<!-- External storage for caching. -->
|
||||
<!-- My Location -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
|
||||
android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-feature android:name="android.hardware.location" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
||||
|
@ -38,4 +35,4 @@
|
|||
</intent>
|
||||
</queries>
|
||||
<meta-data android:name="com.google.android.geo.API_KEY" android:value="000000000000000000000000000000000000000" />
|
||||
</manifest>
|
||||
</manifest>
|
1694
Meinkonrad/TINK.Android/Resources/Resource.Designer.cs
generated
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 27 KiB |
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>Mein konrad</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>365</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.365</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Bcl.Build" Version="1.0.21" />
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -137,7 +137,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -198,10 +198,10 @@
|
|||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps">
|
||||
<Version>5.0.0</Version>
|
||||
|
|
|
@ -201,40 +201,18 @@
|
|||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake1_image.HZ17PY_678_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Info\InfoTabbedPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt1_image.4XWCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt2_image.X3F1PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt3_image.DYOXPY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat1_image.ZQ65PY_680_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat2_image.QQZCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat3_image.NQ5FQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake2_image.1YBAQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake3_image.FJM2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand1_image.4HJ5PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand2_image.RIX2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand3_image.FDR7PY_679_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\FeesAndBikesPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Konrad.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\WhatsNew\WhatsNewPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
|
|
|
@ -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>
|
|
@ -5,6 +5,8 @@
|
|||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
mc:Ignorable="d"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
x:Class="TINK.View.Account.AccountPage"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
||||
|
@ -16,11 +18,19 @@
|
|||
</Grid>
|
||||
</Shell.TitleView>
|
||||
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<StackLayout>
|
||||
<ScrollView
|
||||
Grid.Row="0">
|
||||
|
||||
<StackLayout>
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
|
@ -57,6 +67,13 @@
|
|||
|
||||
</ScrollView>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<Grid
|
||||
Grid.Row="0"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="Auto,1*,Auto">
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
|
@ -84,17 +84,26 @@
|
|||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Network Connection-->
|
||||
<!--If Not Connected To Internet-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Spacing="0">
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||
Text="{Binding NoBikesAtStationText}"/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<ListView
|
||||
Grid.Row="1"
|
||||
x:Name="BikesAtStationListView"
|
||||
|
@ -107,21 +116,13 @@
|
|||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||
Text="{Binding NoBikesAtStationText}"/>
|
||||
|
||||
<!--Info at End of Page-->
|
||||
<StackLayout
|
||||
Grid.Row="2"
|
||||
Grid.Row="1"
|
||||
Orientation="Vertical"
|
||||
Spacing="0"
|
||||
Padding="20,0,20,0">
|
||||
|
|
|
@ -21,102 +21,158 @@
|
|||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<StackLayout
|
||||
x:Name="ContactPageView">
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="Start"
|
||||
BackgroundColor="White"
|
||||
HasShadow="False">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
<StackLayout
|
||||
Padding="20">
|
||||
|
||||
<!--Title Customer Support-->
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingContactCustomerSupportTitle}"
|
||||
FontAttributes="Bold"
|
||||
FontSize="Large"
|
||||
/>
|
||||
|
||||
<!--No station selected-->
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
|
||||
<!-- Button to select station and explanation text -->
|
||||
<StackLayout
|
||||
IsVisible="{Binding Path=IsOperatorInfoAvaliable, Converter={StaticResource BoolInvert_Converter}}">
|
||||
|
||||
<Label
|
||||
<Label
|
||||
TextType="Html"
|
||||
Text="{x:Static resources:AppResources.MarkingContactNoStationInfoAvailableNoButton}"/>
|
||||
<Button
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionSelectStation}"
|
||||
Command="{Binding OnSelectStationRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Contact operator of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
|
||||
<!-- info about selected station -->
|
||||
<StackLayout
|
||||
Spacing="0">
|
||||
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingLastSelectedStation}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
</StackLayout>
|
||||
|
||||
<!-- Station -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{Binding SelectedStationName}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding SelectedStationId}"/>
|
||||
</StackLayout>
|
||||
|
||||
<!--- Operator -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingOperator}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Buttons-->
|
||||
<StackLayout
|
||||
Spacing="5"
|
||||
Margin="0,10,0,0">
|
||||
|
||||
<!--- Phone to operator -->
|
||||
<Button
|
||||
x:Name="PhoneNumberButton"
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding PhoneNumberText}"
|
||||
IsEnabled="{Binding IsDoPhoncallAvailable}"
|
||||
Command="{Binding OnPhoneRequest}"/>
|
||||
|
||||
<!--- Mail to operator -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
x:Name="MailAddressButton"
|
||||
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding MailAddressText}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailToOperatorRequest}"/>
|
||||
|
||||
<!-- Change selected Station-->
|
||||
<Button
|
||||
Style="{StaticResource NoOutlineButton}"
|
||||
Text="{x:Static resources:AppResources.ActionSelectAnotherStation}"
|
||||
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>
|
||||
</StackLayout>
|
||||
|
||||
<Frame
|
||||
</Frame>
|
||||
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Grid.Row="1"
|
||||
Padding="10"
|
||||
Margin="0,5,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
Margin="0,0,0,10"
|
||||
VerticalOptions="End"
|
||||
Spacing="0">
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
<BoxView
|
||||
Margin="0,0,0,10"
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="DimGray"/>
|
||||
|
||||
<Label
|
||||
FormattedText="{Binding LikeTinkApp}"/>
|
||||
|
||||
<!--- Mail to app-developer -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
<Label
|
||||
TextType="Html"
|
||||
HorizontalOptions="Center"
|
||||
TextColor="{DynamicResource primary-back-title-color}"
|
||||
Text="{x:Static resources:AppResources.ActionSendDiagnosis}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}">
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</ScrollView>
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="TINK.View.FindBike.FindBikePage"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
|
@ -17,6 +18,7 @@
|
|||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
|
||||
|
@ -25,80 +27,118 @@
|
|||
<!--Grid for Bike(s) view and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<!-- Grid for Content -->
|
||||
<Grid
|
||||
RowDefinitions="1*,Auto"
|
||||
RowDefinitions="1*,Auto"
|
||||
RowSpacing="0"
|
||||
Grid.Row="0">
|
||||
Grid.Row="0">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
Spacing="0"
|
||||
Orientation="Vertical">
|
||||
Grid.Row="0"
|
||||
Spacing="0"
|
||||
Orientation="Vertical">
|
||||
|
||||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
<StackLayout
|
||||
BackgroundColor="White"
|
||||
Padding="20,5,20,0">
|
||||
|
||||
<!--Search bike-->
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
IsVisible="{Binding IsSelectBikeVisible}"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
<!--Bike type-->
|
||||
<StackLayout Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
IsVisible="{Binding ActiveFilteredBikeType, Converter={StaticResource Label_Converter}}"
|
||||
Spacing="0">
|
||||
<Label
|
||||
TextColor="DimGray"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeTypeOfBikeText}"/>
|
||||
<Label
|
||||
TextColor="{DynamicResource primary-back-title-color}"
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ActiveFilteredBikeType}"/>
|
||||
<Button
|
||||
Command="{Binding ShowFilterBikeTypeInfoCommand}"
|
||||
WidthRequest="24"
|
||||
HeightRequest="24"
|
||||
BackgroundColor="Transparent"
|
||||
BorderWidth="0"
|
||||
Padding="0"
|
||||
Margin="5,0,0,0">
|
||||
<Button.ImageSource>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource InfoCircle}"
|
||||
Color="DimGray"
|
||||
FontFamily="FA-S"
|
||||
Size="20"/>
|
||||
</Button.ImageSource>
|
||||
</Button>
|
||||
</StackLayout>
|
||||
|
||||
<StackLayout
|
||||
Padding="20">
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
ColumnDefinitions="*,Auto">
|
||||
|
||||
<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>
|
||||
<!--Search bike-->
|
||||
<Label
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
Grid.Row="0"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
|
||||
Margin="0,5,0,-5">
|
||||
</Label>
|
||||
<Entry
|
||||
Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
x:Name="FindBikeEntry"
|
||||
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
||||
MaxLength="10"
|
||||
CursorPosition="0"
|
||||
Text="{Binding BikeIdUserInput}"/>
|
||||
Text="{Binding BikeIdUserInput, Mode=TwoWay}"/>
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.MarkingSearchBike}"
|
||||
Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
WidthRequest="100"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeButton}"
|
||||
IsEnabled="{Binding IsSelectBikeEnabled}"
|
||||
Command="{Binding OnSelectBikeRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
<!-- Bike -->
|
||||
<StackLayout
|
||||
Spacing="0"
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Orientation="Vertical">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
|
||||
<ListView
|
||||
x:Name="FindBikeListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
<!--Line-->
|
||||
<BoxView
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="{DynamicResource primary-back-title-color}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--Bike-->
|
||||
<ListView
|
||||
Grid.Row="1"
|
||||
x:Name="FindBikeListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Info text-->
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
x:Class="TINK.View.Login.LoginPage"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
@ -14,118 +15,137 @@
|
|||
</Grid>
|
||||
</Shell.TitleView>
|
||||
|
||||
<StackLayout>
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
<ContentPage.Content>
|
||||
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<StackLayout
|
||||
x:Name="LoginPageView"
|
||||
Padding="10">
|
||||
Grid.Row="0">
|
||||
|
||||
<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>
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<Entry
|
||||
Placeholder="{x:Static resources:AppResources.MarkingLoginEmailAddressPlaceholder}"
|
||||
Keyboard="Email"
|
||||
AutomationId="mail_address_text"
|
||||
x:Name="EMailEntry"
|
||||
Text="{Binding MailAddress}"
|
||||
IsEnabled="{Binding IsLoggedOut}"/>
|
||||
<StackLayout
|
||||
x:Name="LoginPageView"
|
||||
Padding="10">
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<sharedGui:TogglePasswordEntry
|
||||
Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
|
||||
Text="{Binding Password}"
|
||||
HidePassword="True"
|
||||
AutomationId="password_text"
|
||||
x:Name="PasswordEntry"
|
||||
IsEnabled="{Binding IsLoggedOut}"/>
|
||||
<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.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>
|
||||
<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>
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionLoginLogin}"
|
||||
AutomationId="login_button"
|
||||
Command="{Binding OnLoginRequest}"
|
||||
IsEnabled="{Binding IsLoginRequestAllowed}">
|
||||
</Button>
|
||||
<sharedGui:TogglePasswordEntry
|
||||
Placeholder="{x:Static resources:AppResources.MarkingLoginPasswordPlaceholder}"
|
||||
Text="{Binding Password}"
|
||||
HidePassword="True"
|
||||
AutomationId="password_text"
|
||||
x:Name="PasswordEntry"
|
||||
IsEnabled="{Binding IsLoggedOut}"/>
|
||||
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionLoginRegister}"
|
||||
AutomationId="register_button"
|
||||
Command="{Binding OnRegisterRequest}"
|
||||
IsVisible="{Binding IsWebViewElementsVisible}">
|
||||
</Button>
|
||||
<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>
|
||||
|
||||
<Label
|
||||
IsVisible="{Binding IsRegisterTargetsInfoVisible}"
|
||||
FormattedText="{Binding RegisterTargetsInfo}">
|
||||
</Label>
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionLoginLogin}"
|
||||
AutomationId="login_button"
|
||||
Command="{Binding OnLoginRequest}"
|
||||
IsEnabled="{Binding IsLoginRequestAllowed}">
|
||||
</Button>
|
||||
|
||||
<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>
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionLoginRegister}"
|
||||
AutomationId="register_button"
|
||||
Command="{Binding OnRegisterRequest}"
|
||||
IsVisible="{Binding IsWebViewElementsVisible}">
|
||||
</Button>
|
||||
|
||||
</StackLayout>
|
||||
<Label
|
||||
IsVisible="{Binding IsRegisterTargetsInfoVisible}"
|
||||
FormattedText="{Binding RegisterTargetsInfo}">
|
||||
</Label>
|
||||
|
||||
</Frame>
|
||||
<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>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.Model.Device;
|
||||
|
@ -18,18 +18,22 @@ namespace TINK.View.Login
|
|||
public partial class LoginPage : ContentPage, IViewService
|
||||
#endif
|
||||
{
|
||||
/// <summary> Reference to view model. </summary>
|
||||
LoginPageViewModel m_oViewModel = null;
|
||||
|
||||
/// <summary> Constructs a login page. </summary>
|
||||
public LoginPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var l_oModel = App.ModelRoot;
|
||||
#if !BACKSTYLE
|
||||
var l_oViewModel = new LoginPageViewModel(
|
||||
m_oViewModel = new LoginPageViewModel(
|
||||
l_oModel,
|
||||
(url) => DependencyService.Get<IExternalBrowserService>().OpenUrl(url),
|
||||
this);
|
||||
|
||||
LoginPageView.BindingContext = l_oViewModel;
|
||||
BindingContext = m_oViewModel;
|
||||
#else
|
||||
LoginPageView.BindingContext = new LoginPageViewModel(l_oModel.ActiveUser, this, Navigation);
|
||||
#endif
|
||||
|
@ -120,4 +124,4 @@ namespace TINK.View.Login
|
|||
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,34 +44,36 @@
|
|||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<StackLayout
|
||||
Spacing="0"
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Orientation="Vertical">
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||
Text="{Binding NoBikesOccupiedText}"/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<ListView
|
||||
x:Name="MyBikesListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||
Text="{Binding NoBikesOccupiedText}"/>
|
||||
Grid.Row="1"
|
||||
x:Name="MyBikesListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
|
|
|
@ -33,7 +33,8 @@
|
|||
|
||||
<ScrollView>
|
||||
|
||||
<StackLayout>
|
||||
<StackLayout
|
||||
Spacing="0">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
VerticalOptions="FillAndExpand"
|
||||
BackgroundColor="Gray"
|
||||
Opacity=".80"
|
||||
HasShadow="False"
|
||||
CornerRadius="0"/>
|
||||
|
||||
<!--Show spinner and info text-->
|
||||
|
@ -29,6 +30,7 @@
|
|||
VerticalOptions="Center"
|
||||
BackgroundColor="White"
|
||||
Padding="10"
|
||||
HasShadow="False"
|
||||
CornerRadius="10">
|
||||
|
||||
<StackLayout Orientation="Vertical">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?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.365" android:versionCode="365">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.369" android:versionCode="369">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
<!-- Notice here that we have the package name of our application as a prefix on the permissions. -->
|
||||
|
@ -9,14 +9,11 @@
|
|||
<!-- Access Google based webservices -->
|
||||
<!-- External storage for caching. -->
|
||||
<!-- My Location -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
|
||||
android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-feature android:name="android.hardware.location" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
||||
|
|
1674
TINK/TINK.Android/Resources/Resource.Designer.cs
generated
|
@ -16,7 +16,7 @@
|
|||
<AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<TargetFrameworkVersion>v12.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v13.0</TargetFrameworkVersion>
|
||||
<AndroidStoreUncompressedFileExtensions />
|
||||
<MandroidI18n />
|
||||
<JavaMaximumHeapSize>2G</JavaMaximumHeapSize>
|
||||
|
@ -77,7 +77,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -97,7 +97,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -176,24 +176,24 @@
|
|||
<PackageReference Include="Xamarin.Android.Support.v7.RecyclerView" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.Android.Support.Vector.Drawable" Version="28.0.0.3" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core">
|
||||
<Version>1.9.0.2</Version>
|
||||
<Version>1.10.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.MediaRouter">
|
||||
<Version>1.3.1.2</Version>
|
||||
<Version>1.4.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.Palette">
|
||||
<Version>1.0.0.16</Version>
|
||||
<Version>1.0.0.18</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.AndroidX.RecyclerView">
|
||||
<Version>1.3.0</Version>
|
||||
<Version>1.3.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
|
||||
<PackageReference Include="Xamarin.Forms.AppLinks">
|
||||
|
@ -203,10 +203,10 @@
|
|||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps.Bindings" Version="3.0.0" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Base" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="118.2.0.1" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Maps" Version="118.1.0.2" />
|
||||
<PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="118.0.2.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Mono.Android" />
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>sharee.bike</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>365</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.365</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 18 KiB |
|
@ -121,7 +121,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Bcl.Build" Version="1.0.21" />
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
|
||||
<PackageReference Include="MonkeyCache">
|
||||
<Version>1.6.3</Version>
|
||||
|
@ -137,7 +137,7 @@
|
|||
<Version>6.3.0.19</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog">
|
||||
<Version>2.12.0</Version>
|
||||
<Version>3.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
|
||||
|
@ -198,10 +198,10 @@
|
|||
<PackageReference Include="Xamarin.Auth" Version="1.7.0" />
|
||||
<PackageReference Include="Xamarin.Build.Download" Version="0.11.4" />
|
||||
<PackageReference Include="Xamarin.CommunityToolkit">
|
||||
<Version>2.0.5</Version>
|
||||
<Version>2.0.6</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Essentials">
|
||||
<Version>1.7.5</Version>
|
||||
<Version>1.7.7</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Forms.GoogleMaps">
|
||||
<Version>5.0.0</Version>
|
||||
|
@ -271,9 +271,6 @@
|
|||
<HintPath>..\..\..\..\.nuget\packages\xamarin.google.ios.maps\2.5.0\lib\Xamarin.iOS10\Google.Maps.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BundleResource Include="Resources\tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\LockItBLE\LockItBLE.csproj">
|
||||
<Project>{bde9ce26-15cf-47da-a4f6-b6956d02d0fc}</Project>
|
||||
|
|
Before Width: | Height: | Size: 582 B |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 451 KiB |
Before Width: | Height: | Size: 1,004 KiB |
Before Width: | Height: | Size: 356 KiB |
Before Width: | Height: | Size: 804 KiB |
Before Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 399 KiB |
Before Width: | Height: | Size: 500 KiB |
Before Width: | Height: | Size: 886 KiB |
Before Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 457 KiB |
Before Width: | Height: | Size: 396 KiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 388 KiB |
Before Width: | Height: | Size: 997 KiB |
Before Width: | Height: | Size: 352 KiB |
Before Width: | Height: | Size: 488 KiB |
Before Width: | Height: | Size: 622 KiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 600 KiB |
Before Width: | Height: | Size: 965 KiB |
Before Width: | Height: | Size: 338 KiB |
BIN
TINK/TINK/Resources/Fonts/Roboto-Bold.ttf
Normal file
BIN
TINK/TINK/Resources/Fonts/Roboto-Italic.ttf
Normal file
|
@ -196,40 +196,18 @@
|
|||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake1_image.HZ17PY_678_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Info\InfoTabbedPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt1_image.4XWCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt2_image.X3F1PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\belt3_image.DYOXPY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat1_image.ZQ65PY_680_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat2_image.QQZCQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\seat3_image.NQ5FQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake2_image.1YBAQY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_brake3_image.FJM2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand1_image.4HJ5PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand2_image.RIX2PY_679_382.png" />
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\trike_stand3_image.FDR7PY_679_382.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\FeesAndBikesPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Images\Konrad.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\WhatsNew\WhatsNewPage.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
|
@ -340,4 +318,8 @@
|
|||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="$(MSBuildThisFileDirectory)Resources\Fonts\Roboto-Bold.ttf" />
|
||||
<Content Include="$(MSBuildThisFileDirectory)Resources\Fonts\Roboto-Italic.ttf" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -3,7 +3,9 @@
|
|||
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"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
mc:Ignorable="d"
|
||||
x:Class="TINK.View.Account.AccountPage"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
@ -14,39 +16,49 @@
|
|||
Text="{x:Static resources:AppResources.MarkingAccount}"/>
|
||||
</Grid>
|
||||
</Shell.TitleView>
|
||||
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<ScrollView
|
||||
Grid.Row="0">
|
||||
|
||||
<StackLayout>
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
Padding="10">
|
||||
|
||||
<Label
|
||||
Text="{Binding LoggedInInfo}" />
|
||||
Text="{Binding LoggedInInfo}" />
|
||||
|
||||
<Label
|
||||
IsVisible="{Binding IsBookingStateInfoVisible}"
|
||||
Text="{Binding BookingStateInfo}" />
|
||||
IsVisible="{Binding IsBookingStateInfoVisible}"
|
||||
Text="{Binding BookingStateInfo}" />
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
|
||||
Command="{Binding OnManageAccount}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
|
||||
Command="{Binding OnManageAccount}"
|
||||
IsEnabled="{Binding IsLogoutPossible}">
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
|
||||
Command="{Binding OnLogoutRequest}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
|
||||
Command="{Binding OnLogoutRequest}"
|
||||
IsEnabled="{Binding IsLogoutPossible}">
|
||||
</Button>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
|
@ -56,6 +68,13 @@
|
|||
|
||||
</ScrollView>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
<Grid
|
||||
Grid.Row="0"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="Auto,1*,Auto">
|
||||
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
Spacing="0"
|
||||
|
@ -56,17 +56,17 @@
|
|||
RowDefinitions="Auto"
|
||||
Padding="0,0,0,5">
|
||||
|
||||
<!--Station id-->
|
||||
<Label
|
||||
<!--Station id-->
|
||||
<Label
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
FontSize="Small"
|
||||
HorizontalOptions="Start"
|
||||
TextColor="White"
|
||||
Text="{Binding StationDetailText}"/>
|
||||
|
||||
<!--Contact to operator-->
|
||||
<Label
|
||||
|
||||
<!--Contact to operator-->
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
TextType="Html"
|
||||
|
@ -74,26 +74,35 @@
|
|||
HorizontalOptions="End"
|
||||
TextColor="White"
|
||||
Text="{Binding ContactSupportHintText}">
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer Command="{Binding ContactSupportClickedCommand}"/>
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Network Connection-->
|
||||
<!--If Not Connected To Internet-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Spacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||
Text="{Binding NoBikesAtStationText}"/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<ListView
|
||||
Grid.Row="1"
|
||||
x:Name="BikesAtStationListView"
|
||||
|
@ -106,21 +115,13 @@
|
|||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesAtStationVisible}"
|
||||
Text="{Binding NoBikesAtStationText}"/>
|
||||
|
||||
<!--Info at End of Page-->
|
||||
<StackLayout
|
||||
Grid.Row="2"
|
||||
Grid.Row="1"
|
||||
Orientation="Vertical"
|
||||
Spacing="0"
|
||||
Padding="20,0,20,0">
|
||||
|
|
|
@ -17,105 +17,161 @@
|
|||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<conv:BoolInverterConverter x:Key="BoolInvert_Converter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
<ContentPage.Content>
|
||||
|
||||
<StackLayout
|
||||
x:Name="ContactPageView">
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
Grid.Row="0"
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="Start"
|
||||
BackgroundColor="White"
|
||||
HasShadow="False">
|
||||
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
Padding="20">
|
||||
|
||||
<!-- Button to select station and explanation text -->
|
||||
<!--Title Customer Support-->
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingContactCustomerSupportTitle}"
|
||||
FontAttributes="Bold"
|
||||
FontSize="Large"
|
||||
/>
|
||||
|
||||
<!--No station selected-->
|
||||
<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 -->
|
||||
<!--Contact operator of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
|
||||
<!--- Name of operator -->
|
||||
<Label
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}"
|
||||
HorizontalOptions="Center"
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
<!-- info about selected station -->
|
||||
<StackLayout
|
||||
Spacing="0">
|
||||
|
||||
<!--- 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}"/>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingLastSelectedStation}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
</StackLayout>
|
||||
|
||||
<!--- Phone to operator -->
|
||||
<Label
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
FormattedText="{Binding PhoneContactText}"/>
|
||||
<!-- Station -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{Binding SelectedStationName}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding SelectedStationId}"/>
|
||||
</StackLayout>
|
||||
|
||||
<Button
|
||||
<!--- Operator -->
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
Spacing="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingOperator}"/>
|
||||
<Label
|
||||
Text=": "/>
|
||||
<Label
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Buttons-->
|
||||
<StackLayout
|
||||
Spacing="5"
|
||||
Margin="0,10,0,0">
|
||||
|
||||
<!--- Phone to operator -->
|
||||
<Button
|
||||
x:Name="PhoneNumberButton"
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding PhoneNumberText}"
|
||||
IsEnabled="{Binding IsDoPhoncallAvailable}"
|
||||
Command="{Binding OnPhoneRequest}"/>
|
||||
|
||||
<!--- Mail to operator -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
x:Name="PhoneNumberButton"
|
||||
IsVisible="{Binding PhoneNumberText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding PhoneNumberText}"
|
||||
IsEnabled="{Binding IsDoPhoncallAvailable}"
|
||||
Command="{Binding OnPhoneRequest}"/>
|
||||
|
||||
x:Name="MailAddressButton"
|
||||
IsVisible="{Binding MailAddressText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding MailAddressText}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailToOperatorRequest}"/>
|
||||
|
||||
<!-- Change selected Station-->
|
||||
<Button
|
||||
Style="{StaticResource NoOutlineButton}"
|
||||
Text="{x:Static resources:AppResources.ActionSelectAnotherStation}"
|
||||
Command="{Binding OnSelectStationRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
|
||||
<Frame
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Grid.Row="1"
|
||||
Padding="10"
|
||||
Margin="0,5,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
Margin="0,0,0,10"
|
||||
VerticalOptions="End"
|
||||
Spacing="0">
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
<BoxView
|
||||
Margin="0,0,0,10"
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="DimGray"/>
|
||||
|
||||
<Label
|
||||
FormattedText="{Binding LikeTinkApp}"/>
|
||||
<Label
|
||||
TextType="Html"
|
||||
HorizontalOptions="Center"
|
||||
TextColor="{DynamicResource primary-back-title-color}"
|
||||
Text="{x:Static resources:AppResources.ActionSendDiagnosis}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}">
|
||||
<Label.GestureRecognizers>
|
||||
<TapGestureRecognizer
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
</Label.GestureRecognizers>
|
||||
</Label>
|
||||
|
||||
<!--- Mail to app-developer -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
Command="{Binding OnMailAppRelatedRequest}"/>
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</ContentPage.Content>
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="TINK.View.FindBike.FindBikePage"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
|
@ -18,6 +19,7 @@
|
|||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
|
||||
|
@ -26,80 +28,88 @@
|
|||
<!--Grid for Bike(s) view and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<!-- Grid for Content -->
|
||||
<Grid
|
||||
RowDefinitions="1*,Auto"
|
||||
RowDefinitions="1*,Auto"
|
||||
RowSpacing="0"
|
||||
Grid.Row="0">
|
||||
Grid.Row="0">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
Spacing="0"
|
||||
Orientation="Vertical">
|
||||
Grid.Row="0"
|
||||
Spacing="0"
|
||||
Orientation="Vertical">
|
||||
|
||||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
<StackLayout
|
||||
BackgroundColor="White"
|
||||
Padding="20,0,20,0">
|
||||
|
||||
<!--Search bike-->
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
IsVisible="{Binding IsSelectBikeVisible}"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
ColumnDefinitions="*,Auto">
|
||||
|
||||
<StackLayout
|
||||
Padding="20">
|
||||
|
||||
<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>
|
||||
<!--Search bike-->
|
||||
<Label
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
Grid.Row="0"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeLabel}"
|
||||
Margin="0,5,0,-5">
|
||||
</Label>
|
||||
<Entry
|
||||
Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
x:Name="FindBikeEntry"
|
||||
Placeholder="{x:Static resources:AppResources.PlaceholderFindBike}"
|
||||
MaxLength="10"
|
||||
CursorPosition="0"
|
||||
Text="{Binding BikeIdUserInput}"/>
|
||||
Text="{Binding BikeIdUserInput, Mode=TwoWay}"/>
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.MarkingSearchBike}"
|
||||
Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
WidthRequest="100"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeButton}"
|
||||
IsEnabled="{Binding IsSelectBikeEnabled}"
|
||||
Command="{Binding OnSelectBikeRequest}"/>
|
||||
|
||||
</StackLayout>
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
<!--Line-->
|
||||
<BoxView
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="{DynamicResource primary-back-title-color}"/>
|
||||
|
||||
<!-- Bike -->
|
||||
<StackLayout
|
||||
Spacing="0"
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Orientation="Vertical">
|
||||
</StackLayout>
|
||||
|
||||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--Bike-->
|
||||
<ListView
|
||||
Grid.Row="1"
|
||||
x:Name="FindBikeListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
</Grid>
|
||||
|
||||
<ListView
|
||||
x:Name="FindBikeListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Info text-->
|
||||
|
|
|
@ -1,130 +1,150 @@
|
|||
<?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:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
x:Class="TINK.View.Login.LoginPage"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
||||
<Shell.TitleView>
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
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>
|
||||
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<StackLayout>
|
||||
<StackLayout
|
||||
Grid.Row="0">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<StackLayout
|
||||
x:Name="LoginPageView"
|
||||
Padding="10">
|
||||
<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>
|
||||
<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}"/>
|
||||
<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>
|
||||
<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}"/>
|
||||
<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>
|
||||
<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
|
||||
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>
|
||||
<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
|
||||
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>
|
||||
<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>
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
</Frame>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -18,18 +18,22 @@ namespace TINK.View.Login
|
|||
public partial class LoginPage : ContentPage, IViewService
|
||||
#endif
|
||||
{
|
||||
/// <summary> Reference to view model. </summary>
|
||||
LoginPageViewModel m_oViewModel = null;
|
||||
|
||||
/// <summary> Constructs a login page. </summary>
|
||||
public LoginPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var l_oModel = App.ModelRoot;
|
||||
#if !BACKSTYLE
|
||||
var l_oViewModel = new LoginPageViewModel(
|
||||
m_oViewModel = new LoginPageViewModel(
|
||||
l_oModel,
|
||||
(url) => DependencyService.Get<IExternalBrowserService>().OpenUrl(url),
|
||||
this);
|
||||
|
||||
LoginPageView.BindingContext = l_oViewModel;
|
||||
BindingContext = m_oViewModel;
|
||||
#else
|
||||
LoginPageView.BindingContext = new LoginPageViewModel(l_oModel.ActiveUser, this, Navigation);
|
||||
#endif
|
||||
|
|
|
@ -29,9 +29,9 @@
|
|||
|
||||
<!--Bike(s) view-->
|
||||
<Grid
|
||||
RowDefinitions="1*,Auto"
|
||||
RowDefinitions="1*,Auto"
|
||||
RowSpacing="0"
|
||||
Grid.Row="0">
|
||||
Grid.Row="0">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
|
@ -41,34 +41,36 @@
|
|||
<!--No Network Connection-->
|
||||
<sharedGui:NotConnectedToNetView/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<StackLayout
|
||||
Spacing="0"
|
||||
IsVisible="{Binding IsBikesListVisible}"
|
||||
Orientation="Vertical">
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
<sharedGui:HintForRefreshingPageView/>
|
||||
<sharedGui:HintForRefreshingPageView
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||
Text="{Binding NoBikesOccupiedText}"/>
|
||||
|
||||
<!--Bike(s)-->
|
||||
<ListView
|
||||
x:Name="MyBikesListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--No Bikes-->
|
||||
<Label
|
||||
Margin="20"
|
||||
IsVisible="{Binding IsNoBikesOccupiedVisible}"
|
||||
Text="{Binding NoBikesOccupiedText}"/>
|
||||
Grid.Row="1"
|
||||
x:Name="MyBikesListView"
|
||||
SelectionMode="None"
|
||||
SelectedItem="{Binding SelectedBike}"
|
||||
IsEnabled="{Binding IsIdle}"
|
||||
HasUnevenRows="True"
|
||||
SeparatorVisibility="None"
|
||||
ItemTemplate="{StaticResource bikeTemplateSelector}"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshCommand}"
|
||||
IsRefreshing="{Binding IsRefreshing}"/>
|
||||
</Grid>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
|
|
|
@ -32,7 +32,8 @@
|
|||
|
||||
<ScrollView>
|
||||
|
||||
<StackLayout>
|
||||
<StackLayout
|
||||
Spacing="0">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
private readonly StateInfoMutable _StateInfo;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs a bike.
|
||||
/// Constructs a bike info object.
|
||||
/// </summary>
|
||||
/// <param name="isDemo">True if device is demo device, false otherwise.</param>
|
||||
/// <param name="dateTimeProvider">Provider for current date time to calculate remaining time on demand for state of type reserved.</param>
|
||||
|
@ -38,7 +38,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
string stationId = null,
|
||||
string stationName = null,
|
||||
Uri operatorUri = null,
|
||||
RentalDescription tariffDescription = null,
|
||||
IRentalDescription tariffDescription = null,
|
||||
Func<DateTime> dateTimeProvider = null,
|
||||
IStateInfo stateInfo = null)
|
||||
{
|
||||
|
@ -57,7 +57,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
|
||||
/// <summary> Id of station a which bike is located, null otherwise.</summary>
|
||||
[DataMember]
|
||||
public string StationId { get; }
|
||||
public string StationId { get; private set; }
|
||||
|
||||
/// <summary> Name of station a which bike is located, null otherwise. </summary>
|
||||
[DataMember]
|
||||
|
@ -65,7 +65,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
|
||||
/// <summary> Holds description about the tariff. </summary>
|
||||
[DataMember]
|
||||
public RentalDescription TariffDescription { get; private set; }
|
||||
public IRentalDescription TariffDescription { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Holds the rent state of the bike.
|
||||
|
@ -128,6 +128,24 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary> Loads a bike object from copri server booking_cancel (cancel reservation)/ booking_update (return bike) response.</summary>
|
||||
/// <param name="bike">Bike object to load response into.</param>
|
||||
/// <param name="notifyLevel">Controls whether notify property changed events are fired or not.</param>
|
||||
/// <param name="stationId">Id of the station if bike station changed, null otherwise.</param>
|
||||
public void Load(
|
||||
NotifyPropertyChangedLevel notifyLevel,
|
||||
string stationId = null)
|
||||
{
|
||||
State.Load(InUseStateEnum.Disposable, notifyLevel: notifyLevel);
|
||||
if (stationId == null)
|
||||
{
|
||||
// Station did not change.
|
||||
return;
|
||||
}
|
||||
|
||||
StationId = stationId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the instance to text.
|
||||
/// </summary>
|
||||
|
|
|
@ -64,6 +64,18 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
|
|||
/// <summary> Gets or sets the information where the data origins from. </summary>
|
||||
DataSource DataSource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the rental description.
|
||||
/// </summary>
|
||||
IRentalDescription TariffDescription { get; }
|
||||
|
||||
/// <summary> Loads a bike object from copri server booking_cancel (cancel reservation)/ booking_update (return bike) response.</summary>
|
||||
/// <param name="notifyLevel">Controls whether notify property changed events are fired or not.</param>
|
||||
/// <param name="stationId">Id of the station if bike station changed, null otherwise.</param>
|
||||
void Load(
|
||||
NotifyPropertyChangedLevel notifyLevel,
|
||||
string stationId = null);
|
||||
|
||||
event PropertyChangedEventHandler PropertyChanged;
|
||||
}
|
||||
|
||||
|
|
|
@ -83,8 +83,9 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
|
|||
new StateInfo(
|
||||
dateTimeProvider,
|
||||
requestedAt,
|
||||
tariffDescription?.MaxReservationTimeSpan ?? StateRequestedInfo.UNKNOWNMAXRESERVATIONTIMESPAN,
|
||||
mailAddress,
|
||||
""),
|
||||
"" ), // BC code
|
||||
bike != null
|
||||
? new Bike(
|
||||
bike.Id,
|
||||
|
|
|
@ -84,8 +84,9 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
|
|||
new StateInfo(
|
||||
dateTimeProvider,
|
||||
requestedAt,
|
||||
tariffDescription?.MaxReservationTimeSpan ?? StateRequestedInfo.UNKNOWNMAXRESERVATIONTIMESPAN,
|
||||
mailAddress,
|
||||
""),
|
||||
""), // BC code
|
||||
bike != null
|
||||
? new Bike(
|
||||
bike.Id,
|
||||
|
|
29
TINKLib/Model/Bikes/BikeInfoNS/IRentalDescription.cs
Normal file
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static TINK.Model.Bikes.BikeInfoNS.RentalDescription;
|
||||
|
||||
namespace TINK.Model.Bikes.BikeInfoNS
|
||||
{
|
||||
public interface IRentalDescription
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of the tariff.
|
||||
/// </summary>
|
||||
string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Holds the time span for which a bike can be reserved.
|
||||
/// </summary>
|
||||
TimeSpan MaxReservationTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dynamic language aware tariff elements to be displayed to user.
|
||||
/// </summary>
|
||||
Dictionary<string, TariffElement> TariffEntries { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Well known language aware elements (AGB, tracking info, ...) to be displayed to user.
|
||||
/// </summary>
|
||||
Dictionary<string, InfoElement> InfoEntries { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace TINK.Model.Bikes.BikeInfoNS
|
||||
|
@ -6,20 +7,20 @@ namespace TINK.Model.Bikes.BikeInfoNS
|
|||
/// Successor of TarifDescription- object.
|
||||
/// Manages tariff- and rental info.
|
||||
/// </summary>
|
||||
public class RentalDescription
|
||||
public class RentalDescription : IRentalDescription
|
||||
{
|
||||
/// <summary>
|
||||
/// The different elements of a tariff (example: "Max Gebühr", )
|
||||
/// The different elements of a tariff (example: "Max Gebühr", ) to be displayed by sharee.bike without processing
|
||||
/// </summary>
|
||||
public class TariffElement
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes the tariff element. To be displayed to user (example of elements: "Gratis Mietzeit", "Mietgebühr", "Max Gebühr").
|
||||
/// Describes the tariff element (language aware). To be displayed to user (example of elements: "Gratis Mietzeit", "Mietgebühr", "Max Gebühr").
|
||||
/// </summary>
|
||||
public string Description { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Holds the tariff element value. To be displayed to user (example: "9.00 € / Tag").
|
||||
/// Holds the tariff element value (language aware, i.e. value from backend might be english, german, ... depending on smart phone value). To be displayed to user (example: "9.00 € / Tag").
|
||||
/// </summary>
|
||||
public string Value { get; set; } = string.Empty;
|
||||
}
|
||||
|
@ -30,12 +31,12 @@ namespace TINK.Model.Bikes.BikeInfoNS
|
|||
public class InfoElement
|
||||
{
|
||||
/// <summary>
|
||||
/// Key which identyfies the value (required for special processing)
|
||||
/// Key which identifies the value (required for special processing)
|
||||
/// </summary>
|
||||
public string Key { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Text to be displayed to user.
|
||||
/// Text (language aware) to be displayed to user.
|
||||
/// </summary>
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
@ -50,8 +51,19 @@ namespace TINK.Model.Bikes.BikeInfoNS
|
|||
/// </summary>
|
||||
public int? Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Holds the time span for which a bike can be reserved.
|
||||
/// </summary>
|
||||
public TimeSpan MaxReservationTimeSpan { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dynamic language aware tariff elements to be displayed to user.
|
||||
/// </summary>
|
||||
public Dictionary<string, TariffElement> TariffEntries { get; set; } = new Dictionary<string, TariffElement>();
|
||||
|
||||
/// <summary>
|
||||
/// Well known language aware elements (AGB, tracking info, ...) to be displayed to user.
|
||||
/// </summary>
|
||||
public Dictionary<string, InfoElement> InfoEntries { get; set; } = new Dictionary<string, InfoElement>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
using TINK.Model.MiniSurvey;
|
||||
using TINK.Model.MiniSurvey;
|
||||
|
||||
namespace TINK.Model
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds tasks to be accoumplished/ information shown to user after booking has finished.
|
||||
/// Holds tasks to be accomplished/ information shown to user after booking has finished.
|
||||
/// </summary>
|
||||
public class BookingFinishedModel : IBookingFinishedModel
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
using TINK.Model.Connector.Updater;
|
||||
|
@ -288,7 +289,10 @@ namespace TINK.Model.Connector
|
|||
DoReturnResponse response
|
||||
= (await CopriServer.DoReturn(bike.Id, location, bike.OperatorUri)).GetIsReturnBikeResponseOk(bike.Id);
|
||||
|
||||
bike.Load(Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel.None);
|
||||
bike.Load(
|
||||
Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel.None,
|
||||
response.bike_returned.station ?? string.Empty);
|
||||
|
||||
return response?.Create() ?? new BookingFinishedModel();
|
||||
}
|
||||
|
||||
|
|
|
@ -438,5 +438,20 @@ namespace TINK.Model.Connector
|
|||
name,
|
||||
int.TryParse(bikeGroup?.bike_count ?? "0", out var countCity) ? countCity : 0,
|
||||
bikeGroup?.bike_group ?? string.Empty);
|
||||
|
||||
/// <summary>
|
||||
/// Default value for reserve_timerange.
|
||||
/// </summary>
|
||||
private static int DEFAULTMAXRESERVATIONTIMESPAN = 15;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the reservation time span from response.
|
||||
/// </summary>
|
||||
/// <param name="description">Response to get time span from.</param>
|
||||
/// <returns>Time span.</returns>
|
||||
public static TimeSpan GetMaxReservationTimeSpan(this RentalDescription description) =>
|
||||
TimeSpan.FromMinutes(int.TryParse(description?.reserve_timerange, out int minutes)
|
||||
? minutes
|
||||
: DEFAULTMAXRESERVATIONTIMESPAN );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -313,7 +313,7 @@ namespace TINK.Model.Connector.Updater
|
|||
}
|
||||
catch (ArgumentException ex)
|
||||
{
|
||||
// Contructor reported invalid arguemts (missing lock id, ....).
|
||||
// Constructor reported invalid arguments (missing lock id, ....).
|
||||
Log.Error($"Can not create new {nameof(BikeInfo)}-object from {nameof(BikeInfoReservedOrBooked)} argument. Invalid response detected. Booked bike with id {bikeInfo.bike} skipped. {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -1,58 +1,56 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TINK.Model.Bikes.BikeInfoNS;
|
||||
|
||||
namespace TINK.Model.Connector.Updater
|
||||
{
|
||||
public static class RentalDescriptionFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates rental description object from JSON- tarif description object.
|
||||
/// Creates rental description object from JSON- tariff description object.
|
||||
/// </summary>
|
||||
/// <param name="rentalDesciption">Source JSON object.</param>
|
||||
/// <returns>Tariff description object.</returns>
|
||||
|
||||
public static Bikes.BikeInfoNS.RentalDescription Create(this Repository.Response.RentalDescription rentalDesciption)
|
||||
public static RentalDescription Create(this Repository.Response.RentalDescription rentalDesciption)
|
||||
{
|
||||
Bikes.BikeInfoNS.RentalDescription.TariffElement CreateTarifEntry(string[] elementValue)
|
||||
{
|
||||
return new Bikes.BikeInfoNS.RentalDescription.TariffElement
|
||||
{
|
||||
Description = elementValue != null && elementValue.Length > 0 ? elementValue[0] : string.Empty,
|
||||
Value = elementValue != null && elementValue.Length > 1 ? elementValue[1] : string.Empty,
|
||||
};
|
||||
}
|
||||
RentalDescription.TariffElement CreateTarifEntry(string[] elementValue) =>
|
||||
new RentalDescription.TariffElement
|
||||
{
|
||||
Description = elementValue != null && elementValue.Length > 0 ? elementValue[0] : string.Empty,
|
||||
Value = elementValue != null && elementValue.Length > 1 ? elementValue[1] : string.Empty,
|
||||
};
|
||||
|
||||
Bikes.BikeInfoNS.RentalDescription.InfoElement CreateInfoElement(string[] elementValue)
|
||||
{
|
||||
return new Bikes.BikeInfoNS.RentalDescription.InfoElement
|
||||
RentalDescription.InfoElement CreateInfoElement(string[] elementValue) =>
|
||||
new RentalDescription.InfoElement
|
||||
{
|
||||
Key = elementValue != null && elementValue.Length > 0 ? elementValue[0] : string.Empty,
|
||||
Value = elementValue != null && elementValue.Length > 1 ? elementValue[1] : string.Empty,
|
||||
};
|
||||
}
|
||||
|
||||
// Read tariff elements.
|
||||
var tarifEntries = rentalDesciption?.tarif_elements != null
|
||||
? rentalDesciption.tarif_elements.Select(x => new
|
||||
{
|
||||
Key = x.Key,
|
||||
x.Key,
|
||||
Value = CreateTarifEntry(x.Value)
|
||||
}).ToLookup(x => x.Key, x => x.Value).ToDictionary(x => x.Key, x => x.First())
|
||||
: new Dictionary<string, Bikes.BikeInfoNS.RentalDescription.TariffElement>();
|
||||
: new Dictionary<string, RentalDescription.TariffElement>();
|
||||
|
||||
// Read info elements.
|
||||
var InfoEntries = rentalDesciption?.rental_info != null
|
||||
? rentalDesciption.rental_info.Select(x => new
|
||||
{
|
||||
Key = x.Key,
|
||||
x.Key,
|
||||
Value = CreateInfoElement(x.Value)
|
||||
}).ToLookup(x => x.Key, x => x.Value).ToDictionary(x => x.Key, x => x.First())
|
||||
: new Dictionary<string, Bikes.BikeInfoNS.RentalDescription.InfoElement>();
|
||||
: new Dictionary<string, RentalDescription.InfoElement>();
|
||||
|
||||
var bike = new Bikes.BikeInfoNS.RentalDescription
|
||||
var bike = new RentalDescription
|
||||
{
|
||||
Name = rentalDesciption?.name ?? string.Empty,
|
||||
Id = int.TryParse(rentalDesciption?.id ?? string.Empty, out int number) ? number : (int?)null,
|
||||
MaxReservationTimeSpan = rentalDesciption.GetMaxReservationTimeSpan(),
|
||||
TariffEntries = tarifEntries,
|
||||
InfoEntries = InfoEntries
|
||||
};
|
||||
|
|
|
@ -2,13 +2,11 @@ using System;
|
|||
using TINK.Model.Bikes.BikeInfoNS.BC;
|
||||
using TINK.Model.State;
|
||||
using TINK.Model.Stations;
|
||||
using TINK.Model.Stations.StationNS.Operator;
|
||||
using TINK.Model.User.Account;
|
||||
using TINK.Repository.Exception;
|
||||
using TINK.Repository.Response;
|
||||
using TINK.Repository.Response.Stations;
|
||||
using TINK.Services.CopriApi;
|
||||
using Xamarin.Forms;
|
||||
using IBikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BC.IBikeInfoMutable;
|
||||
|
||||
namespace TINK.Model.Connector.Updater
|
||||
|
@ -19,14 +17,6 @@ namespace TINK.Model.Connector.Updater
|
|||
/// <todo>Rename to UpdateFromCopri.</todo>
|
||||
public static class UpdaterJSON
|
||||
{
|
||||
/// <summary> Loads a bike object from copri server cancel reservation/ booking update request.</summary>
|
||||
/// <param name="bike">Bike object to load response into.</param>
|
||||
/// <param name="notifyLevel">Controls whether notify property changed events are fired or not.</param>
|
||||
public static void Load(
|
||||
this IBikeInfoMutable bike,
|
||||
NotifyPropertyChangedLevel notifyLevel)
|
||||
=> bike.State.Load(InUseStateEnum.Disposable, notifyLevel: notifyLevel);
|
||||
|
||||
/// <summary>
|
||||
/// Gets all station for station provider and add them into station list.
|
||||
/// </summary>
|
||||
|
@ -135,6 +125,7 @@ namespace TINK.Model.Connector.Updater
|
|||
bike.State.Load(
|
||||
InUseStateEnum.Reserved,
|
||||
bikeInfo.GetFrom(),
|
||||
bikeInfo.rental_description.GetMaxReservationTimeSpan(),
|
||||
mailAddress,
|
||||
bikeInfo.timeCode,
|
||||
notifyLevel);
|
||||
|
@ -144,9 +135,9 @@ namespace TINK.Model.Connector.Updater
|
|||
bike.State.Load(
|
||||
InUseStateEnum.Booked,
|
||||
bikeInfo.GetFrom(),
|
||||
mailAddress,
|
||||
bikeInfo.timeCode,
|
||||
notifyLevel);
|
||||
mailAddress: mailAddress,
|
||||
code: bikeInfo.timeCode,
|
||||
notifyLevel: notifyLevel);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace TINK.Model.State
|
||||
{
|
||||
|
@ -12,7 +12,7 @@ namespace TINK.Model.State
|
|||
[KnownType(typeof(StateOccupiedInfo))]
|
||||
public abstract class BaseState
|
||||
{
|
||||
/// <summary> Constructor for Json serialization. </summary>
|
||||
/// <summary> Constructor for JSON serialization. </summary>
|
||||
/// <param name="value">State value.</param>
|
||||
protected BaseState(InUseStateEnum value) { }
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
|
||||
namespace TINK.Model.State
|
||||
{
|
||||
|
@ -9,8 +9,16 @@ namespace TINK.Model.State
|
|||
{
|
||||
string MailAddress { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Date of request/ booking action.
|
||||
/// </summary>
|
||||
DateTime? From { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Time span for which a bike can be reserved.
|
||||
/// </summary>
|
||||
TimeSpan? MaxReservationTimeSpan { get; }
|
||||
|
||||
string Code { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
|
||||
namespace TINK.Model.State
|
||||
{
|
||||
|
@ -6,15 +6,17 @@ namespace TINK.Model.State
|
|||
{
|
||||
InUseStateEnum Value { get; }
|
||||
|
||||
/// <summary> Updates state from webserver. </summary>
|
||||
/// <summary> Updates state from web server. </summary>
|
||||
/// <param name="state">State of the bike.</param>
|
||||
/// <param name="from">Date time when bike was reserved/ booked.</param>
|
||||
/// <param name="mailAddress">Mailaddress of the one which reserved/ booked.</param>
|
||||
/// <param name="reservationTimeSpan">Time span for which a bike can be reserved.</param>
|
||||
/// <param name="mailAddress">Mail address of the one which reserved/ booked.</param>
|
||||
/// <param name="code">Booking code if bike is booked or reserved.</param>
|
||||
/// <param name="notifyLevel">Controls whether notify property changed events are fired or not.</param>
|
||||
void Load(
|
||||
InUseStateEnum state,
|
||||
DateTime? from = null,
|
||||
TimeSpan? reservationTimeSpan = null,
|
||||
string mailAddress = null,
|
||||
string code = null,
|
||||
Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel notifyLevel = Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel.All);
|
||||
|
|
|
@ -52,20 +52,21 @@ namespace TINK.Model.State
|
|||
/// Constructs a state info object when state is requested.
|
||||
/// </summary>
|
||||
/// <param name="requestedAt">Date time when bike was requested</param>
|
||||
/// <param name="maxReservationTimeSpan">Time span for which a bike can be reserved.</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 remaining time.</param>
|
||||
public StateInfo(
|
||||
Func<DateTime> dateTimeNowProvider,
|
||||
DateTime requestedAt,
|
||||
TimeSpan maxReservationTimeSpan,
|
||||
string mailAddress,
|
||||
string code)
|
||||
{
|
||||
// Todo: Handle p_oFrom == null here.
|
||||
// Todo: Handle p_oDuration == null here.
|
||||
_InUseState = new StateRequestedInfo(
|
||||
dateTimeNowProvider ?? (() => DateTime.Now),
|
||||
requestedAt,
|
||||
maxReservationTimeSpan,
|
||||
mailAddress,
|
||||
code);
|
||||
}
|
||||
|
@ -81,9 +82,6 @@ namespace TINK.Model.State
|
|||
string p_strMailAddress,
|
||||
string p_strCode)
|
||||
{
|
||||
// Todo: Handle p_oFrom == null here.
|
||||
// Todo: Clearify question: What to do if code changes form one value to another? This should never happen.
|
||||
// Todo: Clearify question: What to do if from time changes form one value to another? This should never happen.
|
||||
_InUseState = new StateOccupiedInfo(
|
||||
p_oBookedAt,
|
||||
p_strMailAddress,
|
||||
|
@ -114,7 +112,7 @@ namespace TINK.Model.State
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Date of request/ bookeing action.
|
||||
/// Date of request/ booking action.
|
||||
/// </summary>
|
||||
public DateTime? From
|
||||
{
|
||||
|
@ -125,6 +123,14 @@ namespace TINK.Model.State
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Time span for which a bike can be reserved.
|
||||
/// </summary>
|
||||
public TimeSpan? MaxReservationTimeSpan =>
|
||||
_InUseState is StateRequestedInfo reserved
|
||||
? reserved.MaxReservationTimeSpan
|
||||
: (TimeSpan?)null;
|
||||
|
||||
/// <summary>
|
||||
/// Mail address.
|
||||
/// </summary>
|
||||
|
@ -152,7 +158,7 @@ namespace TINK.Model.State
|
|||
/// <summary>
|
||||
/// Tries update
|
||||
/// </summary>
|
||||
/// <returns>True if reservation span has not exeeded and state remains reserved, false otherwise.</returns>
|
||||
/// <returns>True if reservation span has not exceeded and state remains reserved, false otherwise.</returns>
|
||||
/// <todo>Implement logging of time stamps.</todo>
|
||||
public bool GetIsStillReserved(out TimeSpan? p_oRemainingTime)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace TINK.Model.State
|
|||
{
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Manges the state of a bike.
|
||||
/// </summary>
|
||||
|
@ -90,19 +90,18 @@ namespace TINK.Model.State
|
|||
return new StateInfo(state != null ? state.Value == InUseStateEnum.FeedbackPending : false);
|
||||
|
||||
case InUseStateEnum.Reserved:
|
||||
// Todo: Handle p_oFrom == null here.
|
||||
// Todo: Handle p_oDuration == null here.
|
||||
return new StateInfo(
|
||||
dateTimeNowProvider,
|
||||
state.From.Value,
|
||||
state.From.HasValue ? dateTimeNowProvider : (() => DateTime.MaxValue),
|
||||
state.From.HasValue ? state.From.Value : DateTime.MaxValue,
|
||||
state.MaxReservationTimeSpan ?? StateRequestedInfo.UNKNOWNMAXRESERVATIONTIMESPAN,
|
||||
state.MailAddress,
|
||||
state.Code);
|
||||
|
||||
|
||||
case InUseStateEnum.Booked:
|
||||
// Todo: Handle p_oFrom == null here.
|
||||
// Todo: Clearify question: What to do if code changes form one value to another? This should never happen.
|
||||
// Todo: Clearify question: What to do if from time changes form one value to another? This should never happen.
|
||||
// Todo: Clarify question: What to do if code changes form one value to another? This should never happen.
|
||||
// Todo: Clarify question: What to do if from time changes form one value to another? This should never happen.
|
||||
return new StateInfo(
|
||||
state.From.Value,
|
||||
state.MailAddress,
|
||||
|
@ -139,7 +138,7 @@ namespace TINK.Model.State
|
|||
var l_oStateRequested = value as StateRequestedInfo;
|
||||
if (l_oStateRequested != null)
|
||||
{
|
||||
_StateInfo = new StateInfo(_DateTimeNowProvider, l_oStateRequested.From, l_oStateRequested.MailAddress, l_oStateRequested.Code);
|
||||
_StateInfo = new StateInfo(_DateTimeNowProvider, l_oStateRequested.From, l_oStateRequested.MaxReservationTimeSpan, l_oStateRequested.MailAddress, l_oStateRequested.Code);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -158,7 +157,7 @@ namespace TINK.Model.State
|
|||
/// <summary>
|
||||
/// Checks and updates state if required.
|
||||
/// </summary>
|
||||
/// <returns>Value indicating wheter state has changed</returns>
|
||||
/// <returns>Value indicating whether state has changed</returns>
|
||||
public void UpdateOnTimeElapsed()
|
||||
{
|
||||
switch (_StateInfo.Value)
|
||||
|
@ -172,7 +171,7 @@ namespace TINK.Model.State
|
|||
// Check if maximum reserved time has elapsed.
|
||||
if (!_StateInfo.GetIsStillReserved(out _RemainingTime))
|
||||
{
|
||||
// Time has elapsed, switch state to disposable and notfiy client
|
||||
// Time has elapsed, switch state to disposable and notify client
|
||||
_StateInfo = new StateInfo();
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(State)));
|
||||
return;
|
||||
|
@ -181,15 +180,17 @@ namespace TINK.Model.State
|
|||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(RemainingTime)));
|
||||
}
|
||||
|
||||
/// <summary> Updates state from webserver. </summary>
|
||||
/// <summary> Updates state from web server. </summary>
|
||||
/// <param name="state">State of the bike.</param>
|
||||
/// <param name="from">Date time when bike was reserved/ booked.</param>
|
||||
/// <param name="mailAddress">Mailaddress of the one which reserved/ booked.</param>
|
||||
/// <param name="maxReservationTimeSpan">Time span for which a bike can be reserved.</param>
|
||||
/// <param name="mailAddress">Mail address of the one which reserved/ booked.</param>
|
||||
/// <param name="code">Booking code if bike is booked or reserved.</param>
|
||||
/// <param name="supressNotifyPropertyChanged">Controls whether notify property changed events are fired or not.</param>
|
||||
public void Load(
|
||||
InUseStateEnum state,
|
||||
DateTime? from = null,
|
||||
TimeSpan? maxReservationTimeSpan = null,
|
||||
string mailAddress = null,
|
||||
string code = null,
|
||||
Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel notifyLevel = Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel.All)
|
||||
|
@ -206,11 +207,10 @@ namespace TINK.Model.State
|
|||
break;
|
||||
|
||||
case InUseStateEnum.Reserved:
|
||||
// Todo: Handle p_oFrom == null here.
|
||||
// Todo: Handle p_oDuration == null here.
|
||||
_StateInfo = new StateInfo(
|
||||
_DateTimeNowProvider,
|
||||
from.Value,
|
||||
from.HasValue ? _DateTimeNowProvider : (() => DateTime.MaxValue),
|
||||
from.HasValue ? from.Value : DateTime.MaxValue,
|
||||
maxReservationTimeSpan.HasValue ? maxReservationTimeSpan.Value : StateRequestedInfo.UNKNOWNMAXRESERVATIONTIMESPAN,
|
||||
mailAddress,
|
||||
code);
|
||||
|
||||
|
@ -245,7 +245,7 @@ namespace TINK.Model.State
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// If bike is reserved time raimaining while bike stays reserved, null otherwise.
|
||||
/// If bike is reserved time remaining while bike stays reserved, null otherwise.
|
||||
/// </summary>
|
||||
public TimeSpan? RemainingTime
|
||||
{
|
||||
|
@ -261,7 +261,7 @@ namespace TINK.Model.State
|
|||
|
||||
if (_RemainingTime.HasValue == false)
|
||||
{
|
||||
// Value was not yet querried.
|
||||
// Value was not yet queried.
|
||||
// Do query before returning object.
|
||||
_StateInfo.GetIsStillReserved(out _RemainingTime);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
|
@ -10,51 +10,63 @@ namespace TINK.Model.State
|
|||
[DataContract]
|
||||
public sealed class StateRequestedInfo : BaseState, IBaseState, INotAvailableState
|
||||
{
|
||||
// Maximum time while reserving request is kept.
|
||||
public static readonly TimeSpan MaximumReserveTime = new TimeSpan(0, 15, 0); // 15 mins
|
||||
/// <summary>
|
||||
/// Holds the value if time span is not known.
|
||||
/// </summary>
|
||||
/// <remarks> Default value see <see cref="TextToTypeHelper.DEFAULTMAXRESERVATIONTIMESPAN"/>. </remarks>
|
||||
public static TimeSpan UNKNOWNMAXRESERVATIONTIMESPAN = TimeSpan.Zero;
|
||||
|
||||
// Reference to date time provider.
|
||||
private Func<DateTime> _DateTimeNowProvider;
|
||||
private readonly Func<DateTime> _DateTimeNowProvider;
|
||||
|
||||
/// <summary>
|
||||
/// Time span for which a bike can be reserved. Default value is zero.
|
||||
/// </summary>
|
||||
public TimeSpan MaxReservationTimeSpan { get; private set; } = UNKNOWNMAXRESERVATIONTIMESPAN;
|
||||
|
||||
/// <summary>
|
||||
/// Prevents an invalid instance to be created.
|
||||
/// Used by serializer only.
|
||||
/// </summary>
|
||||
private StateRequestedInfo() : base(InUseStateEnum.Reserved)
|
||||
internal StateRequestedInfo() : base(InUseStateEnum.Reserved)
|
||||
{
|
||||
// Is called in context of JSON deserialization.
|
||||
_DateTimeNowProvider = () => DateTime.Now;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reservation performed with other device/ before start of app.
|
||||
/// Date time info when bike was reserved has been received from webserver.
|
||||
/// Reservation performed with other device/ before start of app.
|
||||
/// Date time info when bike was reserved has been received from web server.
|
||||
/// </summary>
|
||||
/// <param name="p_oRemainingTime">Time span which holds duration how long bike still will be reserved.</param>
|
||||
/// <param name="maxReservationTimeSpan">Time span for which a bike can be reserved.</param>
|
||||
[JsonConstructor]
|
||||
private StateRequestedInfo(
|
||||
InUseStateEnum Value,
|
||||
DateTime From,
|
||||
TimeSpan maxReservationTimeSpan,
|
||||
string MailAddress,
|
||||
string Code) : this(() => DateTime.Now, From, MailAddress, Code)
|
||||
string Code) : this(() => DateTime.Now, From, maxReservationTimeSpan, MailAddress, Code)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reservation performed with other device/ before start of app.
|
||||
/// Date time info when bike was reserved has been received from webserver.
|
||||
/// Date time info when bike was reserved has been received from web server.
|
||||
/// </summary>
|
||||
/// <param name="dateTimeNowProvider">
|
||||
/// Used to to provide current date time information for potential calls of <seealso cref="GetIsStillReserved"/>.
|
||||
/// Not used to calculate remaining time because this duration whould always be shorter as the one received from webserver.
|
||||
/// Used to provide current date time information for potential calls of <seealso cref="GetIsStillReserved"/>.
|
||||
/// Not used to calculate remaining time because this duration would always be shorter as the one received from web server.
|
||||
/// </param>
|
||||
/// <param name="maxReservationTimeSpan">Time span for which a bike can be reserved.</param>
|
||||
public StateRequestedInfo(
|
||||
Func<DateTime> dateTimeNowProvider,
|
||||
DateTime from,
|
||||
TimeSpan maxReservationTimeSpan,
|
||||
string mailAddress,
|
||||
string code) : base(InUseStateEnum.Reserved)
|
||||
{
|
||||
_DateTimeNowProvider = dateTimeNowProvider ?? (() => DateTime.Now);
|
||||
MaxReservationTimeSpan = maxReservationTimeSpan;
|
||||
From = from;
|
||||
MailAddress = mailAddress;
|
||||
Code = code;
|
||||
|
@ -63,34 +75,28 @@ namespace TINK.Model.State
|
|||
/// <summary>
|
||||
/// Tries update
|
||||
/// </summary>
|
||||
/// <returns>True if reservation span has not exeeded and state remains reserved, false otherwise.</returns>
|
||||
/// <returns>True if reservation span has not exceeded and state remains reserved, false otherwise.</returns>
|
||||
/// <todo>Implement logging of time stamps.</todo>
|
||||
public bool GetIsStillReserved(out TimeSpan? p_oRemainingTime)
|
||||
public bool GetIsStillReserved(out TimeSpan? remainingTime)
|
||||
{
|
||||
var l_oTimeReserved = _DateTimeNowProvider().Subtract(From);
|
||||
if (l_oTimeReserved > MaximumReserveTime)
|
||||
var timeReserved = _DateTimeNowProvider().Subtract(From);
|
||||
if (timeReserved > MaxReservationTimeSpan)
|
||||
|
||||
{
|
||||
// Reservation has elapsed. To not update remaining time.
|
||||
p_oRemainingTime = null;
|
||||
// Reservation has elapsed. Do not update remaining time.
|
||||
remainingTime = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
p_oRemainingTime = MaximumReserveTime - l_oTimeReserved;
|
||||
remainingTime = MaxReservationTimeSpan - timeReserved;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// State reserved.
|
||||
/// Setter exists only for serialization purposes.
|
||||
/// State reserved.
|
||||
/// </summary>
|
||||
public override InUseStateEnum Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return InUseStateEnum.Reserved;
|
||||
}
|
||||
}
|
||||
public override InUseStateEnum Value =>
|
||||
InUseStateEnum.Reserved;
|
||||
|
||||
/// <summary>
|
||||
/// Date time when bike was reserved.
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TINK.MultilingualResources;
|
||||
using TINK.Repository.Exception;
|
||||
using Xamarin.Essentials;
|
||||
|
||||
namespace TINK.Model
|
||||
|
@ -692,6 +693,21 @@ namespace TINK.Model
|
|||
AppResources.ChangeLog_3_0_365_MK_SB,
|
||||
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||
},
|
||||
{
|
||||
new Version(3, 0, 366),
|
||||
AppResources.ChangeLog_3_0_366_MK_SB,
|
||||
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||
},
|
||||
{
|
||||
new Version(3, 0, 368),
|
||||
string.Format("{0} <br /> {1}", AppResources.ChangeLog_PackageUpdates, AppResources.ChangeLog_MinorBugFixes),
|
||||
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||
},
|
||||
{
|
||||
new Version(3, 0, 369),
|
||||
AppResources.ChangeLog_3_0_369_MK_SB,
|
||||
new List<AppFlavor> { AppFlavor.MeinKonrad, AppFlavor.ShareeBike }
|
||||
},
|
||||
};
|
||||
|
||||
/// <summary> Manges the whats new information.</summary>
|
||||
|
|
179
TINKLib/MultilingualResources/AppResources.Designer.cs
generated
|
@ -1,4 +1,4 @@
|
|||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
|
@ -96,24 +96,6 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Sent e-mail.
|
||||
/// </summary>
|
||||
public static string ActionContactMailAppReleated {
|
||||
get {
|
||||
return ResourceManager.GetString("ActionContactMailAppReleated", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Submit rating.
|
||||
/// </summary>
|
||||
public static string ActionContactRate {
|
||||
get {
|
||||
return ResourceManager.GetString("ActionContactRate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Give feedback.
|
||||
/// </summary>
|
||||
|
@ -204,6 +186,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select another station.
|
||||
/// </summary>
|
||||
public static string ActionSelectAnotherStation {
|
||||
get {
|
||||
return ResourceManager.GetString("ActionSelectAnotherStation", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select station.
|
||||
/// </summary>
|
||||
|
@ -213,6 +204,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to <u>Transfer diagnostic file</u>.
|
||||
/// </summary>
|
||||
public static string ActionSendDiagnosis {
|
||||
get {
|
||||
return ResourceManager.GetString("ActionSendDiagnosis", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Auth. expired.
|
||||
/// </summary>
|
||||
|
@ -803,7 +803,27 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to We have fixed some bugs. Enjoy the ride!.
|
||||
/// Looks up a localized string similar to On the "Select bike" page you can now search and rent several bikes one after the other. Afterwards you will find them under "My bikes"..
|
||||
/// </summary>
|
||||
public static string ChangeLog_3_0_366_MK_SB {
|
||||
get {
|
||||
return ResourceManager.GetString("ChangeLog_3_0_366_MK_SB", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to We have re-designed the contact page:
|
||||
/// <ul><li>Please contact the customer support immediately in case of problems with the bike rental!
|
||||
///</li><li>To diagnose a problem, you can send us your app usage data via "Transfer diagnostic file". Without your active sending we do not record any of your data!</li></ul>.
|
||||
/// </summary>
|
||||
public static string ChangeLog_3_0_369_MK_SB {
|
||||
get {
|
||||
return ResourceManager.GetString("ChangeLog_3_0_369_MK_SB", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to - We have fixed a few minor bugs. Enjoy the ride!.
|
||||
/// </summary>
|
||||
public static string ChangeLog_MinorBugFixes {
|
||||
get {
|
||||
|
@ -812,7 +832,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to A few small things have been changed in the design..
|
||||
/// Looks up a localized string similar to - A few small things have been changed in the design..
|
||||
/// </summary>
|
||||
public static string ChangeLog_MinorDesignImprovements {
|
||||
get {
|
||||
|
@ -821,7 +841,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Minor improvements..
|
||||
/// Looks up a localized string similar to - Minor improvements..
|
||||
/// </summary>
|
||||
public static string ChangeLog_MinorImprovements {
|
||||
get {
|
||||
|
@ -830,7 +850,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Software packages were updated..
|
||||
/// Looks up a localized string similar to - Software packages were updated..
|
||||
/// </summary>
|
||||
public static string ChangeLog_PackageUpdates {
|
||||
get {
|
||||
|
@ -1707,6 +1727,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Location query failed.
|
||||
/// </summary>
|
||||
public static string ErrorQueryGeolocation {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorQueryGeolocation", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Your mobile device does not connect to the bike lock. Please step as close as possible to the bike and try again..
|
||||
/// </summary>
|
||||
|
@ -1727,7 +1756,8 @@ namespace TINK.MultilingualResources {
|
|||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to End rental at an unknown location is not possible.
|
||||
///Getting geolocation failed..
|
||||
///Make sure you have granted location sharing permission and your location services are enabled.
|
||||
///Try again!.
|
||||
/// </summary>
|
||||
public static string ErrorReturnBikeLockClosedGetGPSExceptionMessage {
|
||||
get {
|
||||
|
@ -2004,7 +2034,16 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Contact operator?.
|
||||
/// Looks up a localized string similar to Customer support.
|
||||
/// </summary>
|
||||
public static string MarkingContactCustomerSupportTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("MarkingContactCustomerSupportTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to First select the station whose operator you want to contact..
|
||||
/// </summary>
|
||||
public static string MarkingContactNoStationInfoAvailableNoButton {
|
||||
get {
|
||||
|
@ -2103,7 +2142,16 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bike ID including prefix.
|
||||
/// Looks up a localized string similar to Search.
|
||||
/// </summary>
|
||||
public static string MarkingFindBikeButton {
|
||||
get {
|
||||
return ResourceManager.GetString("MarkingFindBikeButton", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bike id.
|
||||
/// </summary>
|
||||
public static string MarkingFindBikeLabel {
|
||||
get {
|
||||
|
@ -2111,6 +2159,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You search a .
|
||||
/// </summary>
|
||||
public static string MarkingFindBikeTypeOfBikeText {
|
||||
get {
|
||||
return ResourceManager.GetString("MarkingFindBikeTypeOfBikeText", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Menu.
|
||||
/// </summary>
|
||||
|
@ -2129,6 +2186,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Last selected station.
|
||||
/// </summary>
|
||||
public static string MarkingLastSelectedStation {
|
||||
get {
|
||||
return ResourceManager.GetString("MarkingLastSelectedStation", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lock control.
|
||||
/// </summary>
|
||||
|
@ -2292,6 +2358,15 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Operator.
|
||||
/// </summary>
|
||||
public static string MarkingOperator {
|
||||
get {
|
||||
return ResourceManager.GetString("MarkingOperator", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Is bike okay?.
|
||||
/// </summary>
|
||||
|
@ -2662,6 +2737,24 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You can search only the bikes of the selected bike type. Change your selection on the "Bike locations" page..
|
||||
/// </summary>
|
||||
public static string MessageBikeTypeInfoText {
|
||||
get {
|
||||
return ResourceManager.GetString("MessageBikeTypeInfoText", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Selected bike type.
|
||||
/// </summary>
|
||||
public static string MessageBikeTypeInfoTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("MessageBikeTypeInfoTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Connection error when canceling the reservation!.
|
||||
/// </summary>
|
||||
|
@ -2921,15 +3014,6 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Feedback to app development?.
|
||||
/// </summary>
|
||||
public static string MessageRateMail {
|
||||
get {
|
||||
return ResourceManager.GetString("MessageRateMail", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Connection error when renting the bike!.
|
||||
/// </summary>
|
||||
|
@ -3030,16 +3114,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0}-app releated request.
|
||||
/// </summary>
|
||||
public static string MiscContactMailAppReleatedSubject {
|
||||
get {
|
||||
return ResourceManager.GetString("MiscContactMailAppReleatedSubject", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bike ID including prefix e.g. TR15.
|
||||
/// Looks up a localized string similar to Prefix and No., e.g. TR15.
|
||||
/// </summary>
|
||||
public static string PlaceholderFindBike {
|
||||
get {
|
||||
|
@ -3138,9 +3213,9 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to I hereby consent to the transmission of my log file.
|
||||
/// Looks up a localized string similar to I hereby consent to the transmission of my diagnostic file.
|
||||
///
|
||||
///The log file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and then deleted..
|
||||
///The diagnostic file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and is then deleted..
|
||||
/// </summary>
|
||||
public static string QuestionSupportmailAttachment {
|
||||
get {
|
||||
|
@ -3248,7 +3323,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Code {0}, location {1}, max. reservation time of {2} min. expired..
|
||||
/// Looks up a localized string similar to Code {0}, location {1}, max. reservation time expired..
|
||||
/// </summary>
|
||||
public static string StatusTextReservationExpiredCodeLocationMaxReservationTime {
|
||||
get {
|
||||
|
@ -3266,7 +3341,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Code {0}, max. reservation time of {1} min. expired..
|
||||
/// Looks up a localized string similar to Code {0}, max. reservation time expired..
|
||||
/// </summary>
|
||||
public static string StatusTextReservationExpiredCodeMaxReservationTime {
|
||||
get {
|
||||
|
@ -3284,7 +3359,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Location {0}, max. reservation time of {1} min. expired..
|
||||
/// Looks up a localized string similar to Location {0}, max. reservation time expired..
|
||||
/// </summary>
|
||||
public static string StatusTextReservationExpiredLocationMaxReservationTime {
|
||||
get {
|
||||
|
@ -3302,7 +3377,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max. reservation time of {0} min. expired..
|
||||
/// Looks up a localized string similar to Max. reservation time expired..
|
||||
/// </summary>
|
||||
public static string StatusTextReservationExpiredMaximumReservationTime {
|
||||
get {
|
||||
|
@ -3329,7 +3404,7 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0} request.
|
||||
/// Looks up a localized string similar to {0}-request: station {1}.
|
||||
/// </summary>
|
||||
public static string SupportmailSubjectOperatormail {
|
||||
get {
|
||||
|
|
|
@ -157,9 +157,6 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
|
|||
<data name="MessageContactMail" xml:space="preserve">
|
||||
<value>Fragen? Hinweise?</value>
|
||||
</data>
|
||||
<data name="MessageRateMail" xml:space="preserve">
|
||||
<value>Rückmeldung an die App-Entwicklung?</value>
|
||||
</data>
|
||||
<data name="MessageWaring" xml:space="preserve">
|
||||
<value>Warnung</value>
|
||||
</data>
|
||||
|
@ -170,9 +167,9 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
|
|||
<value>Ja</value>
|
||||
</data>
|
||||
<data name="QuestionSupportmailAttachment" xml:space="preserve">
|
||||
<value>Hiermit stimme ich der Übermittlung meiner Protokolldatei zu.
|
||||
<value>Hiermit stimme ich der Übermittlung meiner Diagnosedatei zu.
|
||||
|
||||
Die Protokolldatei enthält Ihre App-Nutzungsdaten sowie Systeminformationen. Die Daten werden ausschließlich für Diagnosezwecke bzw. Verbesserung der App verwendet und werden anschließend gelöscht.</value>
|
||||
Die Diagnosedatei enthält Ihre App-Nutzungsdaten sowie Systeminformationen. Die Daten werden ausschließlich für Diagnosezwecke bzw. Verbesserung der App verwendet und werden anschließend gelöscht.</value>
|
||||
</data>
|
||||
<data name="QuestionTitle" xml:space="preserve">
|
||||
<value>Frage</value>
|
||||
|
@ -182,7 +179,7 @@ Die Protokolldatei enthält Ihre App-Nutzungsdaten sowie Systeminformationen. Di
|
|||
Bitte melden Sie sich erneut an.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeMaxReservationTime" xml:space="preserve">
|
||||
<value>Code ist {0}, max. Reservierungszeit von {1} Min. abgelaufen.
|
||||
<value>Code ist {0}, max. Reservierungszeit abgelaufen.
|
||||
</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeRemaining" xml:space="preserve">
|
||||
|
@ -199,13 +196,13 @@ Bitte melden Sie sich erneut an.</value>
|
|||
<value>Noch {0} Min. reserviert.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredMaximumReservationTime" xml:space="preserve">
|
||||
<value>Max. Reservierungszeit von {0} Min. abgelaufen.</value>
|
||||
<value>Max. Reservierungszeit abgelaufen.</value>
|
||||
</data>
|
||||
<data name="StatusTextBookedCodeSince" xml:space="preserve">
|
||||
<value>Code ist {0}, gemietet seit {1}.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredLocationMaxReservationTime" xml:space="preserve">
|
||||
<value>Standort {0}, max. Reservierungszeit von {1} Min. abgelaufen.
|
||||
<value>Standort {0}, max. Reservierungszeit abgelaufen.
|
||||
</value>
|
||||
</data>
|
||||
<data name="StatusTextAvailable" xml:space="preserve">
|
||||
|
@ -216,7 +213,7 @@ Bitte melden Sie sich erneut an.</value>
|
|||
</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeLocationMaxReservationTime" xml:space="preserve">
|
||||
<value>Code ist {0}, Standort {1}, max. Reservierungszeit von {2} Min. abgelaufen.
|
||||
<value>Code ist {0}, Standort {1}, max. Reservierungszeit abgelaufen.
|
||||
</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeLocationReservationTime" xml:space="preserve">
|
||||
|
@ -248,9 +245,6 @@ Bitte melden Sie sich erneut an.</value>
|
|||
<data name="MarkingLoginPasswordPlaceholder" xml:space="preserve">
|
||||
<value>Passwort</value>
|
||||
</data>
|
||||
<data name="ActionContactRate" xml:space="preserve">
|
||||
<value>Bewertung abgeben</value>
|
||||
</data>
|
||||
<data name="MarkingLoginInstructions" xml:space="preserve">
|
||||
<value>Anleitung TINK Räder</value>
|
||||
</data>
|
||||
|
@ -605,7 +599,7 @@ Layout Anzeige Radnamen und nummern verbessert.</value>
|
|||
<value>Bitte Anmelden, um Räder zu reservieren! <font color="blue"><u>Hier</u></font> tippen, um auf Anmeldeseite zu wechseln.</value>
|
||||
</data>
|
||||
<data name="MarkingContactNoStationInfoAvailableNoButton" xml:space="preserve">
|
||||
<value>Betreiber kontaktieren?</value>
|
||||
<value>Wählen Sie zunächst die Station, zu deren Betreiber Sie Kontakt aufnehmen möchten.</value>
|
||||
</data>
|
||||
<data name="ChangeLog3_0_241" xml:space="preserve">
|
||||
<value>Auf der Kontaktseite werden Kontaktinformationen betreiberspezifisch angezeigt.</value>
|
||||
|
@ -907,13 +901,6 @@ Kleinere Fehlerbehebungen.
|
|||
<data name="ActionGiveFeedback" xml:space="preserve">
|
||||
<value>Rückmeldung geben</value>
|
||||
</data>
|
||||
<data name="ActionContactMailAppReleated" xml:space="preserve">
|
||||
<value>E-Mail senden</value>
|
||||
</data>
|
||||
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
|
||||
<value>{0}-App Anfrage</value>
|
||||
<comment>Subject of contact mail to ("Feedback about the app").</comment>
|
||||
</data>
|
||||
<data name="MessageReservingBikeErrorConnectionTitle" xml:space="preserve">
|
||||
<value>Verbingungsfehler beim Reservieren des Rads!</value>
|
||||
</data>
|
||||
|
@ -978,7 +965,7 @@ Kleinere Fehlerbehebungen.
|
|||
<value>Die App hat ein neues Design! --- Sie sind Beta-Tester? Geben Sie uns jederzeit hilfreiche Rückmeldung über 'Kontakt - Rückmeldung zur App'. Sie sind noch kein Beta-Tester? Werden Sie es und erhalten Sie tolle neue Features vor allen anderen!</value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorBugFixes" xml:space="preserve">
|
||||
<value>Wir haben einige Fehler behoben. Genießen Sie die Fahrt!</value>
|
||||
<value>- Wir haben ein paar kleine Fehler behoben. Genießen Sie die Fahrt!</value>
|
||||
</data>
|
||||
<data name="ChangeLog3_0_338_LB_MK" xml:space="preserve">
|
||||
<value>Neben kleineren Fehlerbehebungen haben wir die Kontaktaufnahme vereinfacht:
|
||||
|
@ -998,7 +985,7 @@ Außerdem: Kleine Grafiken lassen auf einen Blick erkennen um was für einen Rad
|
|||
<value>{0}-App Anfrage</value>
|
||||
</data>
|
||||
<data name="SupportmailSubjectOperatormail" xml:space="preserve">
|
||||
<value>{0} Anfrage</value>
|
||||
<value>{0}-Anfrage: Station {1}</value>
|
||||
</data>
|
||||
<data name="QuestionSupportmailAnswerNo" xml:space="preserve">
|
||||
<value>Nein, Datei nicht anhängen</value>
|
||||
|
@ -1007,7 +994,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-ID inklusive Präfix, z.B. TR15</value>
|
||||
<value>Präfix und Nr., 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!
|
||||
|
@ -1018,7 +1005,7 @@ Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben:
|
|||
<value>Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben: im Menü ganz unten. Bitte aktualisieren Sie die App regelmäßig, um in Funktionalität und Design auf dem neuesten Stand zu sein!</value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorDesignImprovements" xml:space="preserve">
|
||||
<value>Es wurden ein paar Kleinigkeiten im Design verändert.</value>
|
||||
<value>- Es wurden ein paar Kleinigkeiten im Design verändert.</value>
|
||||
</data>
|
||||
<data name="MarkingContactSupportBusy" xml:space="preserve">
|
||||
<value>{0} <font color="gray"><u>kontaktieren</u></font>.</value>
|
||||
|
@ -1095,7 +1082,7 @@ Probieren Sie es aus!</value>
|
|||
</ul></value>
|
||||
</data>
|
||||
<data name="ChangeLog_PackageUpdates" xml:space="preserve">
|
||||
<value>Softwarepakete wurden aktualisiert.</value>
|
||||
<value>- Softwarepakete wurden aktualisiert.</value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_355_MK_SB_iOS" xml:space="preserve">
|
||||
<value>Bluetooth-Kommunikation verbessert.</value>
|
||||
|
@ -1113,7 +1100,7 @@ Probieren Sie es aus!</value>
|
|||
<value>Information</value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorImprovements" xml:space="preserve">
|
||||
<value>Kleine Verbesserungen.</value>
|
||||
<value>- Kleine Verbesserungen.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockBoldStatusIsUnknownMessage" xml:space="preserve">
|
||||
<value>Das Schloss konnte nicht korrekt geöffnet werden. Bitte versuchen Sie es erneut.
|
||||
|
@ -1145,7 +1132,8 @@ Fehler beim Start der Standortabfrage!</value>
|
|||
</data>
|
||||
<data name="ErrorReturnBikeLockClosedGetGPSExceptionMessage" xml:space="preserve">
|
||||
<value>Beenden der Miete an unbekanntem Standort is nicht möglich.
|
||||
Fehler bei der Standortabfrage!</value>
|
||||
Stellen Sie sicher, dass Sie die Erlaubnis zur Standortfreigabe erteilt haben und Ihre Standortdienste aktiviert sind.
|
||||
Versuchen Sie erneut!</value>
|
||||
</data>
|
||||
<data name="Error_ReturnBike_Station_Location_Message" xml:space="preserve">
|
||||
<value>Wir konnten das Rad keiner Station zuordnen. Dazu benötigen wir Ihre Standortinformationen, während Sie direkt neben dem Rad stehen. Nur dann kann Ihre Miete beendet werden!
|
||||
|
@ -1171,7 +1159,7 @@ Außerdem:<br/>
|
|||
- Paketaktualisierungen</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeLabel" xml:space="preserve">
|
||||
<value>Rad-ID inklusive Präfix</value>
|
||||
<value>Rad-ID</value>
|
||||
</data>
|
||||
<data name="MarkingSearchBike" xml:space="preserve">
|
||||
<value>Rad suchen</value>
|
||||
|
@ -1188,4 +1176,42 @@ Außerdem:<br/>
|
|||
<data name="ChangeLog_3_0_365_MK_SB" xml:space="preserve">
|
||||
<value>Kleine Verbesserungen in Design und Performance.</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeTypeOfBikeText" xml:space="preserve">
|
||||
<value>Sie suchen ein </value>
|
||||
</data>
|
||||
<data name="MessageBikeTypeInfoText" xml:space="preserve">
|
||||
<value>Sie können nur die Fahrräder des ausgewählten Fahrradtyps suchen. Ändern Sie Ihre Auswahl auf der Seite "Radstandorte".</value>
|
||||
</data>
|
||||
<data name="MessageBikeTypeInfoTitle" xml:space="preserve">
|
||||
<value>Ausgewählter Fahrradtyp</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeButton" xml:space="preserve">
|
||||
<value>Suchen</value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_366_MK_SB" xml:space="preserve">
|
||||
<value>Auf der Seite "Rad auswählen" können Sie nun nacheinander mehrere Räder suchen und mieten. Im Anschluss finden Sie diese unter "Meine Räder".</value>
|
||||
</data>
|
||||
<data name="ErrorQueryGeolocation" xml:space="preserve">
|
||||
<value>Standortabfrage fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="MarkingContactCustomerSupportTitle" xml:space="preserve">
|
||||
<value>Kundensupport</value>
|
||||
</data>
|
||||
<data name="ActionSelectAnotherStation" xml:space="preserve">
|
||||
<value>Andere Station auswählen</value>
|
||||
</data>
|
||||
<data name="ActionSendDiagnosis" xml:space="preserve">
|
||||
<value><u>Diagnosedatei übermitteln</u></value>
|
||||
</data>
|
||||
<data name="MarkingLastSelectedStation" xml:space="preserve">
|
||||
<value>Zuletzt ausgewählte Station</value>
|
||||
</data>
|
||||
<data name="MarkingOperator" xml:space="preserve">
|
||||
<value>Betreiber</value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_369_MK_SB" xml:space="preserve">
|
||||
<value>Wir haben die Kontakt-Seite neu gestaltet:
|
||||
<ul><li>Bitte kontaktieren Sie bei Problemen bei der Fahrradmiete umgehend den Kundensupport!
|
||||
</li><li>Für die Diagnose eines Problems können Sie über "Diagnosedatei übermitteln" Ihre App-Nutzungsdaten an uns senden. Ohne Ihr aktives Zusenden zeichnen wir keine Ihrer Daten auf!</li></ul></value>
|
||||
</data>
|
||||
</root>
|
|
@ -248,9 +248,6 @@ Please log in again.</value>
|
|||
<data name="MessagePhoneMail" xml:space="preserve">
|
||||
<value>Urgent questions?</value>
|
||||
</data>
|
||||
<data name="MessageRateMail" xml:space="preserve">
|
||||
<value>Feedback to app development?</value>
|
||||
</data>
|
||||
<data name="MessageWaring" xml:space="preserve">
|
||||
<value>Warning</value>
|
||||
</data>
|
||||
|
@ -267,9 +264,9 @@ Please log in again.</value>
|
|||
<value>{0} request</value>
|
||||
</data>
|
||||
<data name="QuestionSupportmailAttachment" xml:space="preserve">
|
||||
<value>I hereby consent to the transmission of my log file.
|
||||
<value>I hereby consent to the transmission of my diagnostic file.
|
||||
|
||||
The log file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and then deleted.</value>
|
||||
The diagnostic file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and is then deleted.</value>
|
||||
</data>
|
||||
<data name="QuestionSupportmailSubject" xml:space="preserve">
|
||||
<value>Does your request/comment relate to the {0}-app or to a more general subject?</value>
|
||||
|
@ -299,7 +296,7 @@ The log file contains your app usage data as well as system information. The dat
|
|||
<value>Rented since {0}.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredMaximumReservationTime" xml:space="preserve">
|
||||
<value>Max. reservation time of {0} min. expired.</value>
|
||||
<value>Max. reservation time expired.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeRemaining" xml:space="preserve">
|
||||
<value>Code {0}, still {1} min. reserved.</value>
|
||||
|
@ -308,7 +305,7 @@ The log file contains your app usage data as well as system information. The dat
|
|||
<value>Still {0} min. reserved.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeMaxReservationTime" xml:space="preserve">
|
||||
<value>Code {0}, max. reservation time of {1} min. expired.</value>
|
||||
<value>Code {0}, max. reservation time expired.</value>
|
||||
</data>
|
||||
<data name="StatusTextAvailable" xml:space="preserve">
|
||||
<value>Available.</value>
|
||||
|
@ -317,20 +314,17 @@ The log file contains your app usage data as well as system information. The dat
|
|||
<value>Code {0}, location {1}, rented since {2}.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeLocationMaxReservationTime" xml:space="preserve">
|
||||
<value>Code {0}, location {1}, max. reservation time of {2} min. expired.</value>
|
||||
<value>Code {0}, location {1}, max. reservation time expired.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredCodeLocationReservationTime" xml:space="preserve">
|
||||
<value>Code {0}, location {1}, still {2} min. reserved.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredLocationMaxReservationTime" xml:space="preserve">
|
||||
<value>Location {0}, max. reservation time of {1} min. expired.</value>
|
||||
<value>Location {0}, max. reservation time expired.</value>
|
||||
</data>
|
||||
<data name="StatusTextReservationExpiredLocationReservationTime" xml:space="preserve">
|
||||
<value>Location {0}, still {1} min. reserved.</value>
|
||||
</data>
|
||||
<data name="ActionContactRate" xml:space="preserve">
|
||||
<value>Submit rating</value>
|
||||
</data>
|
||||
<data name="ActionLoginLogin" xml:space="preserve">
|
||||
<value>Login</value>
|
||||
</data>
|
||||
|
@ -714,7 +708,7 @@ Layout of bike names and id display improved.</value>
|
|||
<value>Find bike by id functionality added.</value>
|
||||
</data>
|
||||
<data name="MarkingContactNoStationInfoAvailableNoButton" xml:space="preserve">
|
||||
<value>Contact operator?</value>
|
||||
<value>First select the station whose operator you want to contact.</value>
|
||||
</data>
|
||||
<data name="MarkingContactSupport" xml:space="preserve">
|
||||
<value><u>Contact</u> {0}.</value>
|
||||
|
@ -1012,13 +1006,6 @@ Minor bugfixes.</value>
|
|||
<data name="ActionGiveFeedback" xml:space="preserve">
|
||||
<value>Give feedback</value>
|
||||
</data>
|
||||
<data name="ActionContactMailAppReleated" xml:space="preserve">
|
||||
<value>Sent e-mail</value>
|
||||
</data>
|
||||
<data name="MiscContactMailAppReleatedSubject" xml:space="preserve">
|
||||
<value>{0}-app releated request</value>
|
||||
<comment>Subject of contact mail to ("Feedback about the app").</comment>
|
||||
</data>
|
||||
<data name="MessageReservingBikeErrorConnectionTitle" xml:space="preserve">
|
||||
<value>Connection error when reserving the bike!</value>
|
||||
</data>
|
||||
|
@ -1083,7 +1070,7 @@ Minor bugfixes.</value>
|
|||
<value>The app has a new design! --- You are a beta tester? Give us helpful feedback anytime via ‘Contact - Feedback about the App’. Not a beta tester yet? Become one and get great new features before anyone else!</value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorBugFixes" xml:space="preserve">
|
||||
<value>We have fixed some bugs. Enjoy the ride!</value>
|
||||
<value>- We have fixed a few minor bugs. Enjoy the ride!</value>
|
||||
</data>
|
||||
<data name="ChangeLog3_0_338_LB_MK" xml:space="preserve">
|
||||
<value>Besides minor bug fixes we have simplified the contact procedure:
|
||||
|
@ -1103,7 +1090,7 @@ In addition: Small graphics let you see at a glance what type of bike it is.</va
|
|||
<value>{0}-app request</value>
|
||||
</data>
|
||||
<data name="SupportmailSubjectOperatormail" xml:space="preserve">
|
||||
<value>{0} request</value>
|
||||
<value>{0}-request: station {1}</value>
|
||||
</data>
|
||||
<data name="QuestionSupportmailAnswerNo" xml:space="preserve">
|
||||
<value>No, do not attach file</value>
|
||||
|
@ -1112,7 +1099,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>Bike ID including prefix e.g. TR15</value>
|
||||
<value>Prefix and No., 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!
|
||||
|
@ -1123,7 +1110,7 @@ You can now see at a glance which app version you have installed: in the menu at
|
|||
<value>You can now see at a glance which app version you have installed: in the menu at the very bottom. Please update the app regularly to be up to date in functionality and design!</value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorDesignImprovements" xml:space="preserve">
|
||||
<value>A few small things have been changed in the design.</value>
|
||||
<value>- A few small things have been changed in the design.</value>
|
||||
</data>
|
||||
<data name="MarkingContactSupportBusy" xml:space="preserve">
|
||||
<value><font color="gray"><u>Contact</u></font> {0}.</value>
|
||||
|
@ -1198,7 +1185,7 @@ Try it out!</value>
|
|||
</ul></value>
|
||||
</data>
|
||||
<data name="ChangeLog_PackageUpdates" xml:space="preserve">
|
||||
<value>Software packages were updated.</value>
|
||||
<value>- Software packages were updated.</value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_355_MK_SB_iOS" xml:space="preserve">
|
||||
<value>Bluetooth communication improved.</value>
|
||||
|
@ -1220,7 +1207,7 @@ Try it out!</value>
|
|||
<br/>In addition:<ul><li>Software packages were updated.</li><li>Minor bug fixes.</li></ul></value>
|
||||
</data>
|
||||
<data name="ChangeLog_MinorImprovements" xml:space="preserve">
|
||||
<value>Minor improvements.</value>
|
||||
<value>- Minor improvements.</value>
|
||||
</data>
|
||||
<data name="MarkingNoNetworkConnection" xml:space="preserve">
|
||||
<value>Oops, there is no Internet connection.</value>
|
||||
|
@ -1234,7 +1221,8 @@ Start getting geolocation failed.</value>
|
|||
</data>
|
||||
<data name="ErrorReturnBikeLockClosedGetGPSExceptionMessage" xml:space="preserve">
|
||||
<value>End rental at an unknown location is not possible.
|
||||
Getting geolocation failed.</value>
|
||||
Make sure you have granted location sharing permission and your location services are enabled.
|
||||
Try again!</value>
|
||||
</data>
|
||||
<data name="Error_ReturnBike_Station_Location_Message" xml:space="preserve">
|
||||
<value>We could not assign the bike to any station. For this we need your location information while you are standing right next to the bike. Only then your rental can be terminated!
|
||||
|
@ -1260,7 +1248,7 @@ Also:<br/>
|
|||
- Package updates</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeLabel" xml:space="preserve">
|
||||
<value>Bike ID including prefix</value>
|
||||
<value>Bike id</value>
|
||||
</data>
|
||||
<data name="MarkingSearchBike" xml:space="preserve">
|
||||
<value>Search bike</value>
|
||||
|
@ -1277,4 +1265,42 @@ Also:<br/>
|
|||
<data name="ChangeLog_3_0_365_MK_SB" xml:space="preserve">
|
||||
<value>Minor design and performance improvements.</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeTypeOfBikeText" xml:space="preserve">
|
||||
<value>You search a </value>
|
||||
</data>
|
||||
<data name="MessageBikeTypeInfoText" xml:space="preserve">
|
||||
<value>You can search only the bikes of the selected bike type. Change your selection on the "Bike locations" page.</value>
|
||||
</data>
|
||||
<data name="MessageBikeTypeInfoTitle" xml:space="preserve">
|
||||
<value>Selected bike type</value>
|
||||
</data>
|
||||
<data name="MarkingFindBikeButton" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_366_MK_SB" xml:space="preserve">
|
||||
<value>On the "Select bike" page you can now search and rent several bikes one after the other. Afterwards you will find them under "My bikes".</value>
|
||||
</data>
|
||||
<data name="ErrorQueryGeolocation" xml:space="preserve">
|
||||
<value>Location query failed</value>
|
||||
</data>
|
||||
<data name="ActionSelectAnotherStation" xml:space="preserve">
|
||||
<value>Select another station</value>
|
||||
</data>
|
||||
<data name="MarkingContactCustomerSupportTitle" xml:space="preserve">
|
||||
<value>Customer support</value>
|
||||
</data>
|
||||
<data name="MarkingLastSelectedStation" xml:space="preserve">
|
||||
<value>Last selected station</value>
|
||||
</data>
|
||||
<data name="MarkingOperator" xml:space="preserve">
|
||||
<value>Operator</value>
|
||||
</data>
|
||||
<data name="ActionSendDiagnosis" xml:space="preserve">
|
||||
<value><u>Transfer diagnostic file</u></value>
|
||||
</data>
|
||||
<data name="ChangeLog_3_0_369_MK_SB" xml:space="preserve">
|
||||
<value>We have re-designed the contact page:
|
||||
<ul><li>Please contact the customer support immediately in case of problems with the bike rental!
|
||||
</li><li>To diagnose a problem, you can send us your app usage data via "Transfer diagnostic file". Without your active sending we do not record any of your data!</li></ul></value>
|
||||
</data>
|
||||
</root>
|
|
@ -202,10 +202,6 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
|
|||
<source>Questions? Remarks?</source>
|
||||
<target state="translated">Fragen? Hinweise?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MessageRateMail" translate="yes" xml:space="preserve">
|
||||
<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>
|
||||
<target state="translated">Warnung</target>
|
||||
|
@ -219,12 +215,12 @@ Mietende ist nur möglich, wenn das Rad in Reichweite ist und Standortinformatio
|
|||
<target state="translated">Ja</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="QuestionSupportmailAttachment" translate="yes" xml:space="preserve">
|
||||
<source>I hereby consent to the transmission of my log file.
|
||||
<source>I hereby consent to the transmission of my diagnostic file.
|
||||
|
||||
The log file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and then deleted.</source>
|
||||
<target state="translated">Hiermit stimme ich der Übermittlung meiner Protokolldatei zu.
|
||||
The diagnostic file contains your app usage data as well as system information. The data will only be used for diagnostic purposes or to improve the app and is then deleted.</source>
|
||||
<target state="translated">Hiermit stimme ich der Übermittlung meiner Diagnosedatei zu.
|
||||
|
||||
Die Protokolldatei enthält Ihre App-Nutzungsdaten sowie Systeminformationen. Die Daten werden ausschließlich für Diagnosezwecke bzw. Verbesserung der App verwendet und werden anschließend gelöscht.</target>
|
||||
Die Diagnosedatei enthält Ihre App-Nutzungsdaten sowie Systeminformationen. Die Daten werden ausschließlich für Diagnosezwecke bzw. Verbesserung der App verwendet und werden anschließend gelöscht.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="QuestionTitle" translate="yes" xml:space="preserve">
|
||||
<source>Question</source>
|
||||
|
@ -237,8 +233,8 @@ Please log in again.</source>
|
|||
Bitte melden Sie sich erneut an.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredCodeMaxReservationTime" translate="yes" xml:space="preserve">
|
||||
<source>Code {0}, max. reservation time of {1} min. expired.</source>
|
||||
<target state="translated">Code ist {0}, max. Reservierungszeit von {1} Min. abgelaufen.
|
||||
<source>Code {0}, max. reservation time expired.</source>
|
||||
<target state="translated">Code ist {0}, max. Reservierungszeit abgelaufen.
|
||||
</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredCodeRemaining" translate="yes" xml:space="preserve">
|
||||
|
@ -259,16 +255,16 @@ Bitte melden Sie sich erneut an.</target>
|
|||
<target state="translated">Noch {0} Min. reserviert.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredMaximumReservationTime" translate="yes" xml:space="preserve">
|
||||
<source>Max. reservation time of {0} min. expired.</source>
|
||||
<target state="translated">Max. Reservierungszeit von {0} Min. abgelaufen.</target>
|
||||
<source>Max. reservation time expired.</source>
|
||||
<target state="translated">Max. Reservierungszeit abgelaufen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextBookedCodeSince" translate="yes" xml:space="preserve">
|
||||
<source>Code {0}, rented since {1}.</source>
|
||||
<target state="translated">Code ist {0}, gemietet seit {1}.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredLocationMaxReservationTime" translate="yes" xml:space="preserve">
|
||||
<source>Location {0}, max. reservation time of {1} min. expired.</source>
|
||||
<target state="translated">Standort {0}, max. Reservierungszeit von {1} Min. abgelaufen.
|
||||
<source>Location {0}, max. reservation time expired.</source>
|
||||
<target state="translated">Standort {0}, max. Reservierungszeit abgelaufen.
|
||||
</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextAvailable" translate="yes" xml:space="preserve">
|
||||
|
@ -281,8 +277,8 @@ Bitte melden Sie sich erneut an.</target>
|
|||
</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredCodeLocationMaxReservationTime" translate="yes" xml:space="preserve">
|
||||
<source>Code {0}, location {1}, max. reservation time of {2} min. expired.</source>
|
||||
<target state="translated">Code ist {0}, Standort {1}, max. Reservierungszeit von {2} Min. abgelaufen.
|
||||
<source>Code {0}, location {1}, max. reservation time expired.</source>
|
||||
<target state="translated">Code ist {0}, Standort {1}, max. Reservierungszeit abgelaufen.
|
||||
</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="StatusTextReservationExpiredCodeLocationReservationTime" translate="yes" xml:space="preserve">
|
||||
|
@ -323,10 +319,6 @@ Bitte melden Sie sich erneut an.</target>
|
|||
<source>Password</source>
|
||||
<target state="translated">Passwort</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ActionContactRate" translate="yes" xml:space="preserve">
|
||||
<source>Submit rating</source>
|
||||
<target state="translated">Bewertung abgeben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingLoginInstructions" translate="yes" xml:space="preserve">
|
||||
<source>Instructions TINK bikes</source>
|
||||
<target state="translated">Anleitung TINK Räder</target>
|
||||
|
@ -814,8 +806,8 @@ Layout Anzeige Radnamen und nummern verbessert.</target>
|
|||
<target state="translated">Bitte Anmelden, um Räder zu reservieren! <bpt id="1"><font color="blue"></bpt><bpt id="2"><u></bpt>Hier<ept id="2"></u></ept><ept id="1"></font></ept> tippen, um auf Anmeldeseite zu wechseln.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingContactNoStationInfoAvailableNoButton" translate="yes" xml:space="preserve">
|
||||
<source>Contact operator?</source>
|
||||
<target state="translated">Betreiber kontaktieren?</target>
|
||||
<source>First select the station whose operator you want to contact.</source>
|
||||
<target state="translated">Wählen Sie zunächst die Station, zu deren Betreiber Sie Kontakt aufnehmen möchten.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog3_0_241" translate="yes" xml:space="preserve">
|
||||
<source>Bike sharing system operator specific support info displayed on contact page.</source>
|
||||
|
@ -1234,16 +1226,6 @@ Kleinere Fehlerbehebungen.
|
|||
<source>Give feedback</source>
|
||||
<target state="translated">Rückmeldung geben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ActionContactMailAppReleated" translate="yes" xml:space="preserve">
|
||||
<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>
|
||||
<target state="translated">{0}-App Anfrage</target>
|
||||
<note from="MultilingualBuild" annotates="source" priority="2">Subject of contact mail to ("Feedback about the app").</note>
|
||||
<note from="MultilingualUpdate" annotates="source" priority="2">Please verify the translation’s accuracy as the source string was updated after it was translated.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="MessageReservingBikeErrorConnectionTitle" translate="yes" xml:space="preserve">
|
||||
<source>Connection error when reserving the bike!</source>
|
||||
<target state="translated">Verbingungsfehler beim Reservieren des Rads!</target>
|
||||
|
@ -1329,8 +1311,8 @@ Kleinere Fehlerbehebungen.
|
|||
<target state="translated">Die App hat ein neues Design! --- Sie sind Beta-Tester? Geben Sie uns jederzeit hilfreiche Rückmeldung über 'Kontakt - Rückmeldung zur App'. Sie sind noch kein Beta-Tester? Werden Sie es und erhalten Sie tolle neue Features vor allen anderen!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_MinorBugFixes" translate="yes" xml:space="preserve">
|
||||
<source>We have fixed some bugs. Enjoy the ride!</source>
|
||||
<target state="translated">Wir haben einige Fehler behoben. Genießen Sie die Fahrt!</target>
|
||||
<source>- We have fixed a few minor bugs. Enjoy the ride!</source>
|
||||
<target state="translated">- Wir haben ein paar kleine Fehler behoben. Genießen Sie die Fahrt!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog3_0_338_LB_MK" translate="yes" xml:space="preserve">
|
||||
<source>Besides minor bug fixes we have simplified the contact procedure:
|
||||
|
@ -1361,8 +1343,8 @@ Außerdem: Kleine Grafiken lassen auf einen Blick erkennen um was für einen Rad
|
|||
<target state="translated">{0}-App Anfrage</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SupportmailSubjectOperatormail" translate="yes" xml:space="preserve">
|
||||
<source>{0} request</source>
|
||||
<target state="translated">{0} Anfrage</target>
|
||||
<source>{0}-request: station {1}</source>
|
||||
<target state="translated">{0}-Anfrage: Station {1}</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="QuestionSupportmailAnswerNo" translate="yes" xml:space="preserve">
|
||||
<source>No, do not attach file</source>
|
||||
|
@ -1373,8 +1355,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>Bike ID including prefix e.g. TR15</source>
|
||||
<target state="translated">Rad-ID inklusive Präfix, z.B. TR15</target>
|
||||
<source>Prefix and No., e.g. TR15</source>
|
||||
<target state="translated">Präfix und Nr., 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!
|
||||
|
@ -1389,8 +1371,8 @@ Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben:
|
|||
<target state="translated">Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben: im Menü ganz unten. Bitte aktualisieren Sie die App regelmäßig, um in Funktionalität und Design auf dem neuesten Stand zu sein!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_MinorDesignImprovements" translate="yes" xml:space="preserve">
|
||||
<source>A few small things have been changed in the design.</source>
|
||||
<target state="translated">Es wurden ein paar Kleinigkeiten im Design verändert.</target>
|
||||
<source>- A few small things have been changed in the design.</source>
|
||||
<target state="translated">- Es wurden ein paar Kleinigkeiten im Design verändert.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingContactSupportBusy" translate="yes" xml:space="preserve">
|
||||
<source><bpt id="1"><font color="gray"></bpt><bpt id="2"><u></bpt>Contact<ept id="2"></u></ept><ept id="1"></font></ept> {0}.</source>
|
||||
|
@ -1505,8 +1487,8 @@ Probieren Sie es aus!</target>
|
|||
<ept id="1"></ul></ept></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_PackageUpdates" translate="yes" xml:space="preserve">
|
||||
<source>Software packages were updated.</source>
|
||||
<target state="translated">Softwarepakete wurden aktualisiert.</target>
|
||||
<source>- Software packages were updated.</source>
|
||||
<target state="translated">- Softwarepakete wurden aktualisiert.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_3_0_355_MK_SB_iOS" translate="yes" xml:space="preserve">
|
||||
<source>Bluetooth communication improved.</source>
|
||||
|
@ -1529,8 +1511,8 @@ Probieren Sie es aus!</target>
|
|||
<target state="translated">Information</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_MinorImprovements" translate="yes" xml:space="preserve">
|
||||
<source>Minor improvements.</source>
|
||||
<target state="translated">Kleine Verbesserungen.</target>
|
||||
<source>- Minor improvements.</source>
|
||||
<target state="translated">- Kleine Verbesserungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorOpenLockBoldStatusIsUnknownMessage" translate="yes" xml:space="preserve">
|
||||
<source>The lock could not be opened correctly. Try again!
|
||||
|
@ -1576,9 +1558,11 @@ Fehler beim Start der Standortabfrage!</target>
|
|||
</trans-unit>
|
||||
<trans-unit id="ErrorReturnBikeLockClosedGetGPSExceptionMessage" translate="yes" xml:space="preserve">
|
||||
<source>End rental at an unknown location is not possible.
|
||||
Getting geolocation failed.</source>
|
||||
Make sure you have granted location sharing permission and your location services are enabled.
|
||||
Try again!</source>
|
||||
<target state="translated">Beenden der Miete an unbekanntem Standort is nicht möglich.
|
||||
Fehler bei der Standortabfrage!</target>
|
||||
Stellen Sie sicher, dass Sie die Erlaubnis zur Standortfreigabe erteilt haben und Ihre Standortdienste aktiviert sind.
|
||||
Versuchen Sie erneut!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error_ReturnBike_Station_Location_Message" translate="yes" xml:space="preserve">
|
||||
<source>We could not assign the bike to any station. For this we need your location information while you are standing right next to the bike. Only then your rental can be terminated!
|
||||
|
@ -1620,8 +1604,8 @@ Außerdem:<br/>
|
|||
- 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>
|
||||
<source>Bike id</source>
|
||||
<target state="translated">Rad-ID</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingSearchBike" translate="yes" xml:space="preserve">
|
||||
<source>Search bike</source>
|
||||
|
@ -1643,6 +1627,58 @@ Außerdem:<br/>
|
|||
<source>Minor design and performance improvements.</source>
|
||||
<target state="translated">Kleine Verbesserungen in Design und Performance.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingFindBikeTypeOfBikeText" translate="yes" xml:space="preserve">
|
||||
<source>You search a </source>
|
||||
<target state="translated">Sie suchen ein </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MessageBikeTypeInfoText" translate="yes" xml:space="preserve">
|
||||
<source>You can search only the bikes of the selected bike type. Change your selection on the "Bike locations" page.</source>
|
||||
<target state="translated">Sie können nur die Fahrräder des ausgewählten Fahrradtyps suchen. Ändern Sie Ihre Auswahl auf der Seite "Radstandorte".</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MessageBikeTypeInfoTitle" translate="yes" xml:space="preserve">
|
||||
<source>Selected bike type</source>
|
||||
<target state="translated">Ausgewählter Fahrradtyp</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingFindBikeButton" translate="yes" xml:space="preserve">
|
||||
<source>Search</source>
|
||||
<target state="translated">Suchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_3_0_366_MK_SB" translate="yes" xml:space="preserve">
|
||||
<source>On the "Select bike" page you can now search and rent several bikes one after the other. Afterwards you will find them under "My bikes".</source>
|
||||
<target state="translated">Auf der Seite "Rad auswählen" können Sie nun nacheinander mehrere Räder suchen und mieten. Im Anschluss finden Sie diese unter "Meine Räder".</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorQueryGeolocation" translate="yes" xml:space="preserve">
|
||||
<source>Location query failed</source>
|
||||
<target state="translated">Standortabfrage fehlgeschlagen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingContactCustomerSupportTitle" translate="yes" xml:space="preserve">
|
||||
<source>Customer support</source>
|
||||
<target state="translated">Kundensupport</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ActionSelectAnotherStation" translate="yes" xml:space="preserve">
|
||||
<source>Select another station</source>
|
||||
<target state="translated">Andere Station auswählen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ActionSendDiagnosis" translate="yes" xml:space="preserve">
|
||||
<source><bpt id="1"><u></bpt>Transfer diagnostic file<ept id="1"></u></ept></source>
|
||||
<target state="translated"><bpt id="1"><u></bpt>Diagnosedatei übermitteln<ept id="1"></u></ept></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingLastSelectedStation" translate="yes" xml:space="preserve">
|
||||
<source>Last selected station</source>
|
||||
<target state="translated">Zuletzt ausgewählte Station</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MarkingOperator" translate="yes" xml:space="preserve">
|
||||
<source>Operator</source>
|
||||
<target state="translated">Betreiber</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ChangeLog_3_0_369_MK_SB" translate="yes" xml:space="preserve">
|
||||
<source>We have re-designed the contact page:
|
||||
<bpt id="1"><ul></bpt><bpt id="2"><li></bpt>Please contact the customer support immediately in case of problems with the bike rental!
|
||||
<ept id="2"></li></ept><bpt id="3"><li></bpt>To diagnose a problem, you can send us your app usage data via "Transfer diagnostic file". Without your active sending we do not record any of your data!<ept id="3"></li></ept><ept id="1"></ul></ept></source>
|
||||
<target state="translated">Wir haben die Kontakt-Seite neu gestaltet:
|
||||
<bpt id="1"><ul></bpt><bpt id="2"><li></bpt>Bitte kontaktieren Sie bei Problemen bei der Fahrradmiete umgehend den Kundensupport!
|
||||
<ept id="2"></li></ept><bpt id="3"><li></bpt>Für die Diagnose eines Problems können Sie über "Diagnosedatei übermitteln" Ihre App-Nutzungsdaten an uns senden. Ohne Ihr aktives Zusenden zeichnen wir keine Ihrer Daten auf!<ept id="3"></li></ept><ept id="1"></ul></ept></target>
|
||||
</trans-unit>
|
||||
</group>
|
||||
</body>
|
||||
</file>
|
||||
|
|
|
@ -181,7 +181,7 @@ namespace TINK.Repository
|
|||
IVersionInfo versionInfo) =>
|
||||
await DoUpdateLockingStateAsync(
|
||||
operatorUri?.AbsoluteUri ?? m_oCopriHost.AbsoluteUri,
|
||||
requestBuilder.UpateLockingState(bikeId, state, location, batteryLevel, versionInfo),
|
||||
requestBuilder.UpdateLockingState(bikeId, state, location, batteryLevel, versionInfo),
|
||||
UserAgent);
|
||||
|
||||
/// <summary> Gets booking request. </summary>
|
||||
|
@ -550,7 +550,7 @@ namespace TINK.Repository
|
|||
#endif
|
||||
}
|
||||
|
||||
/// <summary> Gets canel booking request response.</summary>
|
||||
/// <summary> Gets cancel booking request response.</summary>
|
||||
/// <param name="copriHost">Host to connect to. </param>
|
||||
/// <param name="command">Command to log user in.</param>
|
||||
/// <returns>Response on cancel booking request.</returns>
|
||||
|
|
|
@ -1376,7 +1376,7 @@ namespace TINK.Repository
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets canel booking request response.
|
||||
/// Gets cancel booking request response.
|
||||
/// </summary>
|
||||
/// <param name="bikeId">Id of the bike to book.</param>
|
||||
/// <param name="cookie">Cookie of the logged in user.</param>
|
||||
|
@ -1613,7 +1613,7 @@ namespace TINK.Repository
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets canel booking request response.
|
||||
/// Gets cancel booking request response.
|
||||
/// </summary>
|
||||
/// <param name="bikeId">Id of the bike to book.</param>
|
||||
/// <param name="cookie">Cookie of the logged in user.</param>
|
||||
|
|