private void ProcessSingleOrNoFilteredAddresses(AddressLocationType filter, HomeViewModelState state) { var filteredAddress = AddressPicker.FilteredPlaces .Where(address => address.Address.AddressLocationType == filter) .ToArray(); if (!filteredAddress.Any()) { var localize = this.Services().Localize; this.Services().Message.ShowMessage(localize["FilteredAddresses_Error_Title"], localize["FilteredAddresses_Error_Message"]); return; } if (filteredAddress.Length == 1) { var address = filteredAddress .Select(place => place.Address) .First(); AddressPicker.SelectAddress(address); return; } CurrentViewState = state; }
private void LoadFilteredAddress(AddressLocationType filter) { using (this.Services().Message.ShowProgressNonModal()) { AllAddresses.Clear(); _isShowingFilteredList = true; AllAddresses.AddRange(FilteredPlaces.Where(place => place.Address.AddressLocationType == filter)); } }
public async void Open(AddressLocationType addressLocationType) { _collectionChangedSubscription.Disposable = new SerialDisposable(); Alpha = 0; Hidden = false; Animate(0.3f, () => Alpha = 1); await ViewModel.LoadAddresses(addressLocationType).HandleErrors(); if (addressLocationType == AddressLocationType.Unspecified) { FocusOnTextField(); } }
public async void Open(AddressLocationType filterAddresses) { _collectionChangedSubscription.Disposable = Observable .FromEventPattern <NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>( h => ViewModel.AllAddresses.CollectionChanged += h, h => ViewModel.AllAddresses.CollectionChanged -= h) .ObserveOn(SynchronizationContext.Current) .Select(x => x.EventArgs) .Subscribe(e => { var newItems = new AddressViewModel[0]; if (e.NewItems != null) { newItems = e.NewItems.OfType <AddressViewModel>().ToArray(); } switch (e.Action) { case NotifyCollectionChangedAction.Add: { AddAddresses(newItems); break; } case NotifyCollectionChangedAction.Reset: { ClearAddresses(); break; } default: { throw new ArgumentOutOfRangeException("Not supported " + e.Action); } } }, Logger.LogError); await ViewModel.LoadAddresses(filterAddresses).HandleErrors(); if (filterAddresses == AddressLocationType.Unspecified || ViewModel.AllAddresses.Count > 1) { FocusOnTextField(); } }
public async Task LoadAddresses(AddressLocationType filter) { _ignoreTextChange = true; // set the value of the filter to a property to notify listener PickerFilter = filter; try { if (_isInLocationDetail) { //Prevent from locating user when coming from Location return; } if (filter == AddressLocationType.Unspecified) { var disposable = new CancellationDisposable(); var cancellationToken = disposable.Token; _addressListTaskDisposable.Disposable = disposable; await LoadAddressesUnspecified(cancellationToken); } else { LoadFilteredAddress(filter); } } catch (OperationCanceledException) { // nothing } catch (Exception e) { Logger.LogError(e); } finally { _ignoreTextChange = false; } }