protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { const string clientName = "Giskard"; var packageInfo = ApplicationContext.PackageManager.GetPackageInfo(ApplicationContext.PackageName, 0); var version = packageInfo.VersionName; var sharedPreferences = ApplicationContext.GetSharedPreferences(clientName, FileCreationMode.Private); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var appVersion = Version.Parse(version); var userAgent = new UserAgent(clientName, version); var mailService = new MailService(ApplicationContext); var dialogService = new DialogService(); var platformConstants = new PlatformConstants(); var keyValueStorage = new SharedPreferencesStorage(sharedPreferences); var settingsStorage = new SettingsStorage(appVersion, keyValueStorage); var feedbackService = new FeedbackService(userAgent, mailService, dialogService, platformConstants); var schedulerProvider = new AndroidSchedulerProvider(); var foundation = TogglFoundation .ForClient(userAgent, appVersion) .WithDatabase(database) .WithScheduler(scheduler) .WithTimeService(timeService) .WithMailService(mailService) .WithApiEnvironment(environment) .WithGoogleService <GoogleService>() .WithRatingService <RatingService>() .WithLicenseProvider <LicenseProvider>() .WithAnalyticsService(analyticsService) .WithSchedulerProvider(schedulerProvider) .WithPlatformConstants(platformConstants) .WithRemoteConfigService <RemoteConfigService>() .WithApiFactory(new ApiFactory(environment, userAgent)) .WithBackgroundService(new BackgroundService(timeService)) .WithSuggestionProviderContainer(suggestionProviderContainer) .WithApplicationShortcutCreator(new ApplicationShortcutCreator(ApplicationContext)) .StartRegisteringPlatformServices() .WithDialogService(dialogService) .WithFeedbackService(feedbackService) .WithLastTimeUsageStorage(settingsStorage) .WithBrowserService <BrowserService>() .WithKeyValueStorage(keyValueStorage) .WithUserPreferences(settingsStorage) .WithOnboardingStorage(settingsStorage) .WithNavigationService(navigationService) .WithAccessRestrictionStorage(settingsStorage) .WithErrorHandlingService(new ErrorHandlingService(navigationService, settingsStorage)) .Build(); foundation.RevokeNewUserIfNeeded().Initialize(); base.InitializeApp(pluginManager, app); }
public async Task WorksIfProviderHasMultipleSuggestions() { var scheduler = new TestScheduler(); var provider = Substitute.For <ISuggestionProvider>(); var timeEntries = new[] { new TimeEntry { Description = "te1" }, new TimeEntry { Description = "te2" }, new TimeEntry { Description = "te3" } }; var observableContent = timeEntries .Select(te => new Recorded <Notification <ITimeEntry> >(1, Notification.CreateOnNext <ITimeEntry>(te))) .ToArray(); var observable = scheduler .CreateColdObservable(observableContent); provider.GetSuggestion().Returns(observable); var container = new SuggestionProviderContainer(provider); var viewmodel = new SuggestionsViewModel(container); await viewmodel.Initialize(); scheduler.AdvanceTo(1); viewmodel.Suggestions.Should().HaveCount(timeEntries.Length) .And.Contain(timeEntries); }
public async Task WorksIfProviderHasMultipleSuggestions() { var scheduler = new TestScheduler(); var provider = Substitute.For <ISuggestionProvider>(); var suggestions = new[] { createSuggestion("te1"), createSuggestion("te2"), createSuggestion("te3") }; var observableContent = suggestions .Select(suggestion => createRecorded(1, suggestion)) .ToArray(); var observable = scheduler .CreateColdObservable(observableContent); provider.GetSuggestions().Returns(observable); var container = new SuggestionProviderContainer(provider); var viewmodel = new SuggestionsViewModel(container); await viewmodel.Initialize(); scheduler.AdvanceTo(1); viewmodel.Suggestions.Should().HaveCount(suggestions.Length) .And.Contain(suggestions); }
public async Task WorksWithSeveralProviders() { var scheduler = new TestScheduler(); var provider1 = Substitute.For <ISuggestionProvider>(); var provider2 = Substitute.For <ISuggestionProvider>(); var te1 = new TimeEntry { Description = "t1", TaskId = 12, ProjectId = 9 }; var te2 = new TimeEntry { Description = "t2", TaskId = 9, ProjectId = 12 }; var observable1 = scheduler .CreateColdObservable(new Recorded <Notification <ITimeEntry> >(0, Notification.CreateOnNext <ITimeEntry>(te1))); var observable2 = scheduler .CreateColdObservable(new Recorded <Notification <ITimeEntry> >(1, Notification.CreateOnNext <ITimeEntry>(te2))); provider1.GetSuggestion().Returns(observable1); provider2.GetSuggestion().Returns(observable2); var container = new SuggestionProviderContainer(provider1, provider2); var viewModel = new SuggestionsViewModel(container); await viewModel.Initialize(); scheduler.AdvanceTo(1); viewModel.Suggestions.Should().HaveCount(2) .And.Contain(new[] { te1, te2 }); }
protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { #if !USE_PRODUCTION_API System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; #endif const string clientName = "Daneel"; var version = NSBundle.MainBundle.InfoDictionary["CFBundleShortVersionString"].ToString(); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var appVersion = Version.Parse(version); var userAgent = new UserAgent(clientName, version); var keyValueStorage = new UserDefaultsStorage(); var settingsStorage = new SettingsStorage(Version.Parse(version), keyValueStorage); var foundation = TogglFoundation .ForClient(userAgent, appVersion) .WithDatabase(database) .WithScheduler(scheduler) .WithTimeService(timeService) .WithApiEnvironment(environment) .WithGoogleService <GoogleService>() .WithLicenseProvider <LicenseProvider>() .WithAnalyticsService(analyticsService) .WithPlatformConstants <PlatformConstants>() .WithApiFactory(new ApiFactory(environment, userAgent)) .WithBackgroundService(new BackgroundService(timeService)) .WithApplicationShortcutCreator <ApplicationShortcutCreator>() .WithSuggestionProviderContainer(suggestionProviderContainer) .WithMailService(new MailService((ITopViewControllerProvider)Presenter)) .StartRegisteringPlatformServices() .WithBrowserService <BrowserService>() .WithKeyValueStorage(keyValueStorage) .WithUserPreferences(settingsStorage) .WithOnboardingStorage(settingsStorage) .WithNavigationService(navigationService) .WithAccessRestrictionStorage(settingsStorage) .WithPasswordManagerService <OnePasswordService>() .WithDialogService(new DialogService((ITopViewControllerProvider)Presenter)) .WithApiErrorHandlingService(new ApiErrorHandlingService(navigationService, settingsStorage)) .Build(); foundation.RevokeNewUserIfNeeded().Initialize(); base.InitializeApp(pluginManager, app); }
protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { base.InitializeApp(pluginManager, app); #if !USE_PRODUCTION_API System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; #endif const string clientName = "Daneel"; var version = NSBundle.MainBundle.InfoDictionary["CFBundleShortVersionString"].ToString(); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var keyValueStorage = new UserDefaultsStorage(); var settingsStorage = new SettingsStorage(Version.Parse(version), keyValueStorage); var foundation = Foundation.Foundation.Create( clientName, version, database, timeService, scheduler, new MailService((ITopViewControllerProvider)Presenter), new GoogleService(), environment, new LicenseProvider(), analyticsService, new PlatformConstants(), new ApplicationShortcutCreator(), suggestionProviderContainer ); foundation .RegisterServices( new DialogService((ITopViewControllerProvider)Presenter), new BrowserService(), keyValueStorage, settingsStorage, settingsStorage, settingsStorage, navigationService, new OnePasswordService()) .RevokeNewUserIfNeeded() .Initialize(app as App, Scheduler.Default); }
protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { base.InitializeApp(pluginManager, app); const string clientName = "Giskard"; var packageInfo = ApplicationContext.PackageManager.GetPackageInfo(ApplicationContext.PackageName, 0); var version = packageInfo.VersionName; var sharedPreferences = ApplicationContext.GetSharedPreferences(clientName, FileCreationMode.Private); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var keyValueStorage = new SharedPreferencesStorage(sharedPreferences); var settingsStorage = new SettingsStorage(Version.Parse(version), keyValueStorage); var foundation = Foundation.Foundation.Create( clientName, version, database, timeService, scheduler, new MailService(ApplicationContext), new GoogleService(), environment, new LicenseProvider(), analyticsService, new PlatformConstants(), new ApplicationShortcutCreator(ApplicationContext), suggestionProviderContainer ); foundation .RegisterServices( new DialogService(), new BrowserService(), keyValueStorage, settingsStorage, settingsStorage, settingsStorage, navigationService, new OnePasswordService()) .RevokeNewUserIfNeeded() .Initialize(app as App, Scheduler.Default); }
public async Task WorksIfProvidersAreEmpty() { var providers = new[] { Substitute.For <ISuggestionProvider>(), Substitute.For <ISuggestionProvider>(), Substitute.For <ISuggestionProvider>() }; foreach (var provider in providers) { provider.GetSuggestions().Returns(Observable.Empty <Suggestion>()); } var container = new SuggestionProviderContainer(providers); var viewmodel = new SuggestionsViewModel(container); await viewmodel.Initialize(); viewmodel.Suggestions.Should().HaveCount(0); }
public async Task WorksWithSeveralProviders() { var scheduler = new TestScheduler(); var provider1 = Substitute.For <ISuggestionProvider>(); var provider2 = Substitute.For <ISuggestionProvider>(); var suggestion1 = createSuggestion("t1", 12, 9); var suggestion2 = createSuggestion("t2", 9, 12); var observable1 = scheduler.CreateColdObservable(createRecorded(0, suggestion1)); var observable2 = scheduler.CreateColdObservable(createRecorded(1, suggestion2)); provider1.GetSuggestions().Returns(observable1); provider2.GetSuggestions().Returns(observable2); var container = new SuggestionProviderContainer(provider1, provider2); var viewModel = new SuggestionsViewModel(container); await viewModel.Initialize(); scheduler.AdvanceTo(1); viewModel.Suggestions.Should().HaveCount(2) .And.Contain(new[] { suggestion1, suggestion2 }); }
protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { #if !USE_PRODUCTION_API System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; #endif const string clientName = "Daneel"; const string remoteConfigDefaultsFileName = "RemoteConfigDefaults"; var version = NSBundle.MainBundle.InfoDictionary["CFBundleShortVersionString"].ToString(); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var topViewControllerProvider = (ITopViewControllerProvider)Presenter; var dialogService = new DialogServiceIos(topViewControllerProvider); var platformInfo = new PlatformInfoIos(); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var intentDonationService = new IntentDonationServiceIos(); var privateSharedStorageService = new PrivateSharedStorageServiceIos(); var appVersion = Version.Parse(version); var keyValueStorage = new UserDefaultsStorageIos(); var permissionsService = new PermissionsServiceIos(); var userAgent = new UserAgent(clientName, version); var settingsStorage = new SettingsStorage(Version.Parse(version), keyValueStorage); var remoteConfigService = new RemoteConfigServiceIos(); remoteConfigService.SetupDefaults(remoteConfigDefaultsFileName); var schedulerProvider = new IOSSchedulerProvider(); var calendarService = new CalendarServiceIos(permissionsService); var notificationService = new NotificationServiceIos(permissionsService, timeService); var backgroundSyncService = new BackgroundSyncServiceIos(); var backgroundService = new BackgroundService(timeService, analyticsService); var automaticSyncingService = new AutomaticSyncingService(backgroundService, timeService, analyticsService); var errorHandlingService = new ErrorHandlingService(navigationService, settingsStorage); var foundation = TogglFoundation .ForClient(userAgent, appVersion) .WithDatabase(database) .WithScheduler(scheduler) .WithTimeService(timeService) .WithApiEnvironment(environment) .WithGoogleService <GoogleServiceIos>() .WithRatingService <RatingServiceIos>() .WithLicenseProvider <LicenseProviderIos>() .WithAnalyticsService(analyticsService) .WithSchedulerProvider(schedulerProvider) .WithRemoteConfigService(remoteConfigService) .WithNotificationService(notificationService) .WithApiFactory(new ApiFactory(environment, userAgent)) .WithBackgroundService(backgroundService) .WithAutomaticSyncingService(automaticSyncingService) .WithApplicationShortcutCreator(new ApplicationShortcutCreator()) .WithSuggestionProviderContainer(suggestionProviderContainer) .WithIntentDonationService(intentDonationService) .WithStopwatchProvider <FirebaseStopwatchProviderIos>() .WithPrivateSharedStorageService(privateSharedStorageService) .WithPlatformInfo(platformInfo) .WithBackgroundSyncService(backgroundSyncService) .StartRegisteringPlatformServices() .WithDialogService(dialogService) .WithLastTimeUsageStorage(settingsStorage) .WithBrowserService <BrowserServiceIos>() .WithKeyValueStorage(keyValueStorage) .WithUserPreferences(settingsStorage) .WithCalendarService(calendarService) .WithOnboardingStorage(settingsStorage) .WithNavigationService(navigationService) .WithPermissionsService(permissionsService) .WithAccessRestrictionStorage(settingsStorage) .WithPasswordManagerService <OnePasswordServiceIos>() .WithErrorHandlingService(errorHandlingService) .WithSyncErrorHandlingService(new SyncErrorHandlingService(errorHandlingService)) .WithRxActionFactory(new RxActionFactory(schedulerProvider)) .Build(); foundation.RevokeNewUserIfNeeded().Initialize(); base.InitializeApp(pluginManager, app); }
protected override void InitializeApp(IMvxPluginManager pluginManager, IMvxApplication app) { const string clientName = "Giskard"; var packageInfo = ApplicationContext.PackageManager.GetPackageInfo(ApplicationContext.PackageName, 0); var version = packageInfo.VersionName; var sharedPreferences = ApplicationContext.GetSharedPreferences(clientName, FileCreationMode.Private); var database = new Database(); var scheduler = Scheduler.Default; var timeService = new TimeService(scheduler); var backgroundService = new BackgroundService(timeService, analyticsService); var suggestionProviderContainer = new SuggestionProviderContainer( new MostUsedTimeEntrySuggestionProvider(database, timeService, maxNumberOfSuggestions) ); var appVersion = Version.Parse(version); var userAgent = new UserAgent(clientName, version); var dialogService = new DialogServiceAndroid(); var platformInfo = new PlatformInfoAndroid(); var keyValueStorage = new SharedPreferencesStorageAndroid(sharedPreferences); var settingsStorage = new SettingsStorage(appVersion, keyValueStorage); var schedulerProvider = new AndroidSchedulerProvider(); var permissionsService = new PermissionsServiceAndroid(); var calendarService = new CalendarServiceAndroid(permissionsService); var automaticSyncingService = new AutomaticSyncingService(backgroundService, timeService); var errorHandlingService = new ErrorHandlingService(navigationService, settingsStorage); ApplicationContext.RegisterReceiver(new TimezoneChangedBroadcastReceiver(timeService), new IntentFilter(Intent.ActionTimezoneChanged)); var dataSource = new TogglDataSource( database, timeService, analyticsService); var foundation = TogglFoundation .ForClient(userAgent, appVersion) .WithDatabase(database) .WithDataSource(dataSource) .WithScheduler(scheduler) .WithTimeService(timeService) .WithApiEnvironment(environment) .WithGoogleService <GoogleServiceAndroid>() .WithRatingService(new RatingServiceAndroid(ApplicationContext)) .WithLicenseProvider <LicenseProviderAndroid>() .WithAnalyticsService(analyticsService) .WithSchedulerProvider(schedulerProvider) .WithPlatformInfo(platformInfo) .WithNotificationService <NotificationServiceAndroid>() .WithRemoteConfigService <RemoteConfigServiceAndroid>() .WithApiFactory(new ApiFactory(environment, userAgent)) .WithBackgroundService(backgroundService) .WithAutomaticSyncingService(automaticSyncingService) .WithSuggestionProviderContainer(suggestionProviderContainer) .WithApplicationShortcutCreator(new ApplicationShortcutCreator(ApplicationContext)) .WithStopwatchProvider <FirebaseStopwatchProviderAndroid>() .WithIntentDonationService(new NoopIntentDonationServiceAndroid()) .WithPrivateSharedStorageService(new NoopPrivateSharedStorageServiceAndroid()) .WithBackgroundSyncService <BackgroundSyncServiceAndroid>() .StartRegisteringPlatformServices() .WithDialogService(dialogService) .WithLastTimeUsageStorage(settingsStorage) .WithBrowserService <BrowserServiceAndroid>() .WithCalendarService(calendarService) .WithKeyValueStorage(keyValueStorage) .WithUserPreferences(settingsStorage) .WithOnboardingStorage(settingsStorage) .WithNavigationService(navigationService) .WithPermissionsService(permissionsService) .WithAccessRestrictionStorage(settingsStorage) .WithErrorHandlingService(errorHandlingService) .WithSyncErrorHandlingService(new SyncErrorHandlingService(errorHandlingService)) .WithRxActionFactory(new RxActionFactory(schedulerProvider)) .Build(); foundation.RevokeNewUserIfNeeded().Initialize(); ensureDataSourceInitializationIfLoggedIn(); createApplicationLifecycleObserver(backgroundService); base.InitializeApp(pluginManager, app); }