private void ShowPricing() { if (!IsShowingAffirmation) { return; } NotionalTextBox.ClearFocus(); AnimationFactory.FlipTransition(ViewAnimator, FlipDirection.LeftRight, 200); }
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; }
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())); }