using Serilog; using System; using System.Collections.Specialized; using System.ComponentModel; using System.Threading; using System.Threading.Tasks; using TINK.Model.Bike; using TINK.Model.Connector; using TINK.Model.User; using TINK.View; using TINK.Settings; using TINK.Model.Bike.BluetoothLock; using System.Collections.Generic; using TINK.Services.BluetoothLock; using TINK.Model.Services.Geolocation; using System.Linq; using TINK.Model; using Xamarin.Forms; using TINK.ViewModel.Bikes; using TINK.Services.BluetoothLock.Tdo; using Plugin.Permissions; using Plugin.Permissions.Abstractions; using Plugin.BLE.Abstractions.Contracts; using TINK.MultilingualResources; using TINK.Model.Device; namespace TINK.ViewModel.FindBike { public class FindBikePageViewModel : BikesViewModel, INotifyCollectionChanged, INotifyPropertyChanged { /// /// Constructs bike collection view model in case information about occupied bikes is available. /// /// Mail address of active user. /// True if report level is verbose, false if not. /// Holds object to query location permisions. /// Holds object to query bluetooth state. /// Specifies on which platform code is run. /// Returns if mobile is connected to web or not. /// Connects system to copri. /// Service to control lock retrieve info. /// Holds whether to poll or not and the periode leght is polling is on. /// Executes actions on GUI thread. /// Provides info about the smart device (phone, tablet, ...). /// Interface to actuate methodes on GUI. public FindBikePageViewModel( User p_oUser, IPermissions permissions, IBluetoothLE bluetoothLE, string runtimPlatform, Func isConnectedDelegate, Func connectorFactory, IGeolocation geolocation, ILocksService lockService, PollingParameters polling, Action postAction, ISmartDevice smartDevice, IViewService viewService) : base(p_oUser, permissions, bluetoothLE, runtimPlatform, isConnectedDelegate, connectorFactory, geolocation, lockService, polling, postAction, smartDevice, viewService, () => new MyBikeInUseStateInfoProvider()) { } /// /// Invoked when page is shown. /// Starts update process. /// public async Task OnAppearing() { // Get my bikes from COPRI Log.ForContext().Information("User request to show page MyBikes/ page re-appearing"); ActionText = AppResources.ActivityTextMyBikesLoadingBikes; var bikes = await ConnectorFactory(IsConnected).Query.GetBikesAsync(); Exception = bikes.Exception; // Update communication error from query for bikes occupied. BikeIds = bikes.Response.Select(x => x.Id); ActionText = ""; IsIdle = true; } public IEnumerable BikeIds { get; set; } } }