Example #1
0
        private void setupItemTouchHelper(MainRecyclerAdapter mainAdapter)
        {
            var callback        = new MainRecyclerViewTouchCallback(mainAdapter);
            var itemTouchHelper = new ItemTouchHelper(callback);

            itemTouchHelper.AttachToRecyclerView(mainRecyclerView);
        }
Example #2
0
        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();
        }
Example #3
0
        private void setupItemTouchHelper(MainRecyclerViewTouchCallback callback)
        {
            var itemTouchHelper = new ItemTouchHelper(callback);

            itemTouchHelper.AttachToRecyclerView(mainRecyclerView);
        }