Version 3.0.371

This commit is contained in:
Anja 2023-08-31 12:31:38 +02:00
parent bdb2dec1c1
commit 6d22dbf40b
145 changed files with 2289 additions and 764 deletions

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.370" android:versionCode="370"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.371" android:versionCode="371">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" /> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
<!-- Google Maps related permissions --> <!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services --> <!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -56,8 +56,8 @@
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>LastenradBayern</string> <string>LastenradBayern</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>370</string> <string>371</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.370</string> <string>3.0.371</string>
</dict> </dict>
</plist> </plist>

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -251,7 +251,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using Serilog; using Serilog;
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -28,8 +28,11 @@ namespace TINK.View.Contact
{ {
InitializeComponent(); InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel( ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(), App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(), () => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl), () => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this); this);
@ -120,7 +123,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT
@ -131,4 +134,4 @@ namespace TINK.View.Contact
public INavigationMasterDetail NavigationMasterDetail { set; private get; } public INavigationMasterDetail NavigationMasterDetail { set; private get; }
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
#if USEFLYOUT #if USEFLYOUT
using TINK.View.MasterDetail; using TINK.View.MasterDetail;
@ -116,7 +116,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT
@ -206,4 +206,4 @@ namespace TINK.View.Contact
} }
} }
} }
} }

View file

@ -12,7 +12,7 @@ namespace TINK.View
/// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param> /// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
public FeedbackPopup( public FeedbackPopup(
IBattery battery = null, IBatteryMutable battery = null,
string co2Saving = null) string co2Saving = null)
{ {
InitializeComponent(); InitializeComponent();

View file

@ -1,3 +1,4 @@
using System.Globalization;
using Serilog; using Serilog;
using TINK.ViewModel; using TINK.ViewModel;
using TINK.ViewModel.Contact; using TINK.ViewModel.Contact;
@ -36,6 +37,7 @@ namespace TINK.View.Contact
App.ModelRoot.ResourceUrls.FeesResourcePath, App.ModelRoot.ResourceUrls.FeesResourcePath,
App.ModelRoot.ResourceUrls.BikesResourcePath, App.ModelRoot.ResourceUrls.BikesResourcePath,
App.ModelRoot.IsSiteCachingOn, App.ModelRoot.IsSiteCachingOn,
CultureInfo.CurrentUICulture.TwoLetterISOLanguageName,
() => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query, () => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query,
resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls); resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls);

View file

@ -181,7 +181,7 @@ namespace TINK.View.FindBike
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device; using TINK.Model.Device;
@ -117,7 +117,7 @@ namespace TINK.View.Login
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey; using TINK.ViewModel.MiniSurvey;
@ -94,7 +94,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
#if USERFEEDBACKDLG_TRYOUT #if USERFEEDBACKDLG_TRYOUT
@ -165,4 +165,4 @@ namespace TINK.View.Settings
} }
#endif #endif
} }
} }

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device; using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
/// <summary> /// <summary>
@ -103,4 +103,4 @@ namespace TINK.View.WhatsNew
}); });
} }
} }
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.370" android:versionCode="370"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.371" android:versionCode="371">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" /> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
<!-- Google Maps related permissions --> <!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services --> <!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -56,8 +56,8 @@
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>Mein konrad</string> <string>Mein konrad</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>370</string> <string>371</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.370</string> <string>3.0.371</string>
</dict> </dict>
</plist> </plist>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,004 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 500 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 886 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 997 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 622 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 965 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 KiB

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -11,8 +11,13 @@
<ContentView> <ContentView>
<ContentView.Resources> <ContentView.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/> <conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
</ContentView.Resources> <conv:BoolInverterConverter x:Key="BoolInverterConverter"/>
<x:String x:Key="InfoCircle">&#xf05a;</x:String>
<x:String x:Key="LocationPin">&#xf3c5;</x:String>
<x:String x:Key="CityPin">&#xf64f;</x:String>
<x:String x:Key="ArrowReturnBack">&#xf0e2;</x:String>
</ContentView.Resources>
<Frame <Frame
Padding="10" Padding="10"
@ -113,50 +118,115 @@
Grid.RowSpan="2" Grid.RowSpan="2"
Spacing="0" Spacing="0"
HorizontalOptions="End" HorizontalOptions="End"
VerticalOptions="End" VerticalOptions="End">
IsVisible="{Binding AaRideType}">
<StackLayout <StackLayout
Orientation="Horizontal" Spacing="0"
HorizontalOptions="End"> IsVisible="{Binding AaRideType}">
<Image> <StackLayout.Triggers>
<Image.Source> <DataTrigger TargetType="StackLayout"
<FontImageSource Binding="{Binding Path=IsVisible}"
Glyph="{StaticResource LocationPin}" Value="false">
Color="Black" <Setter Property="HeightRequest" Value="0" />
FontFamily="FA-S" </DataTrigger>
Size="20"/> </StackLayout.Triggers>
</Image.Source> <StackLayout
</Image> Orientation="Horizontal"
<Image> HorizontalOptions="End">
<Image.Source> <Image>
<FontImageSource <Image.Source>
Glyph="{StaticResource ArrowReturnBack}" <FontImageSource
Color="Black" Glyph="{StaticResource LocationPin}"
FontFamily="FA-S" Color="Black"
Size="20"/> FontFamily="FA-S"
</Image.Source> Size="20"/>
</Image> </Image.Source>
<Button </Image>
Command="{Binding ShowRideTypeInfoCommand}" <Image>
WidthRequest="24" <Image.Source>
HeightRequest="24" <FontImageSource
BackgroundColor="Transparent" Glyph="{StaticResource ArrowReturnBack}"
BorderWidth="0" Color="Black"
Padding="0" FontFamily="FA-S"
Margin="5,0,0,0"> Size="20"/>
<Button.ImageSource> </Image.Source>
<FontImageSource </Image>
Glyph="{StaticResource InfoCircle}" <Button
Color="DimGray" Command="{Binding ShowRideTypeInfoCommand}"
FontFamily="FA-S" WidthRequest="24"
Size="20"/> HeightRequest="24"
</Button.ImageSource> BackgroundColor="Transparent"
</Button> BorderWidth="0"
</StackLayout> Padding="0"
<Label Margin="5,0,0,0">
<Button.ImageSource>
<FontImageSource
Glyph="{StaticResource InfoCircle}"
Color="DimGray"
FontFamily="FA-S"
Size="20"/>
</Button.ImageSource>
</Button>
</StackLayout>
<Label
Text= "{Binding StationId}" Text= "{Binding StationId}"
FontSize="Small" FontSize="Small"
HorizontalOptions="End"/> HorizontalOptions="End"/>
</StackLayout>
<!-- BikeIsBoundToCityArea -->
<!-- later, when value comes from backend: IsVisible="{Binding CityAreaType}"-->
<StackLayout
Spacing="0"
IsVisible="{Binding IsBikeBoundToCity}">
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout"
Binding="{Binding Path=IsVisible}"
Value="false">
<Setter Property="HeightRequest" Value="0" />
</DataTrigger>
</StackLayout.Triggers>
<StackLayout
Orientation="Horizontal"
HorizontalOptions="End">
<Image>
<Image.Source>
<FontImageSource
Glyph="{StaticResource CityPin}"
Color="Black"
FontFamily="FA-S"
Size="20"/>
</Image.Source>
</Image>
<Image>
<Image.Source>
<FontImageSource
Glyph="{StaticResource ArrowReturnBack}"
Color="Black"
FontFamily="FA-S"
Size="20"/>
</Image.Source>
</Image>
<Button
Command="{Binding ShowBikeIsBoundToCityInfoCommand}"
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>
<Label
Text="{x:Static resources:AppResources.MarkingBikeIsBoundToCity}"
FontSize="Small"
HorizontalOptions="End"/>
</StackLayout>
</StackLayout> </StackLayout>
</Grid> </Grid>

View file

@ -250,7 +250,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using Serilog; using Serilog;
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -29,8 +29,11 @@ namespace TINK.View.Contact
{ {
InitializeComponent(); InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel( ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(), App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(), () => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl), () => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this); this);
@ -121,7 +124,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT
@ -132,4 +135,4 @@ namespace TINK.View.Contact
public INavigationMasterDetail NavigationMasterDetail { set; private get; } public INavigationMasterDetail NavigationMasterDetail { set; private get; }
#endif #endif
} }
} }

View file

@ -118,7 +118,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT

View file

@ -12,7 +12,7 @@ namespace TINK.View
/// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param> /// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
public FeedbackPopup( public FeedbackPopup(
IBattery battery = null, IBatteryMutable battery = null,
string co2Saving = null) string co2Saving = null)
{ {
InitializeComponent(); InitializeComponent();

View file

@ -1,8 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" <TabbedPage
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TINK.View.Contact.FeesAndBikesPage"> xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.FeesAndBikesPage"
Style="{StaticResource TabbedPageStyle}">
<TabbedPage.Resources>
<x:String x:Key="IconSmartphone">&#xf3cd;</x:String>
<x:String x:Key="IconTariff">&#xf4c0;</x:String>
<x:String x:Key="IconFaq">&#xf059;</x:String>
</TabbedPage.Resources>
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
@ -10,44 +19,113 @@
Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/> Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage <!--Pages can be added as references or in line-->
<ContentPage
x:Name="FaqPage"
IsEnabled="{Binding IsIdle}"
Title="FAQ">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconFaq}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content>
<Grid
RowDefinitions="Auto,*,Auto"
RowSpacing="0">
<BoxView Grid.Row="0"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<WebView Grid.Row="1"
x:Name="FAQWebView"
HeightRequest="1000"
WidthRequest="1000"
Source="{Binding FAQ}"/>
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid>
</ContentPage.Content>
</ContentPage>
<ContentPage
x:Name="ManualPage"
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabBikes}"> Title="{x:Static resources:AppResources.MarkingTabBikes}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconSmartphone}" FontFamily="FA-S" />
<WebView </ContentPage.IconImageSource>
x:Name="InfoTypesOfBikesWebView" <ContentPage.Content>
HeightRequest="1000" <Grid
WidthRequest="1000" RowDefinitions="Auto,*,Auto"
Source="{Binding TypesOfBikesText}"/> RowSpacing="0">
<ActivityIndicator Grid.Row="0" <BoxView Grid.Row="0"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" HeightRequest="1"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" WidthRequest="400"
Scale="2" HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" Color="{x:DynamicResource primary-back-title-color}"/>
HorizontalOptions="CenterAndExpand" <WebView Grid.Row="1"
Color="{x:DynamicResource primary-back-title-color}"/> x:Name="InfoTypesOfBikesWebView"
HeightRequest="1000"
WidthRequest="1000"
Source="{Binding TypesOfBikesText}"/>
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
x:Name="TariffPage"
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabFees}"> Title="{x:Static resources:AppResources.MarkingTabFees}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconTariff}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content> <ContentPage.Content>
<Grid> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoRentBikeWebView" RowSpacing="0">
HeightRequest="1000" <BoxView Grid.Row="0"
WidthRequest="1000" HeightRequest="1"
Source="{Binding RentBikeText}"/> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoRentBikeWebView"
VerticalOptions="CenterAndExpand" HeightRequest="1000"
HorizontalOptions="CenterAndExpand" WidthRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> Source="{Binding RentBikeText}"/>
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>

View file

@ -1,3 +1,4 @@
using System.Globalization;
using Serilog; using Serilog;
using TINK.ViewModel; using TINK.ViewModel;
using TINK.ViewModel.Contact; using TINK.ViewModel.Contact;
@ -36,6 +37,7 @@ namespace TINK.View.Contact
App.ModelRoot.ResourceUrls.FeesResourcePath, App.ModelRoot.ResourceUrls.FeesResourcePath,
App.ModelRoot.ResourceUrls.BikesResourcePath, App.ModelRoot.ResourceUrls.BikesResourcePath,
App.ModelRoot.IsSiteCachingOn, App.ModelRoot.IsSiteCachingOn,
CultureInfo.CurrentUICulture.TwoLetterISOLanguageName,
() => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query, () => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query,
resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls); resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls);

View file

@ -177,7 +177,7 @@ namespace TINK.View.FindBike
#if USCSHARP9 #if USCSHARP9
public async Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup()); public async Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup());
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -2,106 +2,164 @@
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" <TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Info.InfoPage" x:Class="TINK.View.Info.InfoPage"
Style="{StaticResource TabbedPageStyle}"
x:Name="TabbedInfoPage"> x:Name="TabbedInfoPage">
<Shell.TitleView>
<TabbedPage.Resources>
<x:String x:Key="IconSmartphone">&#xf3cd;</x:String>
<x:String x:Key="IconPersonSafety">&#xf505;</x:String>
<x:String x:Key="IconDataSafety">&#xf56c;</x:String>
<x:String x:Key="IconLegalInfo">&#xf129;</x:String>
</TabbedPage.Resources>
<Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/> <Image Style="{StaticResource Image-Navbar}"/>
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAbout}"/> Text="{x:Static resources:AppResources.MarkingAbout}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage <!--Pages can be added as references or in line-->
<ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabApp}"> Title="{x:Static resources:AppResources.MarkingTabApp}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconSmartphone}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoLicenses" RowSpacing="0">
Source="{Binding InfoLicenses}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoLicenses"
VerticalOptions="CenterAndExpand" Source="{Binding InfoLicenses}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabPrivacy}"> Title="{x:Static resources:AppResources.MarkingTabPrivacy}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconPersonSafety}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoDatenschutz" RowSpacing="0">
Source="{Binding InfoPrivacy}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoDatenschutz"
VerticalOptions="CenterAndExpand" Source="{Binding InfoPrivacy}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabGtc}"> Title="{x:Static resources:AppResources.MarkingTabGtc}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconDataSafety}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoABG" RowSpacing="0">
Source ="{Binding InfoAgb}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoABG"
VerticalOptions="CenterAndExpand" Source ="{Binding InfoAgb}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabImpress}"> Title="{x:Static resources:AppResources.MarkingTabImpress}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconLegalInfo}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoImpressum" RowSpacing="0">
Source="{Binding InfoImpressum}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoImpressum"
VerticalOptions="CenterAndExpand" Source="{Binding InfoImpressum}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
</TabbedPage> </TabbedPage>

View file

@ -121,7 +121,7 @@ namespace TINK.View.Login
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -128,12 +128,12 @@
<TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" /> <TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" />
</Frame.GestureRecognizers> </Frame.GestureRecognizers>
<Grid <Grid
RowDefinitions="18,Auto,1*" RowDefinitions="20,Auto,1*"
ColumnDefinitions="Auto" ColumnDefinitions="Auto"
RowSpacing="0"> RowSpacing="0">
<Image <Image
Grid.Row="1" Grid.Row="1"
Margin="-5"> Margin="-3">
<Image.Source> <Image.Source>
<FontImageSource <FontImageSource
Glyph="{StaticResource IconMyBikes}" Glyph="{StaticResource IconMyBikes}"

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey; using TINK.ViewModel.MiniSurvey;
@ -93,7 +93,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -13,80 +13,103 @@
xmlns:header="clr-namespace:TINK.View.RootShell" xmlns:header="clr-namespace:TINK.View.RootShell"
Title="Shell" Title="Shell"
x:Class="TINK.View.RootShell.AppShell"> x:Class="TINK.View.RootShell.AppShell">
<Shell.FlyoutHeader>
<Shell.FlyoutHeader>
<header:FlyoutHeader/> <header:FlyoutHeader/>
</Shell.FlyoutHeader> </Shell.FlyoutHeader>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent <ShellContent
Title="{x:Static resources:AppResources.MarkingMapPage}" Title="{x:Static resources:AppResources.MarkingMapPage}"
Icon="menu_bikelocations.png" Route="MapPage"
Route="MapPage" ContentTemplate="{DataTemplate mappage:MapPage}">
ContentTemplate="{DataTemplate mappage:MapPage}"/> <ShellContent.FlyoutIcon>
</FlyoutItem> <FontImageSource Glyph="{StaticResource IconMap}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> </ShellContent.FlyoutIcon>
<ShellContent </ShellContent>
Title="{x:Static resources:AppResources.MarkingFindBike}" </FlyoutItem>
Icon="menu_looking.png" <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
IsVisible="{Binding IsFindBikePageVisible}" <ShellContent
ContentTemplate="{DataTemplate findbike:FindBikePage}"> Title="{x:Static resources:AppResources.MarkingFindBike}"
</ShellContent> IsVisible="{Binding IsFindBikePageVisible}"
</FlyoutItem> ContentTemplate="{DataTemplate findbike:FindBikePage}">
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <ShellContent.FlyoutIcon>
<ShellContent <FontImageSource Glyph="{StaticResource IconFindBike}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
Title="{x:Static resources:AppResources.MarkingMyBikes}" </ShellContent.FlyoutIcon>
Icon="menu_mybikes.png" </ShellContent>
IsVisible="{Binding IsMyBikesPageVisible}" </FlyoutItem>
ContentTemplate="{DataTemplate mybikes:MyBikesPage}"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
</ShellContent> <ShellContent
</FlyoutItem> Title="{x:Static resources:AppResources.MarkingMyBikes}"
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> IsVisible="{Binding IsMyBikesPageVisible}"
<ShellContent ContentTemplate="{DataTemplate mybikes:MyBikesPage}">
Title="{x:Static resources:AppResources.MarkingAccount}" <ShellContent.FlyoutIcon>
Icon="menu_account.png" <FontImageSource Glyph="{StaticResource IconMyBikes}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
IsVisible="{Binding IsAccountPageVisible}" </ShellContent.FlyoutIcon>
ContentTemplate="{DataTemplate account:AccountPage}"> </ShellContent>
</ShellContent> </FlyoutItem>
</FlyoutItem> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <ShellContent
<ShellContent Title="{x:Static resources:AppResources.MarkingAccount}"
Title="{x:Static resources:AppResources.MarkingLogin}" IsVisible="{Binding IsAccountPageVisible}"
Icon="menu_account.png" ContentTemplate="{DataTemplate account:AccountPage}">
Route="LoginPage" <ShellContent.FlyoutIcon>
IsVisible="{Binding IsLoginPageVisible}" <FontImageSource Glyph="{StaticResource IconAccount}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
ContentTemplate="{DataTemplate login:LoginPage}"> </ShellContent.FlyoutIcon>
</ShellContent> </ShellContent>
</FlyoutItem> </FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent <ShellContent
Title="{x:Static resources:AppResources.MarkingSettings}" Title="{x:Static resources:AppResources.MarkingLogin}"
Icon="menu_settings.png" Route="LoginPage"
ContentTemplate="{DataTemplate settings:SettingsPage}"> IsVisible="{Binding IsLoginPageVisible}"
</ShellContent> ContentTemplate="{DataTemplate login:LoginPage}">
</FlyoutItem> <ShellContent.FlyoutIcon>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <FontImageSource Glyph="{StaticResource IconLogin}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
<ShellContent </ShellContent.FlyoutIcon>
Title="{x:Static resources:AppResources.MarkingFeesAndBikes}" </ShellContent>
Icon="menu_using.png" </FlyoutItem>
ContentTemplate="{DataTemplate contact:FeesAndBikesPage}"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
</ShellContent> <ShellContent
</FlyoutItem> Title="{x:Static resources:AppResources.MarkingFeedbackAndContact}"
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> Route="ContactPage"
<ShellContent ContentTemplate="{DataTemplate contact:ContactPage}">
Title="{x:Static resources:AppResources.MarkingFeedbackAndContact}" <ShellContent.FlyoutIcon>
Icon="menu_contact.png" <FontImageSource Glyph="{StaticResource IconContact}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
Route="ContactPage" </ShellContent.FlyoutIcon>
ContentTemplate="{DataTemplate contact:ContactPage}"> </ShellContent>
</ShellContent> </FlyoutItem>
</FlyoutItem> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <ShellContent
<ShellContent Title="{x:Static resources:AppResources.MarkingSettings}"
Title="{Binding TabbedPageIngoTitle}" ContentTemplate="{DataTemplate settings:SettingsPage}">
Icon="menu_info.png" <ShellContent.FlyoutIcon>
ContentTemplate="{DataTemplate info:InfoPage}"> <FontImageSource Glyph="{StaticResource IconSettings}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent> </ShellContent.FlyoutIcon>
</FlyoutItem> </ShellContent>
<Shell.FlyoutFooter> </FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFeesAndBikes}"
ContentTemplate="{DataTemplate contact:FeesAndBikesPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconFeesAndBikes}" Color="DimGray" FontFamily="FA-S"/>
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{Binding TabbedPageIngoTitle}"
ContentTemplate="{DataTemplate info:InfoPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconLegalInfo}" Color="DimGray" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<Shell.FlyoutFooter>
<header:FlyoutFooter/> <header:FlyoutFooter/>
</Shell.FlyoutFooter> </Shell.FlyoutFooter>
</Shell> </Shell>

View file

@ -1,20 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" <ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.RootShell.FlyoutHeader"> x:Class="TINK.View.RootShell.FlyoutHeader">
<Grid Padding="0"> <Grid Padding="0">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="80"/> <RowDefinition Height="80"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Image Grid.Row="0"
<ColumnDefinition Width="75"/> Source="menu_swk_theme.png"
<ColumnDefinition Width="1*"/> Aspect="AspectFill"/>
</Grid.ColumnDefinitions> <Label Grid.Row="0"
<Image Source="menu_swk_theme.png" FontSize="20"
Aspect="AspectFill" TextTransform="Uppercase"
Grid.ColumnSpan="2"/> TextColor="White"
<Label Style="{StaticResource Label-Navbar}" VerticalOptions="Center"
Text="{x:Static resources:AppResources.MarkingFlyoutHeader}"/> HorizontalOptions="Start"
Padding="20"
Text="{x:Static resources:AppResources.MarkingFlyoutHeader}"/>
</Grid> </Grid>
</ContentView> </ContentView>

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
#if USERFEEDBACKDLG_TRYOUT #if USERFEEDBACKDLG_TRYOUT
@ -165,4 +165,4 @@ namespace TINK.View.Settings
} }
#endif #endif
} }
} }

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device; using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
/// <summary> /// <summary>
@ -103,4 +103,4 @@ namespace TINK.View.WhatsNew
}); });
} }
} }
} }

View file

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ShareeSharedGuiLib.ViewModel; using ShareeSharedGuiLib.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
@ -24,7 +19,7 @@ namespace ShareeSharedGuiLib.View
} }
/// <summary> /// <summary>
/// Create bindable property to to allow "Maximum"- proptery to act as a valid target for data binding. /// Create bindable property to allow "Maximum"- property to act as a valid target for data binding.
/// </summary> /// </summary>
public static readonly BindableProperty MaximumProperty = BindableProperty.Create( public static readonly BindableProperty MaximumProperty = BindableProperty.Create(
"Maximum", "Maximum",
@ -34,7 +29,7 @@ namespace ShareeSharedGuiLib.View
propertyChanged: OnMaximumChanged); propertyChanged: OnMaximumChanged);
/// <summary> /// <summary>
/// Holds the count of bars wich represent charing level full. /// Holds the count of bars which represent charing level full.
/// </summary> /// </summary>
public string Maximum public string Maximum
{ {
@ -58,7 +53,7 @@ namespace ShareeSharedGuiLib.View
/// <summary> /// <summary>
/// Create bindable property to to allow "Current"- proptery to act as a valid target for data binding. /// Create bindable property to allow "Current"- property to act as a valid target for data binding.
/// </summary> /// </summary>
public static readonly BindableProperty CurrentProperty = BindableProperty.Create( public static readonly BindableProperty CurrentProperty = BindableProperty.Create(
"Current", "Current",
@ -68,7 +63,7 @@ namespace ShareeSharedGuiLib.View
propertyChanged: OnCurrentChanged); propertyChanged: OnCurrentChanged);
/// <summary> /// <summary>
/// Holds the count of bars wich represent the current charing level. /// Holds the count of bars which represent the current charing level.
/// </summary> /// </summary>
public string Current public string Current
{ {
@ -91,4 +86,4 @@ namespace ShareeSharedGuiLib.View
public void SetCurrent(int? current) => _LocalViewModel.Current = current; public void SetCurrent(int? current) => _LocalViewModel.Current = current;
} }
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.370" android:versionCode="370"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.371" android:versionCode="371">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" /> <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
<!-- Google Maps related permissions --> <!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services --> <!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -56,8 +56,8 @@
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>sharee.bike</string> <string>sharee.bike</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>370</string> <string>371</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.0.370</string> <string>3.0.371</string>
</dict> </dict>
</plist> </plist>

View file

@ -15,10 +15,11 @@
<x:String x:Key="IconAccount">&#xf007;</x:String> <x:String x:Key="IconAccount">&#xf007;</x:String>
<x:String x:Key="IconLogin">&#xf2f6;</x:String> <x:String x:Key="IconLogin">&#xf2f6;</x:String>
<x:String x:Key="IconSettings">&#xf013;</x:String> <x:String x:Key="IconSettings">&#xf013;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String> <x:String x:Key="IconFeesAndBikes">&#xf128;</x:String>
<x:String x:Key="IconContact">&#xf0e0;</x:String> <x:String x:Key="IconContact">&#xf0e0;</x:String>
<x:String x:Key="IconInfo">&#xf05a;</x:String> <x:String x:Key="IconInfo">&#xf05a;</x:String>
<x:String x:Key="IconClose">&#xf00d;</x:String> <x:String x:Key="IconClose">&#xf00d;</x:String>
<x:String x:Key="IconLegalInfo">&#xf129;</x:String>
<!--TogglePasswortEntry--> <!--TogglePasswortEntry-->
<x:String x:Key="EyeOpen">&#xf06e;</x:String> <x:String x:Key="EyeOpen">&#xf06e;</x:String>

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -250,7 +250,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using Serilog; using Serilog;
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -29,8 +29,11 @@ namespace TINK.View.Contact
{ {
InitializeComponent(); InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel( ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(), App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(), () => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl), () => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this); this);
@ -122,7 +125,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT
@ -133,4 +136,4 @@ namespace TINK.View.Contact
public INavigationMasterDetail NavigationMasterDetail { set; private get; } public INavigationMasterDetail NavigationMasterDetail { set; private get; }
#endif #endif
} }
} }

View file

@ -117,7 +117,7 @@ namespace TINK.View.Contact
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT

View file

@ -12,7 +12,7 @@ namespace TINK.View
/// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param> /// <param name="battery">Object holding info about battery. For some batteries charging level might need to be updated by user.</param>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
public FeedbackPopup( public FeedbackPopup(
IBattery battery = null, IBatteryMutable battery = null,
string co2Saving = null) string co2Saving = null)
{ {
InitializeComponent(); InitializeComponent();

View file

@ -1,29 +1,88 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" <TabbedPage
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TINK.View.Contact.FeesAndBikesPage"> xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.FeesAndBikesPage"
Style="{StaticResource TabbedPageStyle}">
<TabbedPage.Resources>
<x:String x:Key="IconSmartphone">&#xf3cd;</x:String>
<x:String x:Key="IconTariff">&#xf4c0;</x:String>
<x:String x:Key="IconFaq">&#xf059;</x:String>
</TabbedPage.Resources>
<Shell.TitleView> <Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/> Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage <!--Pages can be added as references or in line-->
<ContentPage
x:Name="FaqPage"
IsEnabled="{Binding IsIdle}"
Title="FAQ">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconFaq}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content>
<Grid
RowDefinitions="Auto,*,Auto"
RowSpacing="0">
<BoxView Grid.Row="0"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<WebView Grid.Row="1"
x:Name="FAQWebView"
HeightRequest="1000"
WidthRequest="1000"
Source="{Binding FAQ}"/>
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid>
</ContentPage.Content>
</ContentPage>
<ContentPage
x:Name="ManualPage"
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabBikes}"> Title="{x:Static resources:AppResources.MarkingTabBikes}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconSmartphone}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
RowSpacing="0">
<BoxView Grid.Row="0"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<WebView Grid.Row="1"
x:Name="InfoTypesOfBikesWebView" x:Name="InfoTypesOfBikesWebView"
HeightRequest="1000" HeightRequest="1000"
WidthRequest="1000" WidthRequest="1000"
Source="{Binding TypesOfBikesText}"/> Source="{Binding TypesOfBikesText}"/>
<ActivityIndicator Grid.Row="0" <BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2" Scale="2"
@ -34,19 +93,32 @@
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
x:Name="TariffPage"
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabFees}"> Title="{x:Static resources:AppResources.MarkingTabFees}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconTariff}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content> <ContentPage.Content>
<Grid> <Grid
<Grid.RowDefinitions> RowDefinitions="Auto,*,Auto"
<RowDefinition Height="*"/> RowSpacing="0">
</Grid.RowDefinitions> <BoxView Grid.Row="0"
<WebView HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<WebView Grid.Row="1"
x:Name="InfoRentBikeWebView" x:Name="InfoRentBikeWebView"
HeightRequest="1000" HeightRequest="1000"
WidthRequest="1000" WidthRequest="1000"
Source="{Binding RentBikeText}"/> Source="{Binding RentBikeText}"/>
<ActivityIndicator Grid.Row="0" <BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2" Scale="2"

View file

@ -1,3 +1,4 @@
using System.Globalization;
using Serilog; using Serilog;
using TINK.ViewModel; using TINK.ViewModel;
using TINK.ViewModel.Contact; using TINK.ViewModel.Contact;
@ -36,6 +37,7 @@ namespace TINK.View.Contact
App.ModelRoot.ResourceUrls.FeesResourcePath, App.ModelRoot.ResourceUrls.FeesResourcePath,
App.ModelRoot.ResourceUrls.BikesResourcePath, App.ModelRoot.ResourceUrls.BikesResourcePath,
App.ModelRoot.IsSiteCachingOn, App.ModelRoot.IsSiteCachingOn,
CultureInfo.CurrentUICulture.TwoLetterISOLanguageName,
() => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query, () => App.ModelRoot.GetConnector(App.ModelRoot.GetIsConnected()).Query,
resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls); resourceUrls => App.ModelRoot.ResourceUrls = resourceUrls);

View file

@ -182,7 +182,7 @@ namespace TINK.View.FindBike
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -3,104 +3,162 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TINK.View.Info.InfoPage" x:Class="TINK.View.Info.InfoPage"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib" xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
Style="{StaticResource TabbedPageStyle}"
x:Name="TabbedInfoPage"> x:Name="TabbedInfoPage">
<Shell.TitleView>
<TabbedPage.Resources>
<x:String x:Key="IconSmartphone">&#xf3cd;</x:String>
<x:String x:Key="IconPersonSafety">&#xf505;</x:String>
<x:String x:Key="IconDataSafety">&#xf56c;</x:String>
<x:String x:Key="IconLegalInfo">&#xf129;</x:String>
</TabbedPage.Resources>
<Shell.TitleView>
<Grid ColumnDefinitions="Auto, 1*"> <Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}" <Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAbout}"/> Text="{x:Static resources:AppResources.MarkingAbout}"/>
</Grid> </Grid>
</Shell.TitleView> </Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage <!--Pages can be added as references or in line-->
IsEnabled="{Binding IsIdle}" <ContentPage
Title="{x:Static resources:AppResources.MarkingTabApp}"> IsEnabled="{Binding IsIdle}"
<ContentPage.Content> Title="{x:Static resources:AppResources.MarkingTabApp}">
<Grid> <ContentPage.IconImageSource>
<Grid.RowDefinitions> <FontImageSource Glyph="{StaticResource IconSmartphone}" FontFamily="FA-S" />
<RowDefinition Height="*"/> </ContentPage.IconImageSource>
</Grid.RowDefinitions> <ContentPage.Content>
<WebView <Grid
x:Name="InfoLicenses" RowDefinitions="Auto,*,Auto"
Source="{Binding InfoLicenses}" RowSpacing="0">
HeightRequest="1000" <BoxView Grid.Row="0"
WidthRequest="1000" /> HeightRequest="1"
<ActivityIndicator Grid.Row="0" WidthRequest="400"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" HorizontalOptions="Center"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
Scale="2" <WebView Grid.Row="1"
VerticalOptions="CenterAndExpand" x:Name="InfoLicenses"
HorizontalOptions="CenterAndExpand" Source="{Binding InfoLicenses}"
Color="{x:DynamicResource primary-back-title-color}"/> HeightRequest="1000"
WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabPrivacy}"> Title="{x:Static resources:AppResources.MarkingTabPrivacy}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconPersonSafety}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoDatenschutz" RowSpacing="0">
Source="{Binding InfoPrivacy}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoDatenschutz"
VerticalOptions="CenterAndExpand" Source="{Binding InfoPrivacy}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabGtc}"> Title="{x:Static resources:AppResources.MarkingTabGtc}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconDataSafety}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoABG" RowSpacing="0">
Source ="{Binding InfoAgb}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoABG"
VerticalOptions="CenterAndExpand" Source ="{Binding InfoAgb}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
<ContentPage <ContentPage
IsEnabled="{Binding IsIdle}" IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabImpress}"> Title="{x:Static resources:AppResources.MarkingTabImpress}">
<ContentPage.Content> <ContentPage.IconImageSource>
<Grid> <FontImageSource Glyph="{StaticResource IconLegalInfo}" FontFamily="FA-S" />
<Grid.RowDefinitions> </ContentPage.IconImageSource>
<RowDefinition Height="*"/> <ContentPage.Content>
</Grid.RowDefinitions> <Grid
<WebView RowDefinitions="Auto,*,Auto"
x:Name="InfoImpressum" RowSpacing="0">
Source="{Binding InfoImpressum}" <BoxView Grid.Row="0"
HeightRequest="1000" HeightRequest="1"
WidthRequest="1000" /> WidthRequest="400"
<ActivityIndicator Grid.Row="0" HorizontalOptions="Center"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" Color="{x:DynamicResource primary-back-title-color}"/>
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}" <WebView Grid.Row="1"
Scale="2" x:Name="InfoImpressum"
VerticalOptions="CenterAndExpand" Source="{Binding InfoImpressum}"
HorizontalOptions="CenterAndExpand" HeightRequest="1000"
Color="{x:DynamicResource primary-back-title-color}"/> WidthRequest="1000" />
<BoxView Grid.Row="2"
HeightRequest="1"
WidthRequest="400"
HorizontalOptions="Center"
Color="{x:DynamicResource primary-back-title-color}"/>
<ActivityIndicator Grid.Row="0" Grid.RowSpan="3"
IsRunning="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Color="{x:DynamicResource primary-back-title-color}"/>
</Grid> </Grid>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>
</TabbedPage> </TabbedPage>

View file

@ -121,7 +121,7 @@ namespace TINK.View.Login
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -126,12 +126,12 @@
<TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" /> <TapGestureRecognizer Command="{Binding OnMyBikesButtonClicked}" />
</Frame.GestureRecognizers> </Frame.GestureRecognizers>
<Grid <Grid
RowDefinitions="18,Auto,1*" RowDefinitions="20,Auto,1*"
ColumnDefinitions="Auto" ColumnDefinitions="Auto"
RowSpacing="0"> RowSpacing="0">
<Image <Image
Grid.Row="1" Grid.Row="1"
Margin="-5"> Margin="-3">
<Image.Source> <Image.Source>
<FontImageSource <FontImageSource
Glyph="{StaticResource IconMyBikes}" Glyph="{StaticResource IconMyBikes}"

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
#if USEFLYOUT #if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey; using TINK.ViewModel.MiniSurvey;
@ -93,7 +93,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
} }
} }

View file

@ -70,6 +70,16 @@
</ShellContent.FlyoutIcon> </ShellContent.FlyoutIcon>
</ShellContent> </ShellContent>
</FlyoutItem> </FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFeedbackAndContact}"
Route="ContactPage"
ContentTemplate="{DataTemplate contact:ContactPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconContact}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent <ShellContent
Title="{x:Static resources:AppResources.MarkingSettings}" Title="{x:Static resources:AppResources.MarkingSettings}"
@ -79,22 +89,13 @@
</ShellContent.FlyoutIcon> </ShellContent.FlyoutIcon>
</ShellContent> </ShellContent>
</FlyoutItem> </FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems"> <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent <ShellContent
Title="{x:Static resources:AppResources.MarkingFeesAndBikes}" Title="{x:Static resources:AppResources.MarkingFeesAndBikes}"
ContentTemplate="{DataTemplate contact:FeesAndBikesPage}"> ContentTemplate="{DataTemplate contact:FeesAndBikesPage}">
<ShellContent.FlyoutIcon> <ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconFeesAndBikes}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" /> <FontImageSource Glyph="{StaticResource IconFeesAndBikes}" Color="DimGray" FontFamily="FA-S"/>
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFeedbackAndContact}"
Route="ContactPage"
ContentTemplate="{DataTemplate contact:ContactPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconContact}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon> </ShellContent.FlyoutIcon>
</ShellContent> </ShellContent>
</FlyoutItem> </FlyoutItem>
@ -103,7 +104,7 @@
Title="{Binding TabbedPageIngoTitle}" Title="{Binding TabbedPageIngoTitle}"
ContentTemplate="{DataTemplate info:InfoPage}"> ContentTemplate="{DataTemplate info:InfoPage}">
<ShellContent.FlyoutIcon> <ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconInfo}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" /> <FontImageSource Glyph="{StaticResource IconLegalInfo}" Color="DimGray" FontFamily="FA-S" />
</ShellContent.FlyoutIcon> </ShellContent.FlyoutIcon>
</ShellContent> </ShellContent>
</FlyoutItem> </FlyoutItem>

View file

@ -1,4 +1,4 @@
using TINK.ViewModel; using TINK.ViewModel;
using Xamarin.Forms; using Xamarin.Forms;
using Xamarin.Forms.Xaml; using Xamarin.Forms.Xaml;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary> /// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param> /// <param name="co2Saving"> Co2 saving information.</param>
/// <returns>User feedback.</returns> /// <returns>User feedback.</returns>
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving)); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup(battery, co2Saving));
#endif #endif
#if USERFEEDBACKDLG_TRYOUT #if USERFEEDBACKDLG_TRYOUT
@ -165,4 +165,4 @@ namespace TINK.View.Settings
} }
#endif #endif
} }
} }

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
} }
} }

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS; using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device; using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9 #if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException(); public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#else #else
public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBattery battery = null, string co2Saving = null) => throw new NotSupportedException(); public async Task<IUserFeedback> DisplayUserFeedbackPopup(IBatteryMutable battery = null, string co2Saving = null) => throw new NotSupportedException();
#endif #endif
/// <summary> /// <summary>
@ -103,4 +103,4 @@ namespace TINK.View.WhatsNew
}); });
} }
} }
} }

View file

@ -22,7 +22,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
/// <summary> /// <summary>
/// Holds the drive object. /// Holds the drive object.
/// </summary> /// </summary>
public Drive Drive { get; } public DriveMutable Drive { get; }
/// <summary> Gets the information where the data origins from. </summary> /// <summary> Gets the information where the data origins from. </summary>
public DataSource DataSource { get; } public DataSource DataSource { get; }
@ -32,7 +32,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
protected BikeInfo( protected BikeInfo(
IStateInfo stateInfo, IStateInfo stateInfo,
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
bool? isDemo = DEFAULTVALUEISDEMO, bool? isDemo = DEFAULTVALUEISDEMO,
IEnumerable<string> group = null, IEnumerable<string> group = null,

View file

@ -15,7 +15,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
private readonly Bike _Bike; private readonly Bike _Bike;
/// <summary> Holds the drive of the bike. </summary> /// <summary> Holds the drive of the bike. </summary>
private readonly Drive _Drive; private readonly DriveMutable _Drive;
/// <summary> Holds the state info of the bike. </summary> /// <summary> Holds the state info of the bike. </summary>
private readonly StateInfoMutable _StateInfo; private readonly StateInfoMutable _StateInfo;
@ -31,7 +31,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
/// <param name="stateInfo">Bike state info.</param> /// <param name="stateInfo">Bike state info.</param>
protected BikeInfoMutable( protected BikeInfoMutable(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
bool isDemo = BikeInfo.DEFAULTVALUEISDEMO, bool isDemo = BikeInfo.DEFAULTVALUEISDEMO,
IEnumerable<string> group = null, IEnumerable<string> group = null,
@ -105,7 +105,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
public string Description => _Bike.Description; public string Description => _Bike.Description;
public Drive Drive => _Drive; public DriveMutable Drive => _Drive;
/// <summary> /// <summary>
/// Fired whenever property of bike changes. /// Fired whenever property of bike changes.

View file

@ -18,7 +18,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
/// <summary> /// <summary>
/// Holds the drive. /// Holds the drive.
/// </summary> /// </summary>
Drive Drive { get; } DriveMutable Drive { get; }
/// <summary> Gets or sets the information where the data origins from. </summary> /// <summary> Gets or sets the information where the data origins from. </summary>
DataSource DataSource { get; } DataSource DataSource { get; }

View file

@ -59,7 +59,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
/// <summary> /// <summary>
/// Hold the drive object. /// Hold the drive object.
/// </summary> /// </summary>
Drive Drive { get; } DriveMutable Drive { get; }
/// <summary> Gets or sets the information where the data origins from. </summary> /// <summary> Gets or sets the information where the data origins from. </summary>
DataSource DataSource { get; set; } DataSource DataSource { get; set; }

View file

@ -20,7 +20,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
/// <param name="tariffDescription">Hold tariff description of bike.</param> /// <param name="tariffDescription">Hold tariff description of bike.</param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
int lockId, int lockId,
Guid lockGuid, Guid lockGuid,
@ -65,7 +65,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
/// <param name="dateTimeProvider">Date time provider to calculate remaining time.</param> /// <param name="dateTimeProvider">Date time provider to calculate remaining time.</param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
int lockId, int lockId,
Guid lockGuid, Guid lockGuid,
@ -121,7 +121,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
/// <param name="wheelType"></param> /// <param name="wheelType"></param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
int lockId, int lockId,
Guid lockGuid, Guid lockGuid,

View file

@ -32,7 +32,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
} }
/// <summary> /// <summary>
/// Possible steps of closing a lock. /// Possible states of closing a lock.
/// </summary> /// </summary>
public enum State public enum State
{ {
@ -182,7 +182,8 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
} }
} }
// Start query geolocation data. //// Start Action
//// Step: Start query geolocation data.
Log.ForContext<T>().Debug($"Starting step {Step.StartingQueryingLocation}..."); Log.ForContext<T>().Debug($"Starting step {Step.StartingQueryingLocation}...");
InvokeCurrentStep(Step.StartingQueryingLocation); InvokeCurrentStep(Step.StartingQueryingLocation);
var ctsLocation = new CancellationTokenSource(); var ctsLocation = new CancellationTokenSource();
@ -199,7 +200,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
await InvokeCurrentStateAsync(State.StartGeolocationException, ex.Message); await InvokeCurrentStateAsync(State.StartGeolocationException, ex.Message);
} }
// Close lock. //// Step: Close lock.
IGeolocation currentLocation; IGeolocation currentLocation;
Log.ForContext<T>().Debug($"Starting step {Step.ClosingLock}..."); Log.ForContext<T>().Debug($"Starting step {Step.ClosingLock}...");
InvokeCurrentStep(Step.ClosingLock); InvokeCurrentStep(Step.ClosingLock);
@ -236,7 +237,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
// Signal cts to cancel getting geolocation. // Signal cts to cancel getting geolocation.
ctsLocation.Cancel(); ctsLocation.Cancel();
//// Step: Wait until getting geolocation and stop polling has completed. // Wait until getting geolocation and stop polling has completed.
currentLocation = await WaitForPendingTasks(currentLocationTask); currentLocation = await WaitForPendingTasks(currentLocationTask);
// Update current state from exception // Update current state from exception
@ -256,14 +257,14 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
throw; throw;
} }
// Step: Update backend. // Update backend.
// Do this even if current lock state is open (lock state must not necessarily be open before try to open, i.e. something undefined between open and closed). // Do this even if current lock state is open (lock state must not necessarily be open before try to open, i.e. something undefined between open and closed).
await UpdateLockingState(currentLocation, timeStampNow); await UpdateLockingState(currentLocation, timeStampNow);
throw; throw;
} }
//// Step: Wait until getting geolocation and stop polling has completed. //// Step: Wait until getting geolocation and stop polling has completed.
currentLocation = await WaitForPendingTasks(currentLocationTask); currentLocation = await WaitForPendingTasks(currentLocationTask);
bike.LockInfo.State = lockingState?.GetLockingState() ?? LockingState.UnknownDisconnected; bike.LockInfo.State = lockingState?.GetLockingState() ?? LockingState.UnknownDisconnected;
@ -276,7 +277,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
return; return;
} }
//// Step: Update backend. //// Step: Update backend.
await UpdateLockingState(currentLocation, timeStampNow); await UpdateLockingState(currentLocation, timeStampNow);
} }
} }

View file

@ -97,6 +97,8 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
} }
} }
//// Start Action
//// Step: Start query geolocation data.
InvokeCurrentStep(Step.StartingQueryLocation); InvokeCurrentStep(Step.StartingQueryLocation);
// Get geolocation which was requested when closing lock. // Get geolocation which was requested when closing lock.
@ -123,7 +125,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
await InvokeCurrentStateAsync(State.DisconnetedNoLocationError, ""); await InvokeCurrentStateAsync(State.DisconnetedNoLocationError, "");
// Disconnect lock. //// Step: Disconnect lock.
InvokeCurrentStep(Step.DisconnectingLockOnDisconnectedNoLocationError); InvokeCurrentStep(Step.DisconnectingLockOnDisconnectedNoLocationError);
try try
{ {

View file

@ -22,7 +22,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
/// <param name="tariffDescription">Hold tariff description of bike.</param> /// <param name="tariffDescription">Hold tariff description of bike.</param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
string currentStationId, string currentStationId,
LockInfo lockInfo, LockInfo lockInfo,
@ -70,7 +70,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
/// <param name="dateTimeProvider">Provider for current date time to calculate remaining time on demand for state of type reserved.</param> /// <param name="dateTimeProvider">Provider for current date time to calculate remaining time on demand for state of type reserved.</param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
DateTime requestedAt, DateTime requestedAt,
string mailAddress, string mailAddress,
@ -122,7 +122,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
/// <param name="tariffDescription">Hold tariff description of bike.</param> /// <param name="tariffDescription">Hold tariff description of bike.</param>
public BikeInfo( public BikeInfo(
Bike bike, Bike bike,
Drive drive, DriveMutable drive,
DataSource dataSource, DataSource dataSource,
DateTime bookedAt, DateTime bookedAt,
string mailAddress, string mailAddress,

View file

@ -2,32 +2,35 @@ using Serilog;
namespace TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS namespace TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS
{ {
/// <summary>
/// Holds the state of a chargeable battery.
/// </summary>
public class Battery : IBattery public class Battery : IBattery
{ {
private Battery() { } private Battery() { }
/// <summary> /// <summary>
/// Holds the current charging level of the battery in percent, double.NaN if unknown. /// Gets the current charging level of the battery in percent, double.NaN if unknown.
/// </summary> /// </summary>
public double CurrentChargePercent { get; private set; } = double.NaN; public double CurrentChargePercent { get; private set; } = double.NaN;
/// <summary> /// <summary>
/// Holds the current charging level of the battery in bars, null if unknown. /// Gets the current charging level of the battery in bars, null if unknown.
/// </summary> /// </summary>
public int? CurrentChargeBars { get; private set; } = null; public int? CurrentChargeBars { get; private set; } = null;
/// <summary> /// <summary>
/// Holds the maximum charging level of the battery in bars, null if unknown. /// Gets the maximum charging level of the battery in bars, null if unknown.
/// </summary> /// </summary>
public int? MaxChargeBars { get; private set; } = null; public int? MaxChargeBars { get; private set; } = null;
/// <summary> /// <summary>
/// Holds whether backend is aware of battery charging level. /// Gets whether backend is aware of battery charging level.
/// </summary> /// </summary>
public bool? IsBackendAccessible { get; private set; } = null; public bool? IsBackendAccessible { get; private set; } = null;
/// <summary> /// <summary>
/// Holds whether to display battery level or not. /// Gets whether to display battery level or not.
/// </summary> /// </summary>
public bool? IsHidden { get; private set; } = null; public bool? IsHidden { get; private set; } = null;

Some files were not shown because too many files have changed in this diff Show more