Example #1
0
        private void ShowPricing()
        {
            if (!IsShowingAffirmation)
            {
                return;
            }

            NotionalTextBox.ClearFocus();

            AnimationFactory.FlipTransition(ViewAnimator, FlipDirection.LeftRight, 200);
        }
Example #2
0
        void Setup(View itemView)
        {
            CurrencyPairLabel        = itemView.FindViewById <TextView>(Resource.Id.SpotTileCurrencyPairTextView);
            BidButton                = itemView.FindViewById <PriceButton>(Resource.Id.SpotTileBidPriceButton);
            AskButton                = itemView.FindViewById <PriceButton>(Resource.Id.SpotTileAskPriceButton);
            SpreadLabel              = itemView.FindViewById <TextView>(Resource.Id.SpotTileSpreadTextView);
            UpArrow                  = itemView.FindViewById <DirectionArrow>(Resource.Id.SpotTileUpArrow);
            DownArrow                = itemView.FindViewById <DirectionArrow>(Resource.Id.SpotTileDownArrow);
            DealtCurrencyLabel       = itemView.FindViewById <TextView>(Resource.Id.SpotTileDealtCurrencyTextView);
            NotionalTextBox          = itemView.FindViewById <EditText>(Resource.Id.SpotTileNotionalEditText);
            SpotDateLabel            = itemView.FindViewById <TextView>(Resource.Id.SpotTileSpotDateTextView);
            Content                  = itemView.FindViewById <LinearLayout>(Resource.Id.SpotTileContent);
            CardView                 = itemView.FindViewById <CardView>(Resource.Id.CardView);
            ViewAnimator             = itemView.FindViewById <ViewAnimator>(Resource.Id.ViewAnimator);
            PlotView                 = itemView.FindViewById <PlotView>(Resource.Id.plotView);
            PriceNotAvailableOverlay = itemView.FindViewById <LinearLayout>(Resource.Id.PriceNotAvailableOverlay);

            CardView.PreventCornerOverlap = false;
            CardView.Radius = 5;
            NotionalTextBox.EditorAction += (sender, args) =>
            {
                if (args.ActionId == ImeAction.Done)
                {
                    NotionalTextBox.ClearFocus();
                    HideKeyboard(NotionalTextBox);
                }
            };

            _plotModel = new PlotModel
            {
                PlotAreaBorderThickness = new OxyThickness(0),
                PlotAreaBorderColor     = OxyColor.FromRgb(46, 59, 75)
            };
            _plotModel.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left, IsAxisVisible = false, MaximumPadding = 0, MinimumPadding = 0, IsPanEnabled = false, IsZoomEnabled = false
            });
            _plotModel.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom, IsAxisVisible = false, MaximumPadding = 0, MinimumPadding = 0, IsPanEnabled = false, IsZoomEnabled = false
            });

            _areaSeries = new AreaSeries {
                LineStyle = LineStyle.Solid, Color = OxyColor.FromRgb(46, 59, 75)
            };
            _plotModel.Series.Add(_areaSeries);
            _plotModel.Background               = OxyColor.FromRgb(33, 42, 53);
            PlotView.Model                      = _plotModel;
            PlotView.OverScrollMode             = OverScrollMode.Never;
            PlotView.ScrollBarSize              = 0;
            PlotView.HorizontalScrollBarEnabled = false;
            PlotView.VerticalScrollBarEnabled   = false;
        }
Example #3
0
        public void Bind(ISpotTileViewModel spotTileViewModel, IConcurrencyService concurrencyService)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            _allSubscriptions.Clear();

            concurrencyService.Dispatcher.Schedule(() =>
            {
                if (spotTileViewModel.State == TileState.Affirmation)
                {
                    spotTileViewModel.DismissAffirmation();
                }

                Reset();
                CurrencyPairLabel.Text = spotTileViewModel.Pricing.Symbol;
                BidButton.SetDataContext(spotTileViewModel.Pricing.Bid);
                AskButton.SetDataContext(spotTileViewModel.Pricing.Ask);
                SetHistoricPrices(spotTileViewModel.Pricing.HistoricalMid);
            });

            _allSubscriptions.Add(spotTileViewModel.Pricing.Bid
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => AskButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.Ask
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => BidButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Spread, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpreadLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.DealtCurrency, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => DealtCurrencyLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.SpotDate, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpotDateLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Mid, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(AddPrice));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.IsStale)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(SetIsStale));

            // two way bind the notional
            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Notional, true)
                                  .Where(n => n != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => NotionalTextBox.Text = s));

            _allSubscriptions.Add(NotionalTextBox
                                  .TextChangedStream()
                                  .Where(_ => spotTileViewModel.Pricing.Notional != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(_ =>
            {
                spotTileViewModel.Pricing.Notional = NotionalTextBox.Text;
            }));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Movement, true)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(m =>
            {
                UpArrow.Visibility   = m == PriceMovement.Up ? ViewStates.Visible : ViewStates.Invisible;
                DownArrow.Visibility = m == PriceMovement.Down ? ViewStates.Visible : ViewStates.Invisible;
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Affirmation)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(async m =>
            {
                try
                {
                    _cancelAnimationSource = new CancellationTokenSource();
                    ShowAffirmation(spotTileViewModel.Affirmation);
                    await Task.Delay(4000, _cancelAnimationSource.Token);
                }
                catch (TaskCanceledException)
                {
                    /* Animation was cancelled */
                }
                finally
                {
                    spotTileViewModel.DismissAffirmation();
                }
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Pricing)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(_ => ShowPricing()));
        }