Пример #1
0
        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));
            }
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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;
            }
        }