Example #1
0
        private void presentRatingViewIfNeeded(bool shouldBevisible)
        {
            if (!shouldBevisible)
            {
                return;
            }

            var wasShownMoreThanOnce = onboardingStorage.NumberOfTimesRatingViewWasShown() > 1;

            if (wasShownMoreThanOnce)
            {
                return;
            }

            var lastOutcome = onboardingStorage.RatingViewOutcome();

            if (lastOutcome != null)
            {
                var thereIsInteractionFormLastTime = lastOutcome != RatingViewOutcome.NoInteraction;
                if (thereIsInteractionFormLastTime)
                {
                    return;
                }
            }

            var lastOutcomeTime = onboardingStorage.RatingViewOutcomeTime();

            if (lastOutcomeTime != null)
            {
                var oneDayHasNotPassedSinceLastTime = lastOutcomeTime + TimeSpan.FromHours(24) > TimeService.CurrentDateTime;
                if (oneDayHasNotPassedSinceLastTime && !wasShownMoreThanOnce)
                {
                    return;
                }
            }

            navigationService.ChangePresentation(ToggleRatingViewVisibilityHint.Show());
            analyticsService.RatingViewWasShown.Track();
            onboardingStorage.SetDidShowRatingView();
            onboardingStorage.SetRatingViewOutcome(RatingViewOutcome.NoInteraction, TimeService.CurrentDateTime);
            TimeService.RunAfterDelay(TimeSpan.FromMinutes(ratingViewTimeout), () =>
            {
                shouldHideRatingViewIfStillVisible = true;
                navigationService.ChangePresentation(ToggleRatingViewVisibilityHint.Hide());
            });
        }