コード例 #1
0
            public void SmokeTest()
            {
                var clock = Substitute.For <IClock>();

                clock.Now.Returns(DateTimeOffset.MinValue + TimeSpan.FromDays(2));

                var installationDateFetcher = Substitute.For <IInstallationDateFetcher>();

                installationDateFetcher.GetInstallationDate().Returns(DateTimeOffset.MinValue + TimeSpan.FromDays(1));

                Assert.Equal(TimeSpan.FromDays(6), TrialHelpers.GetRemainingTrialTime(TimeSpan.FromDays(7), clock, installationDateFetcher));
            }
コード例 #2
0
            public void ReturnsNegativeValueForExpiredTime()
            {
                var clock = Substitute.For <IClock>();

                clock.Now.Returns(DateTimeOffset.MinValue + TimeSpan.FromDays(8));

                var installationDateFetcher = Substitute.For <IInstallationDateFetcher>();

                installationDateFetcher.GetInstallationDate().Returns(DateTimeOffset.MinValue);

                Assert.Equal(TimeSpan.FromDays(-1), TrialHelpers.GetRemainingTrialTime(TimeSpan.FromDays(7), clock, installationDateFetcher));
            }
コード例 #3
0
        public ConnectionFragment()
        {
            var settings    = Locator.Current.GetService <UserSettings>();
            var wifiService = Locator.Current.GetService <IWifiService>();

            this.ViewModel = new ConnectionViewModel(settings, wifiService.GetIpAddress);

            this.WhenActivated(() =>
            {
                var disposable = new CompositeDisposable();

                var connectOrDisconnectCommand = this.ViewModel.WhenAnyValue(x => x.IsConnected)
                                                 .Select(x => x ? (IReactiveCommand)this.ViewModel.DisconnectCommand : this.ViewModel.ConnectCommand);

                connectOrDisconnectCommand.SampleAndCombineLatest(this.ConnectButton.Events().Click, (command, args) => command)
                .Where(x => x.CanExecute(null))
                .Subscribe(x => x.Execute(null))
                .DisposeWith(disposable);

                connectOrDisconnectCommand.SelectMany(x => x.CanExecuteObservable)
                .BindTo(this.ConnectButton, x => x.Enabled)
                .DisposeWith(disposable);

                this.ViewModel.ConnectCommand.IsExecuting
                .CombineLatest(this.ViewModel.WhenAnyValue(x => x.IsConnected), (connecting, connected) =>
                               connected ? Resource.String.disconnect : connecting?Resource.String.connecting: Resource.String.connect)
                .Select(Resources.GetString)
                .BindTo(this.ConnectButton, x => x.Text)
                .DisposeWith(disposable);

                this.ViewModel.ConnectCommand.Select(result =>
                {
                    switch (result.ConnectionResult)
                    {
                    case ConnectionResult.Failed:
                        return(Resources.GetString(Resource.String.connection_failed));

                    case ConnectionResult.ServerVersionToLow:
                        return(string.Format(Resources.GetString(Resource.String.required_server_version), result.ServerVersion.ToString(3)));

                    case ConnectionResult.Successful:
                        {
                            var playlistFragment = new PlaylistFragment();

                            this.FragmentManager.BeginTransaction()
                            .Replace(Resource.Id.ContentFrame, playlistFragment)
                            .Commit();

                            switch (result.AccessPermission)
                            {
                            case NetworkAccessPermission.Admin:
                                return(Resources.GetString(Resource.String.connected_as_admin));

                            case NetworkAccessPermission.Guest:
                                return(Resources.GetString(Resource.String.connected_as_guest));
                            }
                            break;
                        }

                    case ConnectionResult.Timeout:
                        return(Resources.GetString(Resource.String.connection_timeout));

                    case ConnectionResult.WrongPassword:
                        return(Resources.GetString(Resource.String.wrong_password));

                    case ConnectionResult.WifiDisabled:
                        return(Resources.GetString(Resource.String.wifi_enable_error));
                    }

                    throw new InvalidOperationException("This shouldn't happen");
                })
                .ObserveOn(RxApp.MainThreadScheduler)
                .Subscribe(x => Toast.MakeText(this.Activity, x, ToastLength.Long).Show())
                .DisposeWith(disposable);

                TimeSpan remainingTrialTime = TrialHelpers.GetRemainingTrialTime(AppConstants.TrialTime);

                // We don't want to immediately scare the user with the display of the remaining trial period, so give it some time
                bool displayTrialPeriod = !settings.IsPremium && remainingTrialTime < TimeSpan.FromDays(4);
                this.TrialExpirationTextView.Visibility = this.TrialExpirationExplanationTextview.Visibility =
                    displayTrialPeriod ? ViewStates.Visible : ViewStates.Gone;

                if (displayTrialPeriod)
                {
                    string expirationMessage = remainingTrialTime > TimeSpan.Zero ?
                                               Resources.GetString(Resource.String.trial_expiration) :
                                               Resources.GetString(Resource.String.trial_expiration_expired);

                    this.TrialExpirationTextView.Text = string.Format(expirationMessage,
                                                                      remainingTrialTime.Duration().Humanize(culture: new CultureInfo("en-US")));

                    this.TrialExpirationExplanationTextview.Text = Resources.GetString(Resource.String.trial_expiration_explanation);
                }

                return(disposable);
            });
        }