Version 3.0.369
|
@ -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>
|
||||
|
|
|
@ -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.368" android:versionCode="368">
|
||||
<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. -->
|
||||
|
@ -11,12 +11,9 @@
|
|||
<!-- 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.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" />
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>LastenradBayern</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>368</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.368</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
IsVisible="{Binding
|
||||
Path=IsOperatorInfoAvaliable,
|
||||
Converter={StaticResource BoolInvert_Converter}}">
|
||||
<!-- Button to select station and explanation text -->
|
||||
<StackLayout>
|
||||
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>
|
||||
</Frame>
|
||||
<Frame
|
||||
|
||||
<!--Contact operator of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
<!-- Operator info -->
|
||||
<StackLayout>
|
||||
|
||||
<!-- 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
|
||||
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}"/>
|
||||
</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}"/>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Frame>
|
||||
<StackLayout>
|
||||
<Label FormattedText="{Binding LikeTinkApp}"/>
|
||||
<!--- Mail to app- related support -->
|
||||
|
||||
<!--- Mail to operator -->
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
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>
|
||||
|
||||
</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>
|
||||
</Frame>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
</ScrollView>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -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>
|
||||
|
@ -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.368" android:versionCode="368">
|
||||
<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. -->
|
||||
|
@ -11,12 +11,9 @@
|
|||
<!-- 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.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" />
|
||||
|
|
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>368</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.368</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,9 +18,17 @@
|
|||
</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>
|
||||
|
||||
|
@ -57,6 +67,13 @@
|
|||
|
||||
</ScrollView>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</ContentPage>
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
|
|
|
@ -21,102 +21,157 @@
|
|||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
|
||||
<StackLayout
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
Spacing="0">
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
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 -->
|
||||
<!-- 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
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}"
|
||||
HorizontalOptions="Center"
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
</StackLayout>
|
||||
|
||||
<!--- 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>
|
||||
|
||||
<!--Buttons-->
|
||||
<StackLayout
|
||||
Spacing="5"
|
||||
Margin="0,10,0,0">
|
||||
|
||||
<!--- 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}"/>
|
||||
|
||||
<!--- 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>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,5,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
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
|
||||
FormattedText="{Binding LikeTinkApp}"/>
|
||||
|
||||
<!--- Mail to app-developer -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
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>
|
||||
|
||||
</Frame>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</ScrollView>
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
|
|
|
@ -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,7 +15,17 @@
|
|||
</Grid>
|
||||
</Shell.TitleView>
|
||||
|
||||
<StackLayout>
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
|
@ -128,4 +139,13 @@
|
|||
|
||||
</StackLayout>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
IsVisible="{Binding IsIdle, Converter={StaticResource BoolInverterConverter}}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
</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
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
|
|
|
@ -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.368" android:versionCode="368">
|
||||
<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. -->
|
||||
|
@ -11,12 +11,9 @@
|
|||
<!-- 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.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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>sharee.bike</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>368</string>
|
||||
<string>369</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.368</string>
|
||||
<string>3.0.369</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 18 KiB |
|
@ -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>
|
|
@ -4,6 +4,8 @@
|
|||
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:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
mc:Ignorable="d"
|
||||
x:Class="TINK.View.Account.AccountPage"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
@ -15,9 +17,17 @@
|
|||
</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>
|
||||
|
||||
|
@ -40,13 +50,15 @@
|
|||
<Button
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
|
||||
Command="{Binding OnManageAccount}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
IsEnabled="{Binding IsLogoutPossible}">
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
|
||||
Command="{Binding OnLogoutRequest}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
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>
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
|
|
|
@ -20,102 +20,157 @@
|
|||
|
||||
<ContentPage.Content>
|
||||
|
||||
<ScrollView>
|
||||
|
||||
<StackLayout
|
||||
<Grid
|
||||
x:Name="ContactPageView"
|
||||
Spacing="0">
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<!-- Contact Support -->
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
Padding="10"
|
||||
Margin="0,10,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
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 -->
|
||||
<!-- 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
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}"
|
||||
HorizontalOptions="Center"
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ProviderNameText}"/>
|
||||
</StackLayout>
|
||||
|
||||
<!--- 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>
|
||||
|
||||
<!--Buttons-->
|
||||
<StackLayout
|
||||
Spacing="5"
|
||||
Margin="0,10,0,0">
|
||||
|
||||
<!--- 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}"/>
|
||||
|
||||
<!--- 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>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</Frame>
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
Margin="0,5,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<!--- Contact app-developer -->
|
||||
<StackLayout
|
||||
Padding="10">
|
||||
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
|
||||
FormattedText="{Binding LikeTinkApp}"/>
|
||||
|
||||
<!--- Mail to app-developer -->
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.ActionContactMailAppReleated}"
|
||||
IsEnabled="{Binding IsSendMailAvailable}"
|
||||
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>
|
||||
|
||||
</Frame>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
</ScrollView>
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
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}">
|
||||
|
||||
|
@ -13,7 +14,17 @@
|
|||
</Grid>
|
||||
</Shell.TitleView>
|
||||
|
||||
<StackLayout>
|
||||
<ContentPage.Resources>
|
||||
<conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
|
||||
</ContentPage.Resources>
|
||||
|
||||
<ContentPage.Content>
|
||||
|
||||
<!--Grid for content and Running process in same row-->
|
||||
<Grid>
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0">
|
||||
|
||||
<Frame
|
||||
Padding="10"
|
||||
|
@ -127,4 +138,13 @@
|
|||
|
||||
</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
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
<!--Bike data-->
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowDefinitions="Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!--Hint for Outdated Data.-->
|
||||
|
|
|
@ -702,6 +702,11 @@ namespace TINK.Model
|
|||
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 }
|
||||
},
|
||||
};
|
||||
|
||||
|
|
102
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>
|
||||
|
@ -811,6 +811,17 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <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>
|
||||
|
@ -2023,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 {
|
||||
|
@ -2166,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>
|
||||
|
@ -2329,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>
|
||||
|
@ -2976,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>
|
||||
|
@ -3084,15 +3113,6 @@ 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 Prefix and No., e.g. TR15.
|
||||
/// </summary>
|
||||
|
@ -3193,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 {
|
||||
|
@ -3384,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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -1207,4 +1194,24 @@ Außerdem:<br/>
|
|||
<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>
|
||||
|
@ -328,9 +325,6 @@ The log file contains your app usage data as well as system information. The dat
|
|||
<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>
|
||||
|
@ -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>
|
||||
|
@ -1296,4 +1283,24 @@ Also:<br/>
|
|||
<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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -1669,6 +1651,34 @@ Außerdem:<br/>
|
|||
<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>
|
||||
|
|
|
@ -63,6 +63,31 @@
|
|||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--Button without outline-->
|
||||
<Style x:Key="NoOutlineButton" TargetType="Button">
|
||||
<Setter Property="WidthRequest" Value="400" />
|
||||
<Setter Property="HorizontalOptions" Value="Center" />
|
||||
<Setter Property="BorderWidth" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="10" />
|
||||
<Setter Property="FontSize" Value="Medium"/>
|
||||
<Setter Property="FontFamily" Value="RobotoRegular"/>
|
||||
<Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/>
|
||||
<Style.Triggers>
|
||||
<Trigger TargetType="Button"
|
||||
Property="IsEnabled"
|
||||
Value="True">
|
||||
<Setter Property="BorderColor" Value="White"/>
|
||||
<Setter Property="BackgroundColor" Value="White"/>
|
||||
</Trigger>
|
||||
<Trigger TargetType="Button"
|
||||
Property="IsEnabled"
|
||||
Value="False">
|
||||
<Setter Property="BorderColor" Value="LightGray"/>
|
||||
<Setter Property="BackgroundColor" Value="DimGray"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--Switch-->
|
||||
<Style TargetType="Switch">
|
||||
<Style.Triggers>
|
||||
|
|
|
@ -62,6 +62,31 @@
|
|||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--Button without outline-->
|
||||
<Style x:Key="NoOutlineButton" TargetType="Button">
|
||||
<Setter Property="WidthRequest" Value="400" />
|
||||
<Setter Property="HorizontalOptions" Value="Center" />
|
||||
<Setter Property="BorderWidth" Value="1"/>
|
||||
<Setter Property="CornerRadius" Value="10" />
|
||||
<Setter Property="FontSize" Value="Medium"/>
|
||||
<Setter Property="FontFamily" Value="RobotoRegular"/>
|
||||
<Setter Property="TextColor" Value="{DynamicResource Key=primary-back-title-color}"/>
|
||||
<Style.Triggers>
|
||||
<Trigger TargetType="Button"
|
||||
Property="IsEnabled"
|
||||
Value="True">
|
||||
<Setter Property="BorderColor" Value="White"/>
|
||||
<Setter Property="BackgroundColor" Value="White"/>
|
||||
</Trigger>
|
||||
<Trigger TargetType="Button"
|
||||
Property="IsEnabled"
|
||||
Value="False">
|
||||
<Setter Property="BorderColor" Value="LightGray"/>
|
||||
<Setter Property="BackgroundColor" Value="DimGray"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--Switch-->
|
||||
<Style TargetType="Switch">
|
||||
<Style.Triggers>
|
||||
|
@ -88,6 +113,18 @@
|
|||
<Style TargetType="Label">
|
||||
<Setter Property="FontSize" Value="Default"/>
|
||||
<Setter Property="FontFamily" Value="RobotoRegular"/>
|
||||
<Style.Triggers>
|
||||
<Trigger TargetType="Label"
|
||||
Property="FontAttributes"
|
||||
Value="Bold">
|
||||
<Setter Property="FontFamily" Value="RobotoBold"/>
|
||||
</Trigger>
|
||||
<Trigger TargetType="Label"
|
||||
Property="FontAttributes"
|
||||
Value="Italic">
|
||||
<Setter Property="FontFamily" Value="RobotoItalic"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--Entry-->
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -43,6 +42,47 @@ namespace TINK.ViewModel.Account
|
|||
/// <summary> Reference on the tink app instance. </summary>
|
||||
private ITinkApp TinkApp { get; }
|
||||
|
||||
/// <summary> Used to block more than on copri requests at a given time.</summary>
|
||||
private bool isIdle = true;
|
||||
|
||||
/// <summary>
|
||||
/// True if any action can be performed (logout etc.)
|
||||
/// </summary>
|
||||
public virtual bool IsIdle
|
||||
{
|
||||
get => isIdle;
|
||||
set
|
||||
{
|
||||
if (value == isIdle)
|
||||
return;
|
||||
|
||||
Log.ForContext<AccountPageViewModel>().Debug($"Switch value of {nameof(IsIdle)} to {value}.");
|
||||
isIdle = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsIdle)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsProcessWithRunningProcessView)));
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsProcessWithRunningProcessView => !isIdle;
|
||||
|
||||
/// <summary> Holds info about current action. </summary>
|
||||
private string statusInfoText;
|
||||
|
||||
/// <summary> Holds info about current action. </summary>
|
||||
public string StatusInfoText
|
||||
{
|
||||
get => statusInfoText;
|
||||
set
|
||||
{
|
||||
if (value == statusInfoText)
|
||||
return;
|
||||
|
||||
Log.ForContext<LoginPageViewModel>().Debug($"Switch value of {nameof(StatusInfoText)} to {value}.");
|
||||
statusInfoText = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StatusInfoText)));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> Constructs a settings page view model object.</summary>
|
||||
/// <param name="tinkApp"> Reference to tink app model.</param>
|
||||
/// <param name="p_oUser"></param>
|
||||
|
@ -261,6 +301,8 @@ namespace TINK.ViewModel.Account
|
|||
/// </summary>
|
||||
public async Task Logout()
|
||||
{
|
||||
StatusInfoText = AppResources.ActivityTextOneMomentPlease;
|
||||
IsIdle = false;
|
||||
try
|
||||
{
|
||||
// Backup logout message before logout.
|
||||
|
@ -284,6 +326,9 @@ namespace TINK.ViewModel.Account
|
|||
|
||||
// Restart polling again.
|
||||
await m_oViewUpdateManager.StartUpdateAyncPeridically(Polling.ToImmutable());
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
catch (Exception l_oException)
|
||||
|
@ -303,6 +348,9 @@ namespace TINK.ViewModel.Account
|
|||
|
||||
// Restart polling again.
|
||||
await m_oViewUpdateManager.StartUpdateAyncPeridically(Polling.ToImmutable());
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -314,8 +362,12 @@ namespace TINK.ViewModel.Account
|
|||
catch (Exception p_oException)
|
||||
{
|
||||
Log.Error("An unexpected error occurred displaying log out page. {@Exception}", p_oException);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Switch to map view after log out.
|
||||
|
@ -328,8 +380,14 @@ namespace TINK.ViewModel.Account
|
|||
catch (Exception p_oException)
|
||||
{
|
||||
Log.Error("An unexpected error occurred switching back to map page after displaying log out page. {@Exception}", p_oException);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -63,14 +63,14 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
|||
|
||||
/// <summary>Books bike by reserving bike, opening lock and booking bike.</summary>
|
||||
/// <returns>Next request handler.</returns>
|
||||
public async Task<IRequestHandler> HandleRequestOption1() => await DoBookOrClose();
|
||||
public async Task<IRequestHandler> HandleRequestOption1() => await CloseLockOrDoBook();
|
||||
|
||||
public async Task<IRequestHandler> HandleRequestOption2() => await UnsupportedRequest();
|
||||
|
||||
|
||||
/// <summary>Books bike by reserving bike, opening lock and booking bike.</summary>
|
||||
/// <returns>Next request handler.</returns>
|
||||
public async Task<IRequestHandler> DoBookOrClose()
|
||||
public async Task<IRequestHandler> CloseLockOrDoBook()
|
||||
{
|
||||
BikesViewModel.IsIdle = false; // Lock list to avoid multiple taps while copri action is pending.
|
||||
|
||||
|
|
|
@ -75,6 +75,8 @@ namespace TINK.ViewModel.Info
|
|||
|
||||
SelectedStation = selectedStation;
|
||||
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedStationId)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedStationName)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MailAddressText)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(OfficeHoursText)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(PhoneNumberText)));
|
||||
|
@ -132,32 +134,14 @@ namespace TINK.ViewModel.Info
|
|||
return;
|
||||
}
|
||||
|
||||
// Ask whether mail is operator or app specific.
|
||||
var operatorRelatedMail = await ViewService.DisplayAlert(
|
||||
AppResources.QuestionTitle,
|
||||
string.Format(AppResources.QuestionSupportmailSubject, AppFlavorName),
|
||||
string.Format(AppResources.QuestionSupportmailAnswerOperator, AppFlavorName),
|
||||
string.Format(AppResources.QuestionSupportmailAnswerApp, AppFlavorName));
|
||||
|
||||
if (operatorRelatedMail)
|
||||
{
|
||||
// Send operator related support mail to operator.
|
||||
await Email.ComposeAsync(new EmailMessage
|
||||
{
|
||||
To = new List<string> { MailAddressText },
|
||||
Subject = string.Format(AppResources.SupportmailSubjectOperatormail, AppFlavorName)
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Send app-related support mail to operator.
|
||||
await Email.ComposeAsync(new EmailMessage
|
||||
{
|
||||
To = new List<string> { MailAddressText },
|
||||
Cc = APPSUPPORTMAILADDRESS.ToUpper() != MailAddressText.ToUpper() // do not sent copy if same mail address
|
||||
&& MailAddressText != "konrad@sharee.bike" // do not sent copy if Mein konrad
|
||||
? new List<string> { APPSUPPORTMAILADDRESS } : new List<string>(),
|
||||
Subject = string.Format(AppResources.SupportmailSubjectAppmail, AppFlavorName)
|
||||
Subject = string.Format(AppResources.SupportmailSubjectOperatormail, AppFlavorName, SelectedStation?.Id)
|
||||
});
|
||||
|
||||
return;
|
||||
|
@ -180,12 +164,10 @@ namespace TINK.ViewModel.Info
|
|||
try
|
||||
{
|
||||
// Ask for permission to append diagnostics.
|
||||
var appendFile = false;
|
||||
appendFile = await ViewService.DisplayAlert(
|
||||
await ViewService.DisplayAlert(
|
||||
AppResources.QuestionSupportmailTitle,
|
||||
AppResources.QuestionSupportmailAttachment,
|
||||
AppResources.QuestionAnswerYes,
|
||||
AppResources.QuestionSupportmailAnswerNo);
|
||||
AppResources.MessageAnswerOk);
|
||||
|
||||
var message = new EmailMessage
|
||||
{
|
||||
|
@ -193,13 +175,6 @@ namespace TINK.ViewModel.Info
|
|||
Subject = string.Format(AppResources.SupportmailSubjectAppmail, AppFlavorName)
|
||||
};
|
||||
|
||||
if (appendFile == false)
|
||||
{
|
||||
// Send without attachment
|
||||
await Email.ComposeAsync(message);
|
||||
return;
|
||||
}
|
||||
|
||||
// Send with attachment.
|
||||
var logFileName = string.Empty;
|
||||
try
|
||||
|
@ -299,13 +274,18 @@ namespace TINK.ViewModel.Info
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary> Text providing the id of the selected station.</summary>
|
||||
public string SelectedStationId
|
||||
=> SelectedStation?.Id;
|
||||
|
||||
public string SelectedStationName
|
||||
=> SelectedStation?.StationName;
|
||||
|
||||
/// <summary> Text providing mail address and possilbe reasons to contact. </summary>
|
||||
/// <summary> Text providing the name of the operator of the selected station </summary>
|
||||
public string ProviderNameText
|
||||
=> string.Format("Betreiber: {0}", SelectedStation?.OperatorData?.Name)
|
||||
;
|
||||
/// <summary> Text providing mail address and possilbe reasons to contact. </summary>
|
||||
=> SelectedStation?.OperatorData?.Name;
|
||||
|
||||
/// <summary> Text providing mail address and possible reasons to contact. </summary>
|
||||
public FormattedString MailAddressAndMotivationsText
|
||||
{
|
||||
get
|
||||
|
@ -316,35 +296,6 @@ namespace TINK.ViewModel.Info
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary> Invitation to rate app.</summary>
|
||||
public FormattedString LikeTinkApp
|
||||
{
|
||||
get
|
||||
{
|
||||
var hint = new FormattedString();
|
||||
hint.Spans.Add(new Span { Text = string.Format(AppResources.MessageRateMail, AppFlavorName) });
|
||||
return hint;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> User clicks rate button.</summary>
|
||||
public ICommand OnRateRequest
|
||||
=> new Command(() => RegisterRequest());
|
||||
|
||||
/// <summary> Opens login page.</summary>
|
||||
public void RegisterRequest()
|
||||
{
|
||||
try
|
||||
{
|
||||
OpenUrlInExternalBrowser();
|
||||
}
|
||||
catch (Exception p_oException)
|
||||
{
|
||||
Log.Error("Ein unerwarteter Fehler ist auf der Login Seite beim Öffnen eines Browsers, Seite {url}, aufgetreten. {@Exception}", p_oException);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> Invitation to rate app.</summary>
|
||||
public FormattedString PhoneContactText
|
||||
{
|
||||
|
|
|
@ -22,6 +22,9 @@ using TINK.MultilingualResources;
|
|||
using TINK.Repository;
|
||||
using TINK.Services.Geolocation;
|
||||
using TINK.Model.State;
|
||||
using TINK.ViewModel.Map;
|
||||
using TINK.Model.Stations.StationNS;
|
||||
using TINK.Model.Bikes.BikeInfoNS.BC;
|
||||
|
||||
namespace TINK.ViewModel.Contact
|
||||
{
|
||||
|
@ -395,6 +398,7 @@ namespace TINK.ViewModel.Contact
|
|||
|
||||
var colors = GetStationColors(
|
||||
Pins.Select(x => x.Tag.ToString()).ToList(),
|
||||
resultStationsAndBikes.Response.StationsAll,
|
||||
resultStationsAndBikes.Response.BikesOccupied);
|
||||
|
||||
// Update pins color form count of bikes located at station.
|
||||
|
@ -491,10 +495,13 @@ namespace TINK.ViewModel.Contact
|
|||
/// Gets the list of station color for all stations.
|
||||
/// </summary>
|
||||
/// <param name="stationsId">Station id list to get color for.</param>
|
||||
/// <param name="stations">Station object dictionary to get count of available bike from for each station.</param>
|
||||
/// <param name="bikesReserved">Bike collection to get count of reserved/ rented bikes from for each station.</param>
|
||||
/// <returns></returns>
|
||||
private static IList<Color> GetStationColors(
|
||||
internal static IList<Color> GetStationColors(
|
||||
IEnumerable<string> stationsId,
|
||||
BikeCollection bikesAll)
|
||||
IEnumerable<IStation> stations,
|
||||
IEnumerable<BikeInfo> bikesReserved)
|
||||
{
|
||||
if (stationsId == null)
|
||||
{
|
||||
|
@ -502,11 +509,14 @@ namespace TINK.ViewModel.Contact
|
|||
return new List<Color>();
|
||||
}
|
||||
|
||||
if (bikesAll == null)
|
||||
if (stations == null)
|
||||
{
|
||||
// If object is null an error occurred querying bikes centered or bikes occupied which results in an unknown state.
|
||||
Log.ForContext<SelectStationPageViewModel>().Error("No bikes available to determine pins color.");
|
||||
return new List<Color>(stationsId.Select(x => Color.Blue));
|
||||
Log.ForContext<SelectStationPageViewModel>().Error("No stations info available to get count of bikes available to determine whether a pin is green or not.");
|
||||
}
|
||||
|
||||
if (bikesReserved == null)
|
||||
{
|
||||
Log.ForContext<SelectStationPageViewModel>().Error("No bikes info available to determine whether a pins is light blue or not.");
|
||||
}
|
||||
|
||||
// Get state for each station.
|
||||
|
@ -514,15 +524,14 @@ namespace TINK.ViewModel.Contact
|
|||
foreach (var stationId in stationsId)
|
||||
{
|
||||
// Get color of given station.
|
||||
var bikesAtStation = bikesAll.Where(x => x.StationId == stationId).ToList();
|
||||
if (bikesAtStation.FirstOrDefault(x => x.State.Value.IsOccupied()) != null)
|
||||
if (bikesReserved?.Where(x => x.StationId == stationId).Count() > 0)
|
||||
{
|
||||
// There is at least one requested or booked bike
|
||||
colors.Add(Color.LightBlue);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (bikesAtStation.ToList().Count > 0)
|
||||
if (stations?.FirstOrDefault(x => x.Id == stationId)?.AvailableBikesCount > 0)
|
||||
{
|
||||
// There is at least one bike available
|
||||
colors.Add(Color.Green);
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace TINK.ViewModel
|
|||
private readonly IViewService m_oViewService;
|
||||
|
||||
#if BACKSTYLE
|
||||
/// <summary> Reference to naviagion object to navigate back to map page when login succeeded. </summary>
|
||||
/// <summary> Reference to navigation object to navigate back to map page when login succeeded. </summary>
|
||||
private INavigation m_oNavigation;
|
||||
#endif
|
||||
/// <summary> Reference on the tink app instance. </summary>
|
||||
|
@ -51,6 +51,47 @@ namespace TINK.ViewModel
|
|||
/// </summary>
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
/// <summary> Used to block more than on copri requests at a given time.</summary>
|
||||
private bool isIdle = true;
|
||||
|
||||
/// <summary>
|
||||
/// True if any action can be performed (login etc.)
|
||||
/// </summary>
|
||||
public virtual bool IsIdle
|
||||
{
|
||||
get => isIdle;
|
||||
set
|
||||
{
|
||||
if (value == isIdle)
|
||||
return;
|
||||
|
||||
Log.ForContext<LoginPageViewModel>().Debug($"Switch value of {nameof(IsIdle)} to {value}.");
|
||||
isIdle = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsIdle)));
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsProcessWithRunningProcessView)));
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsProcessWithRunningProcessView => !isIdle;
|
||||
|
||||
/// <summary> Holds info about current action. </summary>
|
||||
private string statusInfoText;
|
||||
|
||||
/// <summary> Holds info about current action. </summary>
|
||||
public string StatusInfoText
|
||||
{
|
||||
get => statusInfoText;
|
||||
set
|
||||
{
|
||||
if (value == statusInfoText)
|
||||
return;
|
||||
|
||||
Log.ForContext<LoginPageViewModel>().Debug($"Switch value of {nameof(StatusInfoText)} to {value}.");
|
||||
statusInfoText = value;
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StatusInfoText)));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
@ -213,6 +254,8 @@ namespace TINK.ViewModel
|
|||
public async Task Login()
|
||||
#endif
|
||||
{
|
||||
IsIdle = false;
|
||||
StatusInfoText = AppResources.ActivityTextOneMomentPlease;
|
||||
IAccount account = new EmptyAccount();
|
||||
try
|
||||
{
|
||||
|
@ -251,6 +294,8 @@ namespace TINK.ViewModel
|
|||
l_oException.Message,
|
||||
AppResources.MessageAnswerOk);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
catch (UnsupportedCopriVersionDetectedException)
|
||||
|
@ -262,6 +307,8 @@ namespace TINK.ViewModel
|
|||
TinkApp.Flavor.GetDisplayName()),
|
||||
AppResources.MessageAnswerOk);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
catch (Exception l_oException)
|
||||
|
@ -294,6 +341,8 @@ namespace TINK.ViewModel
|
|||
AppResources.MessageAnswerOk);
|
||||
}
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -312,6 +361,9 @@ namespace TINK.ViewModel
|
|||
catch (Exception p_oException)
|
||||
{
|
||||
Log.ForContext<LoginPageViewModel>().Error("An unexpected error occurred displaying log out page. {@Exception}", p_oException);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -326,6 +378,8 @@ namespace TINK.ViewModel
|
|||
#else
|
||||
await m_oViewService.ShowPage("//MapPage");
|
||||
#endif
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -339,6 +393,9 @@ namespace TINK.ViewModel
|
|||
catch (Exception p_oException)
|
||||
{
|
||||
Log.ForContext<LoginPageViewModel>().Error("Ein unerwarteter Fehler ist auf der Seite Anleitung TINK Räder (nach Anmeldeseite) aufgetreten. {@Exception}", p_oException);
|
||||
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -346,6 +403,8 @@ namespace TINK.ViewModel
|
|||
// Navigate back to map page.
|
||||
await m_oNavigation.PopToRootAsync();
|
||||
#endif
|
||||
IsIdle = true;
|
||||
StatusInfoText = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary> Holds whether TINK/ Copri info is shown.</summary>
|
||||
|
|