示例#1
0
文件: Setup.cs 项目: brahmb/mobileapp
        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);
        }
示例#2
0
            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);
            }
示例#4
0
            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 });
            }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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 });
            }
示例#10
0
        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);
        }
示例#11
0
        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);
        }