Version 3.0.255

This commit is contained in:
Oliver Hauff 2021-11-07 19:42:59 +01:00
parent db9c288584
commit 5a26bf273b
1495 changed files with 159465 additions and 5060 deletions

View file

@ -12,7 +12,7 @@ using TINK.Model.User;
using TINK.View;
using TINK.ViewModel.Bikes.Bike;
using TINK.ViewModel.Bikes.Bike.BC;
using Plugin.Permissions.Abstractions;
using TINK.Services.Permissions;
using Plugin.BLE.Abstractions.Contracts;
using TINK.MultilingualResources;
using TINK.Model.Device;
@ -91,7 +91,7 @@ namespace TINK.ViewModel.Bikes
/// <param name="viewService">Interface to actuate methodes on GUI.</param>
public BikesViewModel(
User user,
IPermissions permissions,
ILocationPermission permissions,
IBluetoothLE bluetoothLE,
string runtimPlatform,
Func<bool> isConnectedDelegate,
@ -231,7 +231,7 @@ namespace TINK.ViewModel.Bikes
/// <summary>
/// Service to manage permissions (location) of the app.
/// </summary>
protected IPermissions PermissionsService { get; private set; }
protected ILocationPermission PermissionsService { get; private set; }
/// <summary>
/// Service to manage bluetooth stack.

View file

@ -18,10 +18,9 @@ using TINK.Services.BluetoothLock;
using TINK.Model.Services.Geolocation;
using TINK.ViewModel.Bikes;
using TINK.Services.BluetoothLock.Tdo;
using Plugin.Permissions.Abstractions;
using Plugin.BLE.Abstractions.Contracts;
using TINK.MultilingualResources;
using Plugin.Permissions;
using TINK.Services.Permissions;
using TINK.Model.Station;
using TINK.Model.Device;
@ -59,7 +58,7 @@ namespace TINK.ViewModel.BikesAtStation
/// <param name="viewService">Interface to actuate methodes on GUI.</param>
public BikesAtStationPageViewModel(
User user,
IPermissions permissions,
ILocationPermission permissions,
IBluetoothLE bluetoothLE,
string runtimPlatform,
IStation selectedStation,
@ -81,6 +80,10 @@ namespace TINK.ViewModel.BikesAtStation
Title = string.Format(m_oStation?.StationName != null
? m_oStation.StationName
: string.Empty);
StationDetailText = string.Format(m_oStation?.Id != null
? string.Format(AppResources.MarkingBikesAtStationStationId, m_oStation.Id)
: string.Empty); ;
CollectionChanged += (sender, eventargs) =>
{
@ -121,8 +124,8 @@ namespace TINK.ViewModel.BikesAtStation
public string ContactSupportHintText
=> string.Format(AppResources.MarkingContactSupport, m_oStation?.OperatorData?.Name ?? "Operator");
/// <summary> Returns if info about the fact that user did not request or book any bikes is visible or not.<summary>
/// Gets message that logged in user has not booked any bikes.
/// <summary>
/// Returns if info about the fact that user did not request or book any bikes is visible or not.
/// </summary>
public bool IsNoBikesAtStationVisible
{
@ -207,6 +210,9 @@ namespace TINK.ViewModel.BikesAtStation
}
}
/// <summary> Returns detailed info about the station (station id).<summary>
public string StationDetailText { get; private set; }
/// <summary>
/// Invoked when page is shown.
/// Starts update process.
@ -233,10 +239,6 @@ namespace TINK.ViewModel.BikesAtStation
.Select(x => x.LockInfo)
.ToList();
Title = string.Format(m_oStation?.StationName != null
? m_oStation.StationName
: string.Empty);
if (LockService is ILocksServiceFake serviceFake)
{
serviceFake.UpdateSimulation(bikesAtStation);
@ -248,12 +250,12 @@ namespace TINK.ViewModel.BikesAtStation
if (bikesAtStation.GetLockIt().Count > 0
&& RuntimePlatform == Device.Android)
{
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
if (status != PermissionStatus.Granted)
var status = await PermissionsService.CheckStatusAsync();
if (status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,

View file

@ -15,18 +15,12 @@ using System.Collections.ObjectModel;
#if USEFLYOUT
using TINK.View.MasterDetail;
#endif
using TINK.Settings;
using TINK.Model.Connector;
using TINK.Model.Services.CopriApi;
using Plugin.Permissions;
using TINK.Services.Permissions;
using Xamarin.Essentials;
using System.Threading;
using TINK.MultilingualResources;
using TINK.Services.BluetoothLock;
using TINK.Model.Services.CopriApi.ServerUris;
using TINK.ViewModel.Info;
using TINK.Repository;
using Plugin.Permissions.Abstractions;
using TINK.Model.Services.Geolocation;
namespace TINK.ViewModel.Contact
@ -48,7 +42,7 @@ namespace TINK.ViewModel.Contact
/// <summary>
/// Service to query/ manage permissions (location) of the app.
/// </summary>
private IPermissions PermissionsService { get; }
private ILocationPermission PermissionsService { get; }
/// <summary>
/// Service to manage bluetooth stack.
@ -114,7 +108,7 @@ namespace TINK.ViewModel.Contact
/// <param name="navigation">Interface to navigate.</param>
public SelectStationPageViewModel(
ITinkApp tinkApp,
IPermissions permissionsService,
ILocationPermission permissionsService,
Plugin.BLE.Abstractions.Contracts.IBluetoothLE bluetoothService,
IGeolocation geolocationService,
Action<MapSpan> moveToRegionDelegate,
@ -288,14 +282,14 @@ namespace TINK.ViewModel.Contact
ActionText = AppResources.ActivityTextRequestingLocationPermissions;
// Check location permission
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
var status = await PermissionsService.CheckStatusAsync();
if (TinkApp.CenterMapToCurrentLocation
&& !GeolocationService.IsSimulation
&& status != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
&& status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,

View file

@ -19,8 +19,7 @@ using TINK.Model;
using Xamarin.Forms;
using TINK.ViewModel.Bikes;
using TINK.Services.BluetoothLock.Tdo;
using Plugin.Permissions;
using Plugin.Permissions.Abstractions;
using TINK.Services.Permissions;
using Plugin.BLE.Abstractions.Contracts;
using TINK.MultilingualResources;
using TINK.Model.Device;
@ -73,7 +72,7 @@ namespace TINK.ViewModel.FindBike
/// <param name="viewService">Interface to actuate methodes on GUI.</param>
public FindBikePageViewModel(
User p_oUser,
IPermissions permissions,
ILocationPermission permissions,
IBluetoothLE bluetoothLE,
string runtimPlatform,
Func<bool> isConnectedDelegate,
@ -144,12 +143,12 @@ namespace TINK.ViewModel.FindBike
&& RuntimePlatform == Device.Android)
{
// Check location permission
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
if (status != PermissionStatus.Granted)
var status = await PermissionsService.CheckStatusAsync();
if (status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,

View file

@ -18,7 +18,7 @@ using TINK.View.MasterDetail;
using TINK.Settings;
using TINK.Model.Connector;
using TINK.Model.Services.CopriApi;
using Plugin.Permissions;
using TINK.Services.Permissions;
using Xamarin.Essentials;
using System.Threading;
using TINK.MultilingualResources;
@ -26,7 +26,6 @@ using TINK.Services.BluetoothLock;
using TINK.Model.Services.CopriApi.ServerUris;
using TINK.ViewModel.Info;
using TINK.Repository;
using Plugin.Permissions.Abstractions;
using TINK.Model.Services.Geolocation;
#if !TRYNOTBACKSTYLE
@ -51,7 +50,7 @@ namespace TINK.ViewModel.Map
/// <summary>
/// Service to query/ manage permissions (location) of the app.
/// </summary>
private IPermissions PermissionsService { get; }
private ILocationPermission PermissionsService { get; }
/// <summary>
/// Service to manage bluetooth stack.
@ -121,7 +120,7 @@ namespace TINK.ViewModel.Map
/// <param name="navigation">Interface to navigate.</param>
public MapPageViewModel(
ITinkApp tinkApp,
IPermissions permissionsService,
ILocationPermission permissionsService,
Plugin.BLE.Abstractions.Contracts.IBluetoothLE bluetoothService,
IGeolocation geolocationService,
Action<MapSpan> moveToRegionDelegate,
@ -318,14 +317,14 @@ namespace TINK.ViewModel.Map
ActionText = AppResources.ActivityTextRequestingLocationPermissions;
// Check location permission
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
var status = await PermissionsService.CheckStatusAsync();
if (TinkApp.CenterMapToCurrentLocation
&& !GeolocationService.IsSimulation
&& status != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
&& status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,
@ -345,22 +344,6 @@ namespace TINK.ViewModel.Map
}
}
// Move and scale before getting stations and bikes which takes some time.
ActionText = AppResources.ActivityTextCenterMap;
Location currentLocation = null;
try
{
currentLocation = TinkApp.CenterMapToCurrentLocation
? await GeolocationService.GetAsync()
: null;
}
catch (Exception ex)
{
Log.ForContext<MapPageViewModel>().Error("Getting location failed. {Exception}", ex);
}
MoveAndScale(m_oMoveToRegionDelegate, TinkApp.Uris.ActiveUri, ActiveFilterMap, currentLocation);
ActionText = AppResources.ActivityTextMapLoadingStationsAndBikes;
IsConnected = TinkApp.GetIsConnected();
var resultStationsAndBikes = await TinkApp.GetConnector(IsConnected).Query.GetBikesAndStationsAsync();
@ -435,6 +418,22 @@ namespace TINK.ViewModel.Map
// Update pins color form count of bikes located at station.
UpdatePinsColor(colors);
// Move and scale before getting stations and bikes which takes some time.
ActionText = AppResources.ActivityTextCenterMap;
Location currentLocation = null;
try
{
currentLocation = TinkApp.CenterMapToCurrentLocation
? await GeolocationService.GetAsync()
: null;
}
catch (Exception ex)
{
Log.ForContext<MapPageViewModel>().Error("Getting location failed. {Exception}", ex);
}
MoveAndScale(m_oMoveToRegionDelegate, TinkApp.Uris.ActiveUri, ActiveFilterMap, currentLocation);
m_oViewUpdateManager = CreateUpdateTask();
Log.ForContext<MapPageViewModel>().Verbose("Update pins color done.");
@ -854,14 +853,14 @@ namespace TINK.ViewModel.Map
Pins.Clear();
// Check location permission
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
var status = await PermissionsService.CheckStatusAsync();
if (TinkApp.CenterMapToCurrentLocation
&& !GeolocationService.IsSimulation
&& status != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
&& status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,

View file

@ -18,8 +18,7 @@ using TINK.Model;
using Xamarin.Forms;
using TINK.ViewModel.Bikes;
using TINK.Services.BluetoothLock.Tdo;
using Plugin.Permissions;
using Plugin.Permissions.Abstractions;
using TINK.Services.Permissions;
using Plugin.BLE.Abstractions.Contracts;
using TINK.MultilingualResources;
using TINK.Model.Device;
@ -45,7 +44,7 @@ namespace TINK.ViewModel.MyBikes
/// <param name="viewService">Interface to actuate methodes on GUI.</param>
public MyBikesPageViewModel(
User p_oUser,
IPermissions permissions,
ILocationPermission permissions,
IBluetoothLE bluetoothLE,
string runtimPlatform,
Func<bool> isConnectedDelegate,
@ -119,12 +118,12 @@ namespace TINK.ViewModel.MyBikes
&& RuntimePlatform == Device.Android)
{
// Check location permission
var status = await PermissionsService.CheckPermissionStatusAsync<LocationPermission>();
if (status != PermissionStatus.Granted)
var status = await PermissionsService.CheckStatusAsync();
if (status != Status.Granted)
{
var permissionResult = await PermissionsService.RequestPermissionAsync<LocationPermission>();
var permissionResult = await PermissionsService.RequestAsync();
if (permissionResult != PermissionStatus.Granted)
if (permissionResult != Status.Granted)
{
var dialogResult = await ViewService.DisplayAlert(
AppResources.MessageTitleHint,

View file

@ -127,8 +127,9 @@ namespace TINK.ViewModel
Themes = new ServicesViewModel(
TinkApp.Themes.Select(x => x.GetType().FullName),
new Dictionary<string, string> {
{ typeof(Themes.Konrad).FullName, "Konrad" },
{ typeof(Themes.ShareeBike).FullName, "sharee.bike" }
{ typeof(Themes.Konrad).FullName, "Mein konrad" /* display name in picker */},
{ typeof(Themes.ShareeBike).FullName, "sharee.bike" /* display name in picker */},
{ typeof(Themes.LastenradBayern).FullName, "LastenradBayern" /* display name in picker */}
},
TinkApp.Themes.Active.GetType().FullName);
@ -185,7 +186,11 @@ namespace TINK.ViewModel
else if (Themes.Active == typeof(Themes.ShareeBike).FullName)
{
mergedDictionaries.Add(new Themes.ShareeBike());
}
}
else if (Themes.Active == typeof(Themes.LastenradBayern).FullName)
{
mergedDictionaries.Add(new Themes.LastenradBayern());
}
else
{
Log.ForContext<SettingsPageViewModel>().Debug($"No theme {Themes.Active} found.");