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

View file

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

View file

@ -1,4 +1,4 @@
using TINK.ViewModel;
using TINK.ViewModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -251,7 +251,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -1,4 +1,4 @@
using Serilog;
using Serilog;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -28,8 +28,11 @@ namespace TINK.View.Contact
{
InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this);
@ -120,7 +123,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
#if USEFLYOUT
using TINK.View.MasterDetail;
@ -116,7 +116,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#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="co2Saving"> Co2 saving information.</param>
public FeedbackPopup(
IBattery battery = null,
IBatteryMutable battery = null,
string co2Saving = null)
{
InitializeComponent();

View file

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

View file

@ -181,7 +181,7 @@ namespace TINK.View.FindBike
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device;
@ -117,7 +117,7 @@ namespace TINK.View.Login
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey;
@ -94,7 +94,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -1,4 +1,4 @@
using TINK.ViewModel;
using TINK.ViewModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
#if USERFEEDBACKDLG_TRYOUT

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
/// <summary>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.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" />
<!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services -->

View file

@ -56,8 +56,8 @@
<key>CFBundleDisplayName</key>
<string>Mein konrad</string>
<key>CFBundleVersion</key>
<string>370</string>
<string>371</string>
<key>CFBundleShortVersionString</key>
<string>3.0.370</string>
<string>3.0.371</string>
</dict>
</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="IconAccount">&#xf007;</x:String>
<x:String x:Key="IconLogin">&#xf2f6;</x:String>
<x:String x:Key="IconSettings">&#xf013;</x:String>
<!--<x:String x:Key="IconFeesAndBikes">&#xf153;</x:String>-->
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String>
<!--<x:String x:Key="IconContact">&#xf095;</x:String>-->
<x:String x:Key="IconContact">&#xf0e0;</x:String>
<x:String x:Key="IconInfo">&#xf05a;</x:String>
<!--<x:String x:Key="IconClose">&#xf00d;</x:String>-->
<x:String x:Key="IconClose">&#xf410;</x:String>
<x:String x:Key="IconSettings">&#xf013;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String>
<x:String x:Key="IconContact">&#xf0e0;</x:String>
<x:String x:Key="IconInfo">&#xf05a;</x:String>
<x:String x:Key="IconClose">&#xf410;</x:String>
<x:String x:Key="IconLegalInfo">&#xf129;</x:String>
<!--TogglePasswortEntry-->
<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.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -11,8 +11,13 @@
<ContentView>
<ContentView.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
</ContentView.Resources>
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
<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
Padding="10"
@ -113,50 +118,115 @@
Grid.RowSpan="2"
Spacing="0"
HorizontalOptions="End"
VerticalOptions="End"
IsVisible="{Binding AaRideType}">
VerticalOptions="End">
<StackLayout
Orientation="Horizontal"
HorizontalOptions="End">
<Image>
<Image.Source>
<FontImageSource
Glyph="{StaticResource LocationPin}"
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 ShowRideTypeInfoCommand}"
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
Spacing="0"
IsVisible="{Binding AaRideType}">
<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 LocationPin}"
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 ShowRideTypeInfoCommand}"
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= "{Binding StationId}"
FontSize="Small"
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>
</Grid>

View file

@ -250,7 +250,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -1,4 +1,4 @@
using Serilog;
using Serilog;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -29,8 +29,11 @@ namespace TINK.View.Contact
{
InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this);
@ -121,7 +124,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -118,7 +118,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#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="co2Saving"> Co2 saving information.</param>
public FeedbackPopup(
IBattery battery = null,
IBatteryMutable battery = null,
string co2Saving = null)
{
InitializeComponent();

View file

@ -1,8 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.FeesAndBikesPage">
<TabbedPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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>
<Grid ColumnDefinitions="Auto, 1*">
<Image Style="{StaticResource Image-Navbar}"/>
@ -10,44 +19,113 @@
Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/>
</Grid>
</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}"
Title="{x:Static resources:AppResources.MarkingTabBikes}">
<ContentPage.Content>
<Grid>
<WebView
x:Name="InfoTypesOfBikesWebView"
HeightRequest="1000"
WidthRequest="1000"
Source="{Binding TypesOfBikesText}"/>
<ActivityIndicator Grid.Row="0"
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}"/>
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconSmartphone}" 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="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>
</ContentPage.Content>
</ContentPage>
</ContentPage.Content>
</ContentPage>
<ContentPage
x:Name="TariffPage"
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabFees}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconTariff}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content>
<Grid>
<WebView
x:Name="InfoRentBikeWebView"
HeightRequest="1000"
WidthRequest="1000"
Source="{Binding RentBikeText}"/>
<ActivityIndicator Grid.Row="0"
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
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="InfoRentBikeWebView"
HeightRequest="1000"
WidthRequest="1000"
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>
</ContentPage.Content>
</ContentPage>

View file

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

View file

@ -177,7 +177,7 @@ namespace TINK.View.FindBike
#if USCSHARP9
public async Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => await Navigation.ShowPopupAsync<FeedbackPopup.Result>(new FeedbackPopup());
#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
}
}

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -3,105 +3,163 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Info.InfoPage"
Style="{StaticResource TabbedPageStyle}"
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*">
<Image Style="{StaticResource Image-Navbar}"/>
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAbout}"/>
</Grid>
</Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage
<!--Pages can be added as references or in line-->
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabApp}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoLicenses"
Source="{Binding InfoLicenses}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconSmartphone}" 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="InfoLicenses"
Source="{Binding InfoLicenses}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabPrivacy}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoDatenschutz"
Source="{Binding InfoPrivacy}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconPersonSafety}" 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="InfoDatenschutz"
Source="{Binding InfoPrivacy}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabGtc}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoABG"
Source ="{Binding InfoAgb}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconDataSafety}" 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="InfoABG"
Source ="{Binding InfoAgb}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabImpress}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoImpressum"
Source="{Binding InfoImpressum}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconLegalInfo}" 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="InfoImpressum"
Source="{Binding InfoImpressum}"
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>
</ContentPage.Content>
</ContentPage>
</ContentPage.Content>
</ContentPage>
</TabbedPage>

View file

@ -121,7 +121,7 @@ namespace TINK.View.Login
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

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

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey;
@ -93,7 +93,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -13,80 +13,103 @@
xmlns:header="clr-namespace:TINK.View.RootShell"
Title="Shell"
x:Class="TINK.View.RootShell.AppShell">
<Shell.FlyoutHeader>
<Shell.FlyoutHeader>
<header:FlyoutHeader/>
</Shell.FlyoutHeader>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingMapPage}"
Icon="menu_bikelocations.png"
Route="MapPage"
ContentTemplate="{DataTemplate mappage:MapPage}"/>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFindBike}"
Icon="menu_looking.png"
IsVisible="{Binding IsFindBikePageVisible}"
ContentTemplate="{DataTemplate findbike:FindBikePage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingMyBikes}"
Icon="menu_mybikes.png"
IsVisible="{Binding IsMyBikesPageVisible}"
ContentTemplate="{DataTemplate mybikes:MyBikesPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingAccount}"
Icon="menu_account.png"
IsVisible="{Binding IsAccountPageVisible}"
ContentTemplate="{DataTemplate account:AccountPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingLogin}"
Icon="menu_account.png"
Route="LoginPage"
IsVisible="{Binding IsLoginPageVisible}"
ContentTemplate="{DataTemplate login:LoginPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingSettings}"
Icon="menu_settings.png"
ContentTemplate="{DataTemplate settings:SettingsPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFeesAndBikes}"
Icon="menu_using.png"
ContentTemplate="{DataTemplate contact:FeesAndBikesPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFeedbackAndContact}"
Icon="menu_contact.png"
Route="ContactPage"
ContentTemplate="{DataTemplate contact:ContactPage}">
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{Binding TabbedPageIngoTitle}"
Icon="menu_info.png"
ContentTemplate="{DataTemplate info:InfoPage}">
</ShellContent>
</FlyoutItem>
<Shell.FlyoutFooter>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingMapPage}"
Route="MapPage"
ContentTemplate="{DataTemplate mappage:MapPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconMap}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingFindBike}"
IsVisible="{Binding IsFindBikePageVisible}"
ContentTemplate="{DataTemplate findbike:FindBikePage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconFindBike}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingMyBikes}"
IsVisible="{Binding IsMyBikesPageVisible}"
ContentTemplate="{DataTemplate mybikes:MyBikesPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconMyBikes}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingAccount}"
IsVisible="{Binding IsAccountPageVisible}"
ContentTemplate="{DataTemplate account:AccountPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconAccount}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingLogin}"
Route="LoginPage"
IsVisible="{Binding IsLoginPageVisible}"
ContentTemplate="{DataTemplate login:LoginPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconLogin}" Color="{DynamicResource Key=primary-back-title-color}" 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>
</FlyoutItem>
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="{x:Static resources:AppResources.MarkingSettings}"
ContentTemplate="{DataTemplate settings:SettingsPage}">
<ShellContent.FlyoutIcon>
<FontImageSource Glyph="{StaticResource IconSettings}" Color="{DynamicResource Key=primary-back-title-color}" FontFamily="FA-S" />
</ShellContent.FlyoutIcon>
</ShellContent>
</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/>
</Shell.FlyoutFooter>
</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"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.RootShell.FlyoutHeader">
<Grid Padding="0">
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Image Source="menu_swk_theme.png"
Aspect="AspectFill"
Grid.ColumnSpan="2"/>
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingFlyoutHeader}"/>
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<Image Grid.Row="0"
Source="menu_swk_theme.png"
Aspect="AspectFill"/>
<Label Grid.Row="0"
FontSize="20"
TextTransform="Uppercase"
TextColor="White"
VerticalOptions="Center"
HorizontalOptions="Start"
Padding="20"
Text="{x:Static resources:AppResources.MarkingFlyoutHeader}"/>
</Grid>
</ContentView>

View file

@ -1,4 +1,4 @@
using TINK.ViewModel;
using TINK.ViewModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
#if USERFEEDBACKDLG_TRYOUT

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
/// <summary>

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 Xamarin.Forms;
using Xamarin.Forms.Xaml;
@ -24,7 +19,7 @@ namespace ShareeSharedGuiLib.View
}
/// <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>
public static readonly BindableProperty MaximumProperty = BindableProperty.Create(
"Maximum",
@ -34,7 +29,7 @@ namespace ShareeSharedGuiLib.View
propertyChanged: OnMaximumChanged);
/// <summary>
/// Holds the count of bars wich represent charing level full.
/// Holds the count of bars which represent charing level full.
/// </summary>
public string Maximum
{
@ -58,7 +53,7 @@ namespace ShareeSharedGuiLib.View
/// <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>
public static readonly BindableProperty CurrentProperty = BindableProperty.Create(
"Current",
@ -68,7 +63,7 @@ namespace ShareeSharedGuiLib.View
propertyChanged: OnCurrentChanged);
/// <summary>
/// Holds the count of bars wich represent the current charing level.
/// Holds the count of bars which represent the current charing level.
/// </summary>
public string Current
{

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.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" />
<!-- Google Maps related permissions -->
<!-- Permission to receive remote notifications from Google Play Services -->

View file

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

View file

@ -15,10 +15,11 @@
<x:String x:Key="IconAccount">&#xf007;</x:String>
<x:String x:Key="IconLogin">&#xf2f6;</x:String>
<x:String x:Key="IconSettings">&#xf013;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf3cd;</x:String>
<x:String x:Key="IconFeesAndBikes">&#xf128;</x:String>
<x:String x:Key="IconContact">&#xf0e0;</x:String>
<x:String x:Key="IconInfo">&#xf05a;</x:String>
<x:String x:Key="IconClose">&#xf00d;</x:String>
<x:String x:Key="IconLegalInfo">&#xf129;</x:String>
<!--TogglePasswortEntry-->
<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.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Account
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -250,7 +250,7 @@ namespace TINK.View.BikesAtStation
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -1,4 +1,4 @@
using Serilog;
using Serilog;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
@ -29,8 +29,11 @@ namespace TINK.View.Contact
{
InitializeComponent();
var l_oModel = App.ModelRoot;
ViewModel = new ContactPageViewModel(
App.ModelRoot.Flavor.GetDisplayName(),
l_oModel,
() => App.CreateAttachment(),
() => DependencyService.Get<IExternalBrowserService>().OpenUrl(DependencyService.Get<IAppInfo>().StoreUrl),
this);
@ -122,7 +125,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -117,7 +117,7 @@ namespace TINK.View.Contact
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#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="co2Saving"> Co2 saving information.</param>
public FeedbackPopup(
IBattery battery = null,
IBatteryMutable battery = null,
string co2Saving = null)
{
InitializeComponent();

View file

@ -1,29 +1,88 @@
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
x:Class="TINK.View.Contact.FeesAndBikesPage">
<TabbedPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
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>
<Grid ColumnDefinitions="Auto, 1*">
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingFeesAndBikes}"/>
</Grid>
</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}"
Title="{x:Static resources:AppResources.MarkingTabBikes}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconSmartphone}" 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="InfoTypesOfBikesWebView"
HeightRequest="1000"
WidthRequest="1000"
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}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"
@ -34,19 +93,32 @@
</ContentPage.Content>
</ContentPage>
<ContentPage
x:Name="TariffPage"
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabFees}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconTariff}" FontFamily="FA-S" />
</ContentPage.IconImageSource>
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
<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="InfoRentBikeWebView"
HeightRequest="1000"
WidthRequest="1000"
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}}"
IsVisible="{Binding IsIdle, Converter={StaticResource InvertedBoolConverter}}"
Scale="2"

View file

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

View file

@ -182,7 +182,7 @@ namespace TINK.View.FindBike
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -123,7 +123,7 @@ namespace TINK.View.Info.BikeInfo
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -3,104 +3,162 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TINK.View.Info.InfoPage"
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
Style="{StaticResource TabbedPageStyle}"
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*">
<Label Style="{StaticResource Label-Navbar}"
Text="{x:Static resources:AppResources.MarkingAbout}"/>
</Grid>
</Shell.TitleView>
<!--Pages can be added as references or inline-->
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabApp}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoLicenses"
Source="{Binding InfoLicenses}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
<!--Pages can be added as references or in line-->
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabApp}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconSmartphone}" 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="InfoLicenses"
Source="{Binding InfoLicenses}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabPrivacy}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoDatenschutz"
Source="{Binding InfoPrivacy}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabPrivacy}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconPersonSafety}" 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="InfoDatenschutz"
Source="{Binding InfoPrivacy}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabGtc}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoABG"
Source ="{Binding InfoAgb}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabGtc}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconDataSafety}" 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="InfoABG"
Source ="{Binding InfoAgb}"
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>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabImpress}">
<ContentPage.Content>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<WebView
x:Name="InfoImpressum"
Source="{Binding InfoImpressum}"
HeightRequest="1000"
WidthRequest="1000" />
<ActivityIndicator Grid.Row="0"
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}"/>
</ContentPage.Content>
</ContentPage>
<ContentPage
IsEnabled="{Binding IsIdle}"
Title="{x:Static resources:AppResources.MarkingTabImpress}">
<ContentPage.IconImageSource>
<FontImageSource Glyph="{StaticResource IconLegalInfo}" 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="InfoImpressum"
Source="{Binding InfoImpressum}"
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>
</ContentPage.Content>
</ContentPage>
</ContentPage.Content>
</ContentPage>
</TabbedPage>

View file

@ -121,7 +121,7 @@ namespace TINK.View.Login
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

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

View file

@ -121,7 +121,7 @@ namespace TINK.View.Map
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
#if USEFLYOUT

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.ViewModel.MiniSurvey;
@ -93,7 +93,7 @@ namespace TINK.View.MiniSurvey
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

@ -181,7 +181,7 @@ namespace TINK.View.MyBikes
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
}
}

View file

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

View file

@ -1,4 +1,4 @@
using TINK.ViewModel;
using TINK.ViewModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Threading.Tasks;
@ -150,7 +150,7 @@ namespace TINK.View.Settings
/// <summary> Displays user feedback popup.</summary>
/// <param name="co2Saving"> Co2 saving information.</param>
/// <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
#if USERFEEDBACKDLG_TRYOUT

View file

@ -77,7 +77,7 @@ namespace TINK.View.WhatsNew.Agb
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
}
}

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Threading.Tasks;
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
using TINK.Model.Device;
@ -80,7 +80,7 @@ namespace TINK.View.WhatsNew
#if USCSHARP9
public Task<IViewService.IUserFeedback> DisplayUserFeedbackPopup() => throw new NotSupportedException();
#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
/// <summary>

View file

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

View file

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

View file

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

View file

@ -59,7 +59,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BC
/// <summary>
/// Hold the drive object.
/// </summary>
Drive Drive { get; }
DriveMutable Drive { get; }
/// <summary> Gets or sets the information where the data origins from. </summary>
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>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
int lockId,
Guid lockGuid,
@ -65,7 +65,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
/// <param name="dateTimeProvider">Date time provider to calculate remaining time.</param>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
int lockId,
Guid lockGuid,
@ -121,7 +121,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
/// <param name="wheelType"></param>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
int lockId,
Guid lockGuid,

View file

@ -32,7 +32,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
}
/// <summary>
/// Possible steps of closing a lock.
/// Possible states of closing a lock.
/// </summary>
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}...");
InvokeCurrentStep(Step.StartingQueryingLocation);
var ctsLocation = new CancellationTokenSource();
@ -199,7 +200,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
await InvokeCurrentStateAsync(State.StartGeolocationException, ex.Message);
}
// Close lock.
//// Step: Close lock.
IGeolocation currentLocation;
Log.ForContext<T>().Debug($"Starting step {Step.ClosingLock}...");
InvokeCurrentStep(Step.ClosingLock);
@ -236,7 +237,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
// Signal cts to cancel getting geolocation.
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);
// Update current state from exception
@ -256,14 +257,14 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
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).
await UpdateLockingState(currentLocation, timeStampNow);
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);
bike.LockInfo.State = lockingState?.GetLockingState() ?? LockingState.UnknownDisconnected;
@ -276,7 +277,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
return;
}
//// Step: Update backend.
//// Step: Update backend.
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);
// Get geolocation which was requested when closing lock.
@ -123,7 +125,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock.Command
await InvokeCurrentStateAsync(State.DisconnetedNoLocationError, "");
// Disconnect lock.
//// Step: Disconnect lock.
InvokeCurrentStep(Step.DisconnectingLockOnDisconnectedNoLocationError);
try
{

View file

@ -22,7 +22,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
/// <param name="tariffDescription">Hold tariff description of bike.</param>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
string currentStationId,
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>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
DateTime requestedAt,
string mailAddress,
@ -122,7 +122,7 @@ namespace TINK.Model.Bikes.BikeInfoNS.CopriLock
/// <param name="tariffDescription">Hold tariff description of bike.</param>
public BikeInfo(
Bike bike,
Drive drive,
DriveMutable drive,
DataSource dataSource,
DateTime bookedAt,
string mailAddress,

View file

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

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