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()); }); }