private void setupItemTouchHelper(MainRecyclerAdapter mainAdapter) { var callback = new MainRecyclerViewTouchCallback(mainAdapter); var itemTouchHelper = new ItemTouchHelper(callback); itemTouchHelper.AttachToRecyclerView(mainRecyclerView); }
public override void OnViewCreated(View view, Bundle savedInstanceState) { base.OnViewCreated(view, savedInstanceState); refreshLayout.SetProgressBackgroundColorSchemeResource(Resource.Color.cardBackground); refreshLayout.SetColorSchemeResources(new[] { Resource.Color.primaryText }); stopButton.Rx().BindAction(ViewModel.StopTimeEntry, _ => TimeEntryStopOrigin.Manual).DisposedBy(DisposeBag); playButton.Rx().BindAction(ViewModel.StartTimeEntry, _ => true).DisposedBy(DisposeBag); playButton.Rx().BindAction(ViewModel.StartTimeEntry, _ => false, ButtonEventType.LongPress).DisposedBy(DisposeBag); runningEntryCardFrame.Rx().Tap() .WithLatestFrom(ViewModel.CurrentRunningTimeEntry, (_, te) => new EditTimeEntryInfo(RunningTimeEntryCard, te.Id)) .Subscribe(ViewModel.SelectTimeEntry.Inputs) .DisposedBy(DisposeBag); ViewModel.ElapsedTime .Subscribe(timeEntryCardTimerLabel.Rx().TextObserver()) .DisposedBy(DisposeBag); ViewModel.CurrentRunningTimeEntry .Select(te => te?.Description ?? "") .Subscribe(timeEntryCardDescriptionLabel.Rx().TextObserver()) .DisposedBy(DisposeBag); ViewModel.CurrentRunningTimeEntry .Select(te => string.IsNullOrWhiteSpace(te?.Description)) .Subscribe(timeEntryCardAddDescriptionLabel.Rx().IsVisible()) .DisposedBy(DisposeBag); ViewModel.CurrentRunningTimeEntry .Select(te => string.IsNullOrWhiteSpace(te?.Description)) .Invert() .Subscribe(timeEntryCardDescriptionLabel.Rx().IsVisible()) .DisposedBy(DisposeBag); ViewModel.CurrentRunningTimeEntry .Select(CreateProjectClientTaskLabel) .Subscribe(timeEntryCardProjectClientTaskLabel.Rx().TextFormattedObserver()) .DisposedBy(DisposeBag); var projectVisibilityObservable = ViewModel.CurrentRunningTimeEntry .Select(te => te?.Project != null); projectVisibilityObservable .Subscribe(timeEntryCardProjectClientTaskLabel.Rx().IsVisible()) .DisposedBy(DisposeBag); projectVisibilityObservable .Subscribe(timeEntryCardDotContainer.Rx().IsVisible()) .DisposedBy(DisposeBag); var projectColorObservable = ViewModel.CurrentRunningTimeEntry .Select(te => te?.Project?.Color ?? "#000000") .Select(Color.ParseColor); projectColorObservable .Subscribe(timeEntryCardDotView.Rx().DrawableColor()) .DisposedBy(DisposeBag); addDrawable = ContextCompat.GetDrawable(Context, Resource.Drawable.add_white); playDrawable = ContextCompat.GetDrawable(Context, Resource.Drawable.play_white); ViewModel.IsInManualMode .Select(isManualMode => isManualMode ? addDrawable : playDrawable) .Subscribe(playButton.SetDrawableImageSafe) .DisposedBy(DisposeBag); ViewModel.IsTimeEntryRunning .Subscribe(onTimeEntryCardVisibilityChanged) .DisposedBy(DisposeBag); ViewModel.SyncProgressState .Subscribe(onSyncChanged) .DisposedBy(DisposeBag); mainRecyclerAdapter = new MainRecyclerAdapter(Context, ViewModel.TimeService) { SuggestionsViewModel = ViewModel.SuggestionsViewModel, RatingViewModel = ViewModel.RatingViewModel, }; mainRecyclerAdapter.SetupRatingViewVisibility(shouldShowRatingViewOnResume); touchCallback = new MainRecyclerViewTouchCallback(mainRecyclerAdapter); setupRecycler(); mainRecyclerAdapter.ToggleGroupExpansion .Subscribe(ViewModel.TimeEntriesViewModel.ToggleGroupExpansion.Inputs) .DisposedBy(DisposeBag); mainRecyclerAdapter.TimeEntryTaps .Select(editEventInfo) .Subscribe(ViewModel.SelectTimeEntry.Inputs) .DisposedBy(DisposeBag); mainRecyclerAdapter.ContinueTimeEntry .Subscribe(ViewModel.ContinueTimeEntry.Inputs) .DisposedBy(DisposeBag); mainRecyclerAdapter.DeleteTimeEntrySubject .Select(vm => vm.RepresentedTimeEntriesIds) .Subscribe(ViewModel.TimeEntriesViewModel.DelayDeleteTimeEntries.Inputs) .DisposedBy(DisposeBag); ViewModel.TimeEntriesViewModel.TimeEntriesPendingDeletion .Subscribe(showUndoDeletion) .DisposedBy(DisposeBag); ViewModel.SyncProgressState .Subscribe(updateSyncingIndicator) .DisposedBy(DisposeBag); refreshLayout.Rx().Refreshed() .Subscribe(ViewModel.Refresh.Inputs) .DisposedBy(DisposeBag); ViewModel.TimeEntries .Subscribe(mainRecyclerAdapter.UpdateCollection) .DisposedBy(DisposeBag); ViewModel.IsTimeEntryRunning .Subscribe(updateRecyclerViewPadding) .DisposedBy(DisposeBag); notificationManager = Activity.GetSystemService(NotificationService) as NotificationManager; Activity.BindRunningTimeEntry(notificationManager, ViewModel.CurrentRunningTimeEntry, ViewModel.ShouldShowRunningTimeEntryNotification) .DisposedBy(DisposeBag); Activity.BindIdleTimer(notificationManager, ViewModel.IsTimeEntryRunning, ViewModel.ShouldShowStoppedTimeEntryNotification) .DisposedBy(DisposeBag); ViewModel.SwipeActionsEnabled .Subscribe(onSwipeActionsChanged) .DisposedBy(DisposeBag); setupItemTouchHelper(touchCallback); ViewModel.TimeEntriesCount .Subscribe(timeEntriesCountSubject) .DisposedBy(DisposeBag); ViewModel.ShouldReloadTimeEntryLog .Subscribe(reload) .DisposedBy(DisposeBag); ViewModel.ShouldShowWelcomeBack .Subscribe(onWelcomeBackViewVisibilityChanged) .DisposedBy(DisposeBag); ViewModel.ShouldShowEmptyState .Subscribe(onEmptyStateVisibilityChanged) .DisposedBy(DisposeBag); ViewModel.ShouldShowRatingView .Subscribe(setupRatingViewVisibility) .DisposedBy(DisposeBag); setupOnboardingSteps(); }
private void setupItemTouchHelper(MainRecyclerViewTouchCallback callback) { var itemTouchHelper = new ItemTouchHelper(callback); itemTouchHelper.AttachToRecyclerView(mainRecyclerView); }