From 0c0baf1b10300f654f5656c42017a5fbd9651165 Mon Sep 17 00:00:00 2001 From: Oliver Hauff Date: Wed, 14 Jul 2021 22:39:31 +0200 Subject: [PATCH] Toggle either bike id input controls and lock management view implemented. --- TINK/TINK/View/FindBike/FindBikePage.xaml | 9 ++++-- .../Settings/PermissionToVisibleConverter.cs | 2 +- .../FindBike/FindBikePageViewModel.cs | 28 +++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/TINK/TINK/View/FindBike/FindBikePage.xaml b/TINK/TINK/View/FindBike/FindBikePage.xaml index 3512b5f..c7bf28f 100644 --- a/TINK/TINK/View/FindBike/FindBikePage.xaml +++ b/TINK/TINK/View/FindBike/FindBikePage.xaml @@ -12,11 +12,14 @@ - Boolean value indicating whether object is visible or not. public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - return ((Permissions)(value)).HasFlag(VisibleFlag); + return ((Permissions)value).HasFlag(VisibleFlag); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/TINKLib/ViewModel/FindBike/FindBikePageViewModel.cs b/TINKLib/ViewModel/FindBike/FindBikePageViewModel.cs index b7f11e6..dbd561c 100644 --- a/TINKLib/ViewModel/FindBike/FindBikePageViewModel.cs +++ b/TINKLib/ViewModel/FindBike/FindBikePageViewModel.cs @@ -29,13 +29,33 @@ namespace TINK.ViewModel.FindBike { public class FindBikePageViewModel : BikesViewModel, INotifyCollectionChanged, INotifyPropertyChanged { + private string bikeIdUserInput = string.Empty; /// Text entered by user to specify a bike. - public string BikeIdUserInput { get; set; } + public string BikeIdUserInput + { + get => bikeIdUserInput; + set + { + if (value == bikeIdUserInput) + { + return; + } + + bikeIdUserInput = value; + base.OnPropertyChanged(new PropertyChangedEventArgs(nameof(IsSelectBikeEnabled))); + } + } /// Holds all bikes available. public BikeCollection Bikes { get; set; } + /// Do not allow to select bike if id is not set. + public bool IsSelectBikeEnabled => BikeIdUserInput != null && BikeIdUserInput.Length > 0; + + /// Hide id input fields as soon as bike is found. + public bool IsSelectBikeVisible => BikeCollection != null && BikeCollection.Count == 0; + /// /// Constructs bike collection view model in case information about occupied bikes is available. /// @@ -65,6 +85,10 @@ namespace TINK.ViewModel.FindBike ISmartDevice smartDevice, IViewService viewService) : base(p_oUser, permissions, bluetoothLE, runtimPlatform, isConnectedDelegate, connectorFactory, geolocation, lockService, polling, postAction, smartDevice, viewService, () => new MyBikeInUseStateInfoProvider()) { + CollectionChanged += (sender, eventargs) => + { + OnPropertyChanged(new PropertyChangedEventArgs(nameof(IsSelectBikeVisible))); + }; } /// @@ -87,7 +111,7 @@ namespace TINK.ViewModel.FindBike } /// Command object to bind select bike button to view model. - public System.Windows.Input.ICommand OnSelectBikeRequest => new Xamarin.Forms.Command(async () => await SelectBike()); + public System.Windows.Input.ICommand OnSelectBikeRequest => new Xamarin.Forms.Command(async () => await SelectBike(), () => IsSelectBikeEnabled); /// Select a bike by ID public async Task SelectBike()