From 1ecbc12e556bbb6ea6ba9f52d090d13a8e1058f1 Mon Sep 17 00:00:00 2001 From: cocoa-dev004 <66989461+cocoa-dev004@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:07:10 +0900 Subject: [PATCH 1/9] Fixed `OnCreate()` being called twice --- Covid19Radar/Covid19Radar.Android/MainActivity.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Covid19Radar/Covid19Radar.Android/MainActivity.cs b/Covid19Radar/Covid19Radar.Android/MainActivity.cs index 4cafc177c..b8e278801 100644 --- a/Covid19Radar/Covid19Radar.Android/MainActivity.cs +++ b/Covid19Radar/Covid19Radar.Android/MainActivity.cs @@ -82,10 +82,11 @@ protected override async void OnCreate(Bundle savedInstanceState) TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.SetTheme(Resource.Style.MainTheme); - base.OnCreate(savedInstanceState); AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo; + base.OnCreate(savedInstanceState); + Xamarin.Essentials.Platform.Init(this, savedInstanceState); Xamarin.Forms.Forms.Init(this, savedInstanceState); Xamarin.Forms.FormsMaterial.Init(this, savedInstanceState); From c5411ad1d311249f66abac50d8ed5a0ca9756a44 Mon Sep 17 00:00:00 2001 From: cocoa-dev004 <66989461+cocoa-dev004@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:12:28 +0900 Subject: [PATCH 2/9] Fixed page transition of splash page --- Covid19Radar/Covid19Radar/App.xaml.cs | 5 +- .../Services/SplashNavigationService.cs | 104 ++++++++++++++++++ .../Services/TermsUpdateServiceMock.cs | 57 ++++++++++ .../ReAgreePrivacyPolicyPageViewModel.cs | 25 ++--- .../ReAgreeTermsOfServicePageViewModel.cs | 35 ++---- .../HomePage/SplashPageViewModel.cs | 55 ++------- .../ViewModels/Settings/DebugPageViewModel.cs | 10 +- .../HomePage/ReAgreePrivacyPolicyPage.xaml.cs | 13 +-- .../ReAgreeTermsOfServicePage.xaml.cs | 14 +-- 9 files changed, 200 insertions(+), 118 deletions(-) create mode 100644 Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs create mode 100644 Covid19Radar/Covid19Radar/Services/TermsUpdateServiceMock.cs diff --git a/Covid19Radar/Covid19Radar/App.xaml.cs b/Covid19Radar/Covid19Radar/App.xaml.cs index 5653063f3..36b43e339 100644 --- a/Covid19Radar/Covid19Radar/App.xaml.cs +++ b/Covid19Radar/Covid19Radar/App.xaml.cs @@ -188,7 +188,6 @@ private static void RegisterCommonTypes(IContainer container) container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); - container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); @@ -196,9 +195,11 @@ private static void RegisterCommonTypes(IContainer container) #if USE_MOCK container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); + container.Register(Reuse.Singleton); #else container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); + container.Register(Reuse.Singleton); #endif #if DEBUG @@ -224,6 +225,8 @@ private static void RegisterCommonTypes(IContainer container) container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); + container.Register(Reuse.Singleton); + // Utilities container.Register(Reuse.Singleton); container.Register(Reuse.Singleton); diff --git a/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs b/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs new file mode 100644 index 000000000..db9fa1293 --- /dev/null +++ b/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs @@ -0,0 +1,104 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +using System.Threading.Tasks; +using Covid19Radar.Model; +using Covid19Radar.Repository; +using Covid19Radar.Services.Logs; +using Covid19Radar.Views; +using Prism.Navigation; + +namespace Covid19Radar.Services +{ + public interface ISplashNavigationService + { + Destination Destination { get; set; } + INavigationParameters DestinationPageParameters { get; set; } + Task Prepare(); + Task NavigateNextAsync(); + } + + public class SplashNavigationService : ISplashNavigationService + { + private readonly INavigationService _navigationService; + private readonly IUserDataRepository _userDataRepository; + private readonly ILoggerService _loggerService; + private readonly ITermsUpdateService _termsUpdateService; + + public Destination Destination { get; set; } + public INavigationParameters DestinationPageParameters { get; set; } + + private TermsUpdateInfoModel _termsUpdateInfoModel; + + public SplashNavigationService( + INavigationService navigationService, + IUserDataRepository userDataRepository, + ILoggerService loggerService, + ITermsUpdateService termsUpdateService) + { + _navigationService = navigationService; + _userDataRepository = userDataRepository; + _termsUpdateService = termsUpdateService; + _loggerService = loggerService; + } + + public async Task Prepare() + { + _loggerService.StartMethod(); + try + { + _termsUpdateInfoModel = await _termsUpdateService.GetTermsUpdateInfo(); + } + finally + { + _loggerService.EndMethod(); + } + } + + public async Task NavigateNextAsync() + { + _loggerService.StartMethod(); + + try + { + string name; + INavigationParameters parameters; + + if (_userDataRepository.IsAllAgreed()) + { + _loggerService.Info("Is all agreed"); + + if (_termsUpdateService.IsUpdated(TermsType.TermsOfService, _termsUpdateInfoModel)) + { + name = $"/{nameof(ReAgreeTermsOfServicePage)}"; + parameters = ReAgreeTermsOfServicePage.BuildNavigationParams(_termsUpdateInfoModel.TermsOfService); + } + else if (_termsUpdateService.IsUpdated(TermsType.PrivacyPolicy, _termsUpdateInfoModel)) + { + name = $"/{nameof(ReAgreePrivacyPolicyPage)}"; + parameters = ReAgreePrivacyPolicyPage.BuildNavigationParams(_termsUpdateInfoModel.PrivacyPolicy); + } + else + { + name = Destination.ToPath(); + parameters = DestinationPageParameters; + } + } + else + { + name = $"/{nameof(TutorialPage1)}"; + parameters = null; + } + + _loggerService.Info($"Transition to {name}"); + return await _navigationService.NavigateAsync(name, parameters); + } + finally + { + _loggerService.EndMethod(); + } + } + } +} + diff --git a/Covid19Radar/Covid19Radar/Services/TermsUpdateServiceMock.cs b/Covid19Radar/Covid19Radar/Services/TermsUpdateServiceMock.cs new file mode 100644 index 000000000..d34e7577d --- /dev/null +++ b/Covid19Radar/Covid19Radar/Services/TermsUpdateServiceMock.cs @@ -0,0 +1,57 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +using System; +using System.Threading.Tasks; +using Covid19Radar.Model; + +namespace Covid19Radar.Services +{ + public class TermsUpdateServiceMock : ITermsUpdateService + { + public Task GetTermsUpdateInfo() + { + return Task.FromResult(new TermsUpdateInfoModel + { + TermsOfService = new TermsUpdateInfoModel.Detail + { + Text = "Mock: Terms of service", + UpdateDateTimeJst = DateTime.MinValue + }, + PrivacyPolicy = new TermsUpdateInfoModel.Detail + { + Text = "Mock: Privacy policy", + UpdateDateTimeJst = DateTime.MinValue + } + }); + } + + private bool _termsOfServiceUpdated = false; + private bool _privacyPolicyUpdated = false; + + public bool IsUpdated(TermsType termsType, TermsUpdateInfoModel termsUpdateInfo) + { + bool result = false; + switch (termsType) + { + case TermsType.TermsOfService: + if (_termsOfServiceUpdated) + { + _termsOfServiceUpdated = false; + result = true; + } + break; + case TermsType.PrivacyPolicy: + if (_privacyPolicyUpdated) + { + _privacyPolicyUpdated = false; + result = true; + } + break; + } + return result; + } + } +} + diff --git a/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreePrivacyPolicyPageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreePrivacyPolicyPageViewModel.cs index 3295408a3..2220d1551 100644 --- a/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreePrivacyPolicyPageViewModel.cs +++ b/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreePrivacyPolicyPageViewModel.cs @@ -18,8 +18,8 @@ namespace Covid19Radar.ViewModels public class ReAgreePrivacyPolicyPageViewModel : ViewModelBase { private readonly ILoggerService _loggerService; - private readonly ITermsUpdateService _termsUpdateService; private readonly IUserDataRepository _userDataRepository; + private readonly ISplashNavigationService _splashNavigationService; private DateTime UpdateDateTimeUtc { get; set; } private string _updateText; @@ -29,20 +29,18 @@ public string UpdateText set { SetProperty(ref _updateText, value); } } - private INavigationParameters _navigationParameters; - public Func BrowserOpenAsync = Browser.OpenAsync; public ReAgreePrivacyPolicyPageViewModel( INavigationService navigationService, ILoggerService loggerService, - ITermsUpdateService termsUpdateService, - IUserDataRepository userDataRepository + IUserDataRepository userDataRepository, + ISplashNavigationService splashNavigationService ) : base(navigationService) { _loggerService = loggerService; - _termsUpdateService = termsUpdateService; _userDataRepository = userDataRepository; + _splashNavigationService = splashNavigationService; } public Command OpenWebView => new Command(async () => @@ -61,12 +59,7 @@ IUserDataRepository userDataRepository _userDataRepository.SaveLastUpdateDate(TermsType.PrivacyPolicy, UpdateDateTimeUtc); - Destination destination = Destination.HomePage; - if (_navigationParameters.ContainsKey(ReAgreePrivacyPolicyPage.DestinationKey)) - { - destination = _navigationParameters.GetValue(ReAgreePrivacyPolicyPage.DestinationKey); - } - _ = await NavigationService.NavigateAsync(destination.ToPath(), _navigationParameters); + _ = await _splashNavigationService.NavigateNextAsync(); _loggerService.EndMethod(); }); @@ -76,11 +69,9 @@ public override void Initialize(INavigationParameters parameters) _loggerService.StartMethod(); base.Initialize(parameters); - TermsUpdateInfoModel.Detail updateInfo = (TermsUpdateInfoModel.Detail) parameters[ReAgreePrivacyPolicyPage.UpdatePrivacyPolicyInfoKey]; - UpdateDateTimeUtc = updateInfo.UpdateDateTimeUtc; - UpdateText = updateInfo.Text; - - _navigationParameters = parameters; + var privacyPolicyDetail = (TermsUpdateInfoModel.Detail) parameters[ReAgreePrivacyPolicyPage.PrivacyPolicyDetailKey]; + UpdateDateTimeUtc = privacyPolicyDetail.UpdateDateTimeUtc; + UpdateText = privacyPolicyDetail.Text; _loggerService.EndMethod(); } diff --git a/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreeTermsOfServicePageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreeTermsOfServicePageViewModel.cs index 6b9cf5d1f..d47ac8ebf 100644 --- a/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreeTermsOfServicePageViewModel.cs +++ b/Covid19Radar/Covid19Radar/ViewModels/HomePage/ReAgreeTermsOfServicePageViewModel.cs @@ -18,10 +18,9 @@ namespace Covid19Radar.ViewModels public class ReAgreeTermsOfServicePageViewModel : ViewModelBase { private readonly ILoggerService _loggerService; - private readonly ITermsUpdateService _termsUpdateService; private readonly IUserDataRepository _userDataRepository; + private readonly ISplashNavigationService _splashNavigationService; - private TermsUpdateInfoModel UpdateInfo; private DateTime UpdateDateTimeUtc { get; set; } private string _updateText; public string UpdateText @@ -30,20 +29,18 @@ public string UpdateText set { SetProperty(ref _updateText, value); } } - private INavigationParameters _navigationParameters; - public Func BrowserOpenAsync = Browser.OpenAsync; public ReAgreeTermsOfServicePageViewModel( INavigationService navigationService, ILoggerService loggerService, - ITermsUpdateService termsUpdateService, - IUserDataRepository userDataRepository + IUserDataRepository userDataRepository, + ISplashNavigationService splashNavigationService ) : base(navigationService) { _loggerService = loggerService; - _termsUpdateService = termsUpdateService; _userDataRepository = userDataRepository; + _splashNavigationService = splashNavigationService; } public Command OpenWebView => new Command(async () => @@ -62,21 +59,7 @@ IUserDataRepository userDataRepository _userDataRepository.SaveLastUpdateDate(TermsType.TermsOfService, UpdateDateTimeUtc); - Destination destination = Destination.HomePage; - if (_navigationParameters.ContainsKey(ReAgreeTermsOfServicePage.DestinationKey)) - { - destination = _navigationParameters.GetValue(ReAgreeTermsOfServicePage.DestinationKey); - } - - if (_termsUpdateService.IsUpdated(TermsType.PrivacyPolicy, UpdateInfo)) - { - var navigationParams = ReAgreePrivacyPolicyPage.BuildNavigationParams(UpdateInfo.PrivacyPolicy, destination, _navigationParameters); - _ = await NavigationService.NavigateAsync(nameof(ReAgreePrivacyPolicyPage), navigationParams); - } - else - { - _ = await NavigationService.NavigateAsync(destination.ToPath(), _navigationParameters); - } + _ = await _splashNavigationService.NavigateNextAsync(); _loggerService.EndMethod(); }); @@ -86,11 +69,9 @@ public override void Initialize(INavigationParameters parameters) _loggerService.StartMethod(); base.Initialize(parameters); - UpdateInfo = (TermsUpdateInfoModel) parameters[ReAgreeTermsOfServicePage.UpdateInfoKey]; - UpdateDateTimeUtc = UpdateInfo.TermsOfService.UpdateDateTimeUtc; - UpdateText = UpdateInfo.TermsOfService.Text; - - _navigationParameters = parameters; + var termsOfServiceDetail = (TermsUpdateInfoModel.Detail) parameters[ReAgreeTermsOfServicePage.TermsOfServiceDetailKey]; + UpdateDateTimeUtc = termsOfServiceDetail.UpdateDateTimeUtc; + UpdateText = termsOfServiceDetail.Text; _loggerService.EndMethod(); } diff --git a/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs index cbc5ea5c6..6c8025d73 100644 --- a/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs +++ b/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs @@ -2,8 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -using Covid19Radar.Model; -using Covid19Radar.Repository; using Covid19Radar.Services; using Covid19Radar.Services.Logs; using Covid19Radar.Services.Migration; @@ -14,26 +12,20 @@ namespace Covid19Radar.ViewModels { public class SplashPageViewModel : ViewModelBase { - private readonly ITermsUpdateService _termsUpdateService; private readonly ILoggerService _loggerService; - private readonly IUserDataService _userDataService; private readonly IMigrationService _migrationService; - private readonly IUserDataRepository _userDataRepository; + private readonly ISplashNavigationService _splashNavigatoinService; public SplashPageViewModel( INavigationService navigationService, - ITermsUpdateService termsUpdateService, ILoggerService loggerService, - IUserDataRepository userDataRepository, - IUserDataService userDataService, - IMigrationService migrationService + IMigrationService migrationService, + ISplashNavigationService splashNavigationService ) : base(navigationService) { - _termsUpdateService = termsUpdateService; _loggerService = loggerService; - _userDataRepository = userDataRepository; - _userDataService = userDataService; _migrationService = migrationService; + _splashNavigatoinService = splashNavigationService; } public override async void OnNavigatedTo(INavigationParameters parameters) @@ -44,45 +36,18 @@ public override async void OnNavigatedTo(INavigationParameters parameters) await _migrationService.MigrateAsync(); - var destination = Destination.HomePage; + Destination destination = Destination.HomePage; if (parameters.ContainsKey(SplashPage.DestinationKey)) { - _loggerService.Info($"Destination is set {destination}"); destination = parameters.GetValue(SplashPage.DestinationKey); } - if (_userDataRepository.IsAllAgreed()) - { - _loggerService.Info("User data exists"); - - var termsUpdateInfo = await _termsUpdateService.GetTermsUpdateInfo(); - - if (_termsUpdateService.IsUpdated(TermsType.TermsOfService, termsUpdateInfo)) - { - _loggerService.Info($"Transition to ReAgreeTermsOfServicePage"); - - var navigationParams = ReAgreeTermsOfServicePage.BuildNavigationParams(termsUpdateInfo, destination, parameters); - _ = await NavigationService.NavigateAsync("/" + nameof(ReAgreeTermsOfServicePage), navigationParams); - } - else if (_termsUpdateService.IsUpdated(TermsType.PrivacyPolicy, termsUpdateInfo)) - { - _loggerService.Info($"Transition to ReAgreePrivacyPolicyPage"); + _loggerService.Info($"Destination is set {destination}"); + _splashNavigatoinService.Destination = destination; + _splashNavigatoinService.DestinationPageParameters = parameters; - var navigationParams = ReAgreePrivacyPolicyPage.BuildNavigationParams(termsUpdateInfo.PrivacyPolicy, destination, parameters); - _ = await NavigationService.NavigateAsync("/" + nameof(ReAgreePrivacyPolicyPage), navigationParams); - } - else - { - _loggerService.Info($"Transition to {destination}"); - _ = await NavigationService.NavigateAsync(destination.ToPath(), parameters); - } - } - else - { - _loggerService.Info("No user data exists"); - _loggerService.Info($"Transition to TutorialPage1"); - _ = await NavigationService.NavigateAsync("/" + nameof(TutorialPage1)); - } + await _splashNavigatoinService.Prepare(); + await _splashNavigatoinService.NavigateNextAsync(); _loggerService.EndMethod(); } diff --git a/Covid19Radar/Covid19Radar/ViewModels/Settings/DebugPageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/Settings/DebugPageViewModel.cs index c49b20c08..1f5923086 100644 --- a/Covid19Radar/Covid19Radar/ViewModels/Settings/DebugPageViewModel.cs +++ b/Covid19Radar/Covid19Radar/ViewModels/Settings/DebugPageViewModel.cs @@ -297,19 +297,15 @@ private string ConvertSha256(string text) public Command OnClickReAgreeTermsOfServicePage => new Command(async () => { - var termsUpdateInfoModel = new TermsUpdateInfoModel - { - TermsOfService = new TermsUpdateInfoModel.Detail { Text = "DEBUG 利用規約の変更", UpdateDateTimeJst = new DateTime(2022, 03, 14) }, - PrivacyPolicy = new TermsUpdateInfoModel.Detail { Text = "DEBUG プライバシーポリシーの変更", UpdateDateTimeJst = new DateTime(2022, 03, 14) } - }; - var navigationParams = ReAgreeTermsOfServicePage.BuildNavigationParams(termsUpdateInfoModel, Destination.HomePage); + var termsOfServiceDetail = new TermsUpdateInfoModel.Detail { Text = "DEBUG 利用規約の変更", UpdateDateTimeJst = new DateTime(2022, 03, 14) }; + var navigationParams = ReAgreeTermsOfServicePage.BuildNavigationParams(termsOfServiceDetail); _ = await NavigationService.NavigateAsync("/" + nameof(ReAgreeTermsOfServicePage), navigationParams); }); public Command OnClickReAgreePrivacyPolicyPage => new Command(async () => { var privacyPolicyUpdated = new TermsUpdateInfoModel.Detail { Text = "DEBUG プライバシーポリシーの変更", UpdateDateTimeJst = new DateTime(2022, 03, 14) }; - var navigationParams = ReAgreePrivacyPolicyPage.BuildNavigationParams(privacyPolicyUpdated, Destination.HomePage); + var navigationParams = ReAgreePrivacyPolicyPage.BuildNavigationParams(privacyPolicyUpdated); _ = await NavigationService.NavigateAsync("/" + nameof(ReAgreePrivacyPolicyPage), navigationParams); }); diff --git a/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreePrivacyPolicyPage.xaml.cs b/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreePrivacyPolicyPage.xaml.cs index a0be2273e..e526302d2 100644 --- a/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreePrivacyPolicyPage.xaml.cs +++ b/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreePrivacyPolicyPage.xaml.cs @@ -12,21 +12,14 @@ namespace Covid19Radar.Views [XamlCompilation(XamlCompilationOptions.Compile)] public partial class ReAgreePrivacyPolicyPage : ContentPage { - public const string UpdatePrivacyPolicyInfoKey = "updatePrivacyPolicyInfo"; - public const string DestinationKey = "destination_reagree_privacy_policy"; + public const string PrivacyPolicyDetailKey = "privacy_policy_detail"; public static INavigationParameters BuildNavigationParams( - TermsUpdateInfoModel.Detail privacyPolicyInfo, - Destination destination, - INavigationParameters? baseParam = null + TermsUpdateInfoModel.Detail privatcyPolicyDetail ) { var param = new NavigationParameters(); - param.CopyFrom(baseParam); - - param.Add(UpdatePrivacyPolicyInfoKey, privacyPolicyInfo); - param.Add(DestinationKey, destination); - + param.Add(PrivacyPolicyDetailKey, privatcyPolicyDetail); return param; } diff --git a/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreeTermsOfServicePage.xaml.cs b/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreeTermsOfServicePage.xaml.cs index 7d284824f..b12c5f9de 100644 --- a/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreeTermsOfServicePage.xaml.cs +++ b/Covid19Radar/Covid19Radar/Views/HomePage/ReAgreeTermsOfServicePage.xaml.cs @@ -12,21 +12,13 @@ namespace Covid19Radar.Views [XamlCompilation(XamlCompilationOptions.Compile)] public partial class ReAgreeTermsOfServicePage : ContentPage { - public const string UpdateInfoKey = "updateInfo"; - public const string DestinationKey = "destination_reagree_term_of_service"; + public const string TermsOfServiceDetailKey = "terms_of_service_detail"; public static INavigationParameters BuildNavigationParams( - TermsUpdateInfoModel updateInfo, - Destination destination, - INavigationParameters? baseParam = null - ) + TermsUpdateInfoModel.Detail termsOfServiceDetail) { var param = new NavigationParameters(); - param.CopyFrom(baseParam); - - param.Add(UpdateInfoKey, updateInfo); - param.Add(DestinationKey, destination); - + param.Add(TermsOfServiceDetailKey, termsOfServiceDetail); return param; } From 83aeec8c7d64a3f2738012235a5ddde6a3cc3b56 Mon Sep 17 00:00:00 2001 From: cocoa-dev004 <66989461+cocoa-dev004@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:20:47 +0900 Subject: [PATCH 3/9] Add event log page --- .../Covid19Radar.Android.csproj | 8 + .../Covid19Radar.Android/MainActivity.cs | 2 - .../Covid19Radar.Android/MainApplication.cs | 3 + .../drawable-xhdpi/Improvement_img.png | Bin 0 -> 20302 bytes .../drawable-xxhdpi/Improvement_img.png | Bin 0 -> 34527 bytes .../Covid19Radar.iOS/Covid19Radar.iOS.csproj | 2 + .../Base.lproj/Improvement_img@2x.png | Bin 0 -> 20302 bytes .../Base.lproj/Improvement_img@3x.png | Bin 0 -> 34527 bytes Covid19Radar/Covid19Radar/App.xaml | 7 +- Covid19Radar/Covid19Radar/App.xaml.cs | 2 + .../Repository/SendEventLogStateRepository.cs | 12 +- .../Resources/AppResources.Designer.cs | 163 +++++++++++-- .../Resources/AppResources.ja.resx | 79 +++++- .../Covid19Radar/Resources/AppResources.resx | 78 +++++- .../Resources/AppResources.zh-Hans.resx | 78 +++++- .../Covid19Radar/Services/DialogService.cs | 8 + .../Covid19Radar/Services/IDialogService.cs | 1 + .../Services/SplashNavigationService.cs | 10 +- .../Settings/EventLogSettingPageViewModel.cs | 122 ++++++++++ .../EventLogCooperationPageViewModel.cs | 116 +++++++++ .../Tutorial/TutorialPage4ViewModel.cs | 23 +- .../Views/Settings/EventLogSettingPage.xaml | 88 +++++++ .../Settings/EventLogSettingPage.xaml.cs | 46 ++++ .../Tutorial/EventLogCooperationPage.xaml | 100 ++++++++ .../Tutorial/EventLogCooperationPage.xaml.cs | 39 +++ .../Views/Tutorial/TutorialPage4.xaml | 6 +- .../Covid19Radar.UnitTests.csproj | 2 + .../SendEventLogStateRepositoryTests.cs | 65 +++++ .../Services/DialogServiceTests.cs | 91 +++++++ .../Services/EventLogServiceTests.cs | 18 +- .../Services/SplashNavigationServiceTests.cs | 215 ++++++++++++++++ .../ReAgreePrivacyPolicyPageViewModelTests.cs | 54 +--- ...ReAgreeTermsOfServicePageViewModelTests.cs | 82 ++----- .../HomePage/SplashPageViewModelTests.cs | 63 +++++ .../EventLogSettingPageViewModelTests.cs | 230 ++++++++++++++++++ .../EventLogCooperationPageViewModelTests.cs | 157 ++++++++++++ .../Tutorial/TutorialPage4ViewModelTests.cs | 146 +++++++++++ 37 files changed, 1941 insertions(+), 175 deletions(-) create mode 100644 Covid19Radar/Covid19Radar.Android/Resources/drawable-xhdpi/Improvement_img.png create mode 100644 Covid19Radar/Covid19Radar.Android/Resources/drawable-xxhdpi/Improvement_img.png create mode 100644 Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@2x.png create mode 100644 Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@3x.png create mode 100644 Covid19Radar/Covid19Radar/ViewModels/Settings/EventLogSettingPageViewModel.cs create mode 100644 Covid19Radar/Covid19Radar/ViewModels/Tutorial/EventLogCooperationPageViewModel.cs create mode 100644 Covid19Radar/Covid19Radar/Views/Settings/EventLogSettingPage.xaml create mode 100644 Covid19Radar/Covid19Radar/Views/Settings/EventLogSettingPage.xaml.cs create mode 100644 Covid19Radar/Covid19Radar/Views/Tutorial/EventLogCooperationPage.xaml create mode 100644 Covid19Radar/Covid19Radar/Views/Tutorial/EventLogCooperationPage.xaml.cs create mode 100644 Covid19Radar/Tests/Covid19Radar.UnitTests/Services/SplashNavigationServiceTests.cs create mode 100644 Covid19Radar/Tests/Covid19Radar.UnitTests/ViewModels/HomePage/SplashPageViewModelTests.cs create mode 100644 Covid19Radar/Tests/Covid19Radar.UnitTests/ViewModels/Settings/EventLogSettingPageViewModelTests.cs create mode 100644 Covid19Radar/Tests/Covid19Radar.UnitTests/ViewModels/Tutorial/EventLogCooperationPageViewModelTests.cs create mode 100644 Covid19Radar/Tests/Covid19Radar.UnitTests/ViewModels/Tutorial/TutorialPage4ViewModelTests.cs diff --git a/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj b/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj index 4088f4c04..57063e065 100644 --- a/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj +++ b/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj @@ -451,6 +451,14 @@ + + + + + + + + diff --git a/Covid19Radar/Covid19Radar.Android/MainActivity.cs b/Covid19Radar/Covid19Radar.Android/MainActivity.cs index b8e278801..304ef24ee 100644 --- a/Covid19Radar/Covid19Radar.Android/MainActivity.cs +++ b/Covid19Radar/Covid19Radar.Android/MainActivity.cs @@ -83,8 +83,6 @@ protected override async void OnCreate(Bundle savedInstanceState) ToolbarResource = Resource.Layout.Toolbar; base.SetTheme(Resource.Style.MainTheme); - AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo; - base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); diff --git a/Covid19Radar/Covid19Radar.Android/MainApplication.cs b/Covid19Radar/Covid19Radar.Android/MainApplication.cs index 016bfe599..b2d213f2b 100644 --- a/Covid19Radar/Covid19Radar.Android/MainApplication.cs +++ b/Covid19Radar/Covid19Radar.Android/MainApplication.cs @@ -18,6 +18,7 @@ using System.Threading.Tasks; using Prism.Ioc; using Covid19Radar.Repository; +using AndroidX.AppCompat.App; namespace Covid19Radar.Droid { @@ -72,6 +73,8 @@ public AbsExposureNotificationClient GetEnClient() public override void OnCreate() { + AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo; + base.OnCreate(); App.InitializeServiceLocator(RegisterPlatformTypes); diff --git a/Covid19Radar/Covid19Radar.Android/Resources/drawable-xhdpi/Improvement_img.png b/Covid19Radar/Covid19Radar.Android/Resources/drawable-xhdpi/Improvement_img.png new file mode 100644 index 0000000000000000000000000000000000000000..a73860f1e8b0fecfb1aaecd5c303019663d02797 GIT binary patch literal 20302 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 literal 0 HcmV?d00001 diff --git a/Covid19Radar/Covid19Radar.Android/Resources/drawable-xxhdpi/Improvement_img.png b/Covid19Radar/Covid19Radar.Android/Resources/drawable-xxhdpi/Improvement_img.png new file mode 100644 index 0000000000000000000000000000000000000000..863eb8c32064f0a7486a54114b7d94d7694b0dfe GIT binary patch literal 34527 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⁡o;gibM*I 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 + + diff --git a/Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@2x.png b/Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a73860f1e8b0fecfb1aaecd5c303019663d02797 GIT binary patch literal 20302 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 literal 0 HcmV?d00001 diff --git a/Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@3x.png b/Covid19Radar/Covid19Radar.iOS/Resources/Base.lproj/Improvement_img@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..863eb8c32064f0a7486a54114b7d94d7694b0dfe GIT binary patch literal 34527 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⁡o;gibM*I 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 + @@ -32,6 +32,7 @@ #066AB9 #E8F7FF #EEEEEE + #066AB9 @@ -324,6 +325,10 @@ + + diff --git a/Covid19Radar/Covid19Radar/App.xaml.cs b/Covid19Radar/Covid19Radar/App.xaml.cs index 36b43e339..cbcb98b91 100644 --- a/Covid19Radar/Covid19Radar/App.xaml.cs +++ b/Covid19Radar/Covid19Radar/App.xaml.cs @@ -142,6 +142,7 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry) // Settings containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); // tutorial containerRegistry.RegisterForNavigation(); @@ -150,6 +151,7 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry) containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation(); // Help containerRegistry.RegisterForNavigation(); diff --git a/Covid19Radar/Covid19Radar/Repository/SendEventLogStateRepository.cs b/Covid19Radar/Covid19Radar/Repository/SendEventLogStateRepository.cs index a6550ec60..db5d587be 100644 --- a/Covid19Radar/Covid19Radar/Repository/SendEventLogStateRepository.cs +++ b/Covid19Radar/Covid19Radar/Repository/SendEventLogStateRepository.cs @@ -50,10 +50,7 @@ public interface ISendEventLogStateRepository SendEventLogState GetSendEventLogState(EventType eventType); - public static bool IsExistNotSetEventType(ISendEventLogStateRepository sendEventLogStateRepository) - => EventType.All - .Select(eventType => sendEventLogStateRepository.GetSendEventLogState(eventType)) - .Any(state => state == SendEventLogState.NotSet); + bool IsExistNotSetEventType(); } public class SendEventLogStateRepository : ISendEventLogStateRepository @@ -154,5 +151,12 @@ public void SetSendEventLogState(EventType eventType, SendEventLogState state) } } + + public bool IsExistNotSetEventType() + { + return EventType.All + .Select(eventType => GetSendEventLogState(eventType)) + .Any(state => state == SendEventLogState.NotSet); + } } } diff --git a/Covid19Radar/Covid19Radar/Resources/AppResources.Designer.cs b/Covid19Radar/Covid19Radar/Resources/AppResources.Designer.cs index 33e328c38..2ea6a1232 100644 --- a/Covid19Radar/Covid19Radar/Resources/AppResources.Designer.cs +++ b/Covid19Radar/Covid19Radar/Resources/AppResources.Designer.cs @@ -201,15 +201,6 @@ public static string ButtonNotifyOtherPage { } } - /// - /// Looks up a localized string similar to Not Now. - /// - public static string ButtonNotNow { - get { - return ResourceManager.GetString("ButtonNotNow", resourceCulture); - } - } - /// /// Looks up a localized string similar to OK. /// @@ -525,6 +516,142 @@ public static string Error { } } + /// + /// Looks up a localized string similar to - The information are sent anonymously.. + /// + public static string EventLogCooperationPageBullets1 { + get { + return ResourceManager.GetString("EventLogCooperationPageBullets1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - The content of the information sent does not include any personally identifiable information about you or the positive registrants who have have been in contact with you.. + /// + public static string EventLogCooperationPageBullets2 { + get { + return ResourceManager.GetString("EventLogCooperationPageBullets2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - Anonymous information may be aggregated and published to help improve public health.. + /// + public static string EventLogCooperationPageBullets3 { + get { + return ResourceManager.GetString("EventLogCooperationPageBullets3", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - Anonymous information may be aggregated and published to help improve public health.. + /// + public static string EventLogCooperationPageBullets4 { + get { + return ResourceManager.GetString("EventLogCooperationPageBullets4", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Please allow the Ministry of Health, Labor and Welfare to use the app information of the app to improve COCOA.. + /// + public static string EventLogCooperationPageDescription1 { + get { + return ResourceManager.GetString("EventLogCooperationPageDescription1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Send information setting. + /// + public static string EventLogCooperationPageSendButton { + get { + return ResourceManager.GetString("EventLogCooperationPageSendButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Please help us improve the COCOA app. + /// + public static string EventLogCooperationPageTitle { + get { + return ResourceManager.GetString("EventLogCooperationPageTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - The information are sent anonymously.. + /// + public static string EventLogSettingPageBullets1 { + get { + return ResourceManager.GetString("EventLogSettingPageBullets1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to - The content of the information sent does not include any personally identifiable information about you or the positive registrants who have have been in contact with you.. + /// + public static string EventLogSettingPageBullets2 { + get { + return ResourceManager.GetString("EventLogSettingPageBullets2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The app will send the following information to the Ministry of Health, Labor and Welfare. Please check the items that are allowed to be sent.. + /// + public static string EventLogSettingPageDescription1 { + get { + return ResourceManager.GetString("EventLogSettingPageDescription1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Setting was saved. + /// + public static string EventLogSettingPageSaveCompleteMessageTitle { + get { + return ResourceManager.GetString("EventLogSettingPageSaveCompleteMessageTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In case a close contact hase been confirmed, or it is determined that there is a possibility of close a notification will be displayed. If there is no possibility of close contact, it will not. + ///By collecting the number of notifications, we can use it to understand how many close contacts are occurring in Japan.. + /// + public static string EventLogSettingPageSettingDescription1 { + get { + return ResourceManager.GetString("EventLogSettingPageSettingDescription1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Save the setting. + /// + public static string EventLogSettingPageSettingSaveButton { + get { + return ResourceManager.GetString("EventLogSettingPageSettingSaveButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Display close contact notification. + /// + public static string EventLogSettingPageSettingTitle1 { + get { + return ResourceManager.GetString("EventLogSettingPageSettingTitle1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Setting for the information that will be sent. + /// + public static string EventLogSettingPageTitle { + get { + return ResourceManager.GetString("EventLogSettingPageTitle", resourceCulture); + } + } + /// /// Looks up a localized string similar to Save information. /// @@ -2602,6 +2729,15 @@ public static string SettingsPageTitle { } } + /// + /// Looks up a localized string similar to Set up later. + /// + public static string SetupLaerLink { + get { + return ResourceManager.GetString("SetupLaerLink", resourceCulture); + } + } + /// /// Looks up a localized string similar to . /// @@ -3097,15 +3233,6 @@ public static string TutorialPage4Description2 { } } - /// - /// Looks up a localized string similar to Set up later. - /// - public static string TutorialPage4Link { - get { - return ResourceManager.GetString("TutorialPage4Link", resourceCulture); - } - } - /// /// Looks up a localized string similar to To use Exposure Notifications. /// diff --git a/Covid19Radar/Covid19Radar/Resources/AppResources.ja.resx b/Covid19Radar/Covid19Radar/Resources/AppResources.ja.resx index e374481e2..ef0d65c7a 100644 --- a/Covid19Radar/Covid19Radar/Resources/AppResources.ja.resx +++ b/Covid19Radar/Covid19Radar/Resources/AppResources.ja.resx @@ -41,9 +41,6 @@ OK - - あとで設定する - Exposure Tab Button @@ -462,10 +459,6 @@ 有効にする 有効にする - - あとで設定する - あとで設定する - 本アプリで接触検知をご利用いただくために、スマートフォンのBluetooth(ブルートゥース)(※)通信を有効にしてください。 本アプリで接触検知をご利用いただくために、スマートフォンのBluetooth(ブルートゥース)(※)通信を有効にしてください。 @@ -1437,4 +1430,76 @@ COCOAのソースコードは次のURLから入手できます。 COCOAは複数ユーザーでの利用をサポートしていません。管理者(所有者)で実行してください。 + + あとで設定する + あとで設定する + + + + アプリの改善に +ご協力ください + アプリの改善に +ご協力ください + + + COCOA(※)の改善のため、厚生労働省にアプリの使用情報を送信することを許可してください。 + COCOA(※)の改善のため、厚生労働省にアプリの使用情報を送信することを許可してください。 + + + ・送信は匿名で行われます。 + ・送信は匿名で行われます。 + + + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + ・公衆衛生の改善に寄与するため、匿名情報を集計して公開する場合があります。 + ・公衆衛生の改善に寄与するため、匿名情報を集計して公開する場合があります。 + + + ・送信する情報の設定は、「このアプリについて」からいつでも変更することができます。 + ・送信する情報の設定は、「このアプリについて」からいつでも変更することができます。 + + + 送信情報を設定 + 送信情報を設定 + + + + 送信する情報の設定 + 送信する情報の設定 + + + アプリは次の情報を厚生労働省に送信します。送信を許可する項目にチェックを入れてください。 + アプリは次の情報を厚生労働省に送信します。送信を許可する項目にチェックを入れてください。 + + + ・送信は匿名で行われます。 + ・送信は匿名で行われます。 + + + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + 接触通知の表示 + 接触通知の表示 + + + 接触確認の結果、接触の可能性があると判定して通知を表示したときに送信します。接触の可能性がない場合は送信しません。 +通知の発生数を収集することで、日本国内でどの程度の接触が発生しているかを把握する目的で使います。 + 接触確認の結果、接触の可能性があると判定して通知を表示したときに送信します。接触の可能性がない場合は送信しません。 +通知の発生数を収集することで、日本国内でどの程度の接触が発生しているかを把握する目的で使います。 + + + 設定を保存 + 設定を保存 + + + + 設定を保存しました + 設定を保存しました + + diff --git a/Covid19Radar/Covid19Radar/Resources/AppResources.resx b/Covid19Radar/Covid19Radar/Resources/AppResources.resx index dc50132ad..cf42614ec 100644 --- a/Covid19Radar/Covid19Radar/Resources/AppResources.resx +++ b/Covid19Radar/Covid19Radar/Resources/AppResources.resx @@ -154,9 +154,6 @@ Please check your network connection. 電波状況の良い場所でもう一度お試しください。 - - Not Now - Exposures Tab Button @@ -600,10 +597,6 @@ Turn on 有効にする - - Set up later - あとで設定する - Please turn on Exposure Notifications function and Bluetooth to start recording close contacts with other users. 本アプリで接触検知をご利用いただくために、スマートフォンのBluetooth通信を有効にしてください。 @@ -1545,4 +1538,75 @@ Please execute the app as an administrator (owner). COCOAは複数ユーザーでの利用をサポートしていません。管理者(所有者)で実行してください。 + + Set up later + あとで設定する + + + + Please help us improve the COCOA app + アプリの改善に +ご協力ください + + + Please allow the Ministry of Health, Labor and Welfare to use the app information of the app to improve COCOA. + COCOA(※)の改善のため、厚生労働省にアプリの使用情報を送信することを許可してください。 + + + - The information are sent anonymously. + ・送信は匿名で行われます。 + + + - The content of the information sent does not include any personally identifiable information about you or the positive registrants who have have been in contact with you. + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + - Anonymous information may be aggregated and published to help improve public health. + ・公衆衛生の改善に寄与するため、匿名情報を集計して公開する場合があります。 + + + - Anonymous information may be aggregated and published to help improve public health. + ・送信する情報の設定は、「このアプリについて」からいつでも変更することができます。 + + + Send information setting + 送信情報を設定 + + + + Setting for the information that will be sent + 送信する情報の設定 + + + The app will send the following information to the Ministry of Health, Labor and Welfare. Please check the items that are allowed to be sent. + アプリは次の情報を厚生労働省に送信します。送信を許可する項目にチェックを入れてください。 + + + - The information are sent anonymously. + ・送信は匿名で行われます。 + + + - The content of the information sent does not include any personally identifiable information about you or the positive registrants who have have been in contact with you. + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + Display close contact notification + 接触通知の表示 + + + In case a close contact hase been confirmed, or it is determined that there is a possibility of close a notification will be displayed. If there is no possibility of close contact, it will not. +By collecting the number of notifications, we can use it to understand how many close contacts are occurring in Japan. + 接触確認の結果、接触の可能性があると判定して通知を表示したときに送信します。接触の可能性がない場合は送信しません。 +通知の発生数を収集することで、日本国内でどの程度の接触が発生しているかを把握する目的で使います。 + + + Save the setting + 設定を保存 + + + + Setting was saved + 設定を保存しました + + diff --git a/Covid19Radar/Covid19Radar/Resources/AppResources.zh-Hans.resx b/Covid19Radar/Covid19Radar/Resources/AppResources.zh-Hans.resx index 51278cbb9..848760341 100644 --- a/Covid19Radar/Covid19Radar/Resources/AppResources.zh-Hans.resx +++ b/Covid19Radar/Covid19Radar/Resources/AppResources.zh-Hans.resx @@ -41,9 +41,6 @@ OK - - 暂不 - 暴露 Tab Button @@ -488,10 +485,6 @@ 开启 有効にする - - 稍后设置 - あとで設定する - 为了即时收到密切接触信息,请开启手机的蓝牙模式 本アプリで接触検知をご利用いただくために、スマートフォンのBluetooth通信を有効にしてください。 @@ -1442,4 +1435,75 @@ COCOAのソースコードは次のURLから入手できます。 COCOAは複数ユーザーでの利用をサポートしていません。管理者(所有者)で実行してください。 + + 稍后设置 + あとで設定する + + + + 请协助改进应用 + アプリの改善に +ご協力ください + + + 为了改进COCOA,请允许向厚生劳动省发送应用的使用信息。 + COCOA(※)の改善のため、厚生労働省にアプリの使用情報を送信することを許可してください。 + + + - 发送是匿名的。 + ・送信は匿名で行われます。 + + + - 发送内容中不包括可以识别您和与您接触的阳性登记人的信息。 + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + - 为了促进公共卫生的改善,可能会汇总和披露匿名信息。 + ・公衆衛生の改善に寄与するため、匿名情報を集計して公開する場合があります。 + + + - 您可以随时从“关于本应用”中更改发送信息设置。 + ・送信する情報の設定は、「このアプリについて」からいつでも変更することができます。 + + + 发送信息设置 + 送信情報を設定 + + + + 发送信息的设置 + 送信する情報の設定 + + + 本应用将以下信息发送给厚生劳动省。请勾选允许发送的项目。 + アプリは次の情報を厚生労働省に送信します。送信を許可する項目にチェックを入れてください。 + + + - 发送是匿名的。 + ・送信は匿名で行われます。 + + + - 发送内容中不包括可以识别您和与您接触的阳性登记人的信息。 + ・送信内容に、あなたや、あなたと接触した陽性登録者を個人として特定できる情報は含まれません。 + + + 显示暴露通知 + 接触通知の表示 + + + 通过接触确认,当确定存在接触的可能性并且显示通知的时候发送。如无接触的可能性,则不会发送。 +我们可以通过收集通知显示的次数来了解在日本发生了多少接触。 + 接触確認の結果、接触の可能性があると判定して通知を表示したときに送信します。接触の可能性がない場合は送信しません。 +通知の発生数を収集することで、日本国内でどの程度の接触が発生しているかを把握する目的で使います。 + + + 保存设置 + 設定を保存 + + + + 设置已保存 + 設定を保存しました + + diff --git a/Covid19Radar/Covid19Radar/Services/DialogService.cs b/Covid19Radar/Covid19Radar/Services/DialogService.cs index c12890659..ce6968eeb 100644 --- a/Covid19Radar/Covid19Radar/Services/DialogService.cs +++ b/Covid19Radar/Covid19Radar/Services/DialogService.cs @@ -86,6 +86,14 @@ await AlertAsync( AppResources.ButtonOk); } + public async Task ShowEventLogSaveCompletedAsync() + { + await AlertAsync( + "", + AppResources.EventLogSettingPageSaveCompleteMessageTitle, + AppResources.ButtonOk); + } + public async Task ConfirmAsync(string message, string title = null, string okText = null, string cancelText = null) => await UserDialogs.Instance.ConfirmAsync(message, title, okText, cancelText); diff --git a/Covid19Radar/Covid19Radar/Services/IDialogService.cs b/Covid19Radar/Covid19Radar/Services/IDialogService.cs index 120664369..dc4791ab0 100644 --- a/Covid19Radar/Covid19Radar/Services/IDialogService.cs +++ b/Covid19Radar/Covid19Radar/Services/IDialogService.cs @@ -15,5 +15,6 @@ public interface IDialogService Task ShowHomePageUnknownErrorWaringAsync(); Task ShowLocalNotificationOffWarningAsync(); Task ShowUserProfileNotSupportAsync(); + Task ShowEventLogSaveCompletedAsync(); } } diff --git a/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs b/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs index db9fa1293..a0157d7af 100644 --- a/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs +++ b/Covid19Radar/Covid19Radar/Services/SplashNavigationService.cs @@ -25,6 +25,7 @@ public class SplashNavigationService : ISplashNavigationService private readonly IUserDataRepository _userDataRepository; private readonly ILoggerService _loggerService; private readonly ITermsUpdateService _termsUpdateService; + private readonly ISendEventLogStateRepository _sendEventLogStateRepository; public Destination Destination { get; set; } public INavigationParameters DestinationPageParameters { get; set; } @@ -35,12 +36,14 @@ public SplashNavigationService( INavigationService navigationService, IUserDataRepository userDataRepository, ILoggerService loggerService, - ITermsUpdateService termsUpdateService) + ITermsUpdateService termsUpdateService, + ISendEventLogStateRepository sendEventLogStateRepository) { _navigationService = navigationService; _userDataRepository = userDataRepository; _termsUpdateService = termsUpdateService; _loggerService = loggerService; + _sendEventLogStateRepository = sendEventLogStateRepository; } public async Task Prepare() @@ -79,6 +82,11 @@ public async Task NavigateNextAsync() name = $"/{nameof(ReAgreePrivacyPolicyPage)}"; parameters = ReAgreePrivacyPolicyPage.BuildNavigationParams(_termsUpdateInfoModel.PrivacyPolicy); } + else if (_sendEventLogStateRepository.IsExistNotSetEventType()) + { + name = $"/{nameof(EventLogCooperationPage)}"; + parameters = EventLogCooperationPage.BuildNavigationParams(EventLogCooperationPage.TransitionReason.Splash); + } else { name = Destination.ToPath(); diff --git a/Covid19Radar/Covid19Radar/ViewModels/Settings/EventLogSettingPageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/Settings/EventLogSettingPageViewModel.cs new file mode 100644 index 000000000..e9249d366 --- /dev/null +++ b/Covid19Radar/Covid19Radar/ViewModels/Settings/EventLogSettingPageViewModel.cs @@ -0,0 +1,122 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +using System; +using Covid19Radar.Repository; +using Covid19Radar.Services; +using Covid19Radar.Services.Logs; +using Covid19Radar.Views; +using Prism.Navigation; +using Xamarin.CommunityToolkit.ObjectModel; +using Xamarin.Forms; + +namespace Covid19Radar.ViewModels +{ + public class EventLogSettingPageViewModel : ViewModelBase + { + private const bool ExposureNotifyIsCheckedDefault = false; + + private bool _exposureNotifyIsChecked; + public bool ExposureNotifyIsChecked + { + get => _exposureNotifyIsChecked; + set => SetProperty(ref _exposureNotifyIsChecked, value); + } + + public bool BackButtonEnabled + => _transitionReason == EventLogSettingPage.TransitionReason.Setting; + + private readonly ILoggerService _loggerService; + private readonly IDialogService _dialogService; + private readonly ISplashNavigationService _splashNavigationService; + private readonly ISendEventLogStateRepository _sendEventLogStateRepository; + + private EventLogSettingPage.TransitionReason _transitionReason; + + public EventLogSettingPageViewModel( + INavigationService navigationService, + ILoggerService loggerService, + IDialogService dialogService, + ISplashNavigationService splashNavigationService, + ISendEventLogStateRepository sendEventLogStateRepository + ) : base(navigationService) + { + _loggerService = loggerService; + _dialogService = dialogService; + _splashNavigationService = splashNavigationService; + _sendEventLogStateRepository = sendEventLogStateRepository; + } + + public override void Initialize(INavigationParameters parameters) + { + _loggerService.StartMethod(); + base.Initialize(parameters); + + try + { + if (parameters.ContainsKey(EventLogSettingPage.TransitionReasonKey)) + { + _transitionReason = parameters.GetValue(EventLogCooperationPage.TransitionReasonKey); + } + + SendEventLogState exposureNotifiedState = _sendEventLogStateRepository.GetSendEventLogState(EventType.ExposureNotified); + if (exposureNotifiedState == SendEventLogState.NotSet) + { + ExposureNotifyIsChecked = ExposureNotifyIsCheckedDefault; + } + else + { + ExposureNotifyIsChecked = exposureNotifiedState == SendEventLogState.Enable; + } + } + finally + { + _loggerService.EndMethod(); + } + } + + public Command OnClickExposureNotifyCheckBoxLabel + => new Command(() => ExposureNotifyIsChecked = !ExposureNotifyIsChecked); + + public IAsyncCommand OnClickSave => new AsyncCommand(async () => + { + _loggerService.StartMethod(); + + try + { + _sendEventLogStateRepository.SetSendEventLogState(EventType.ExposureNotified, ExposureNotifyIsChecked ? SendEventLogState.Enable : SendEventLogState.Disable); + + foreach (var eventType in EventType.All) + { + if (_sendEventLogStateRepository.GetSendEventLogState(eventType) == SendEventLogState.NotSet) + { + _sendEventLogStateRepository.SetSendEventLogState(eventType, SendEventLogState.Disable); + } + } + + await _dialogService.ShowEventLogSaveCompletedAsync(); + + switch (_transitionReason) + { + case EventLogSettingPage.TransitionReason.Tutorial: + _ = await NavigationService.NavigateAsync(nameof(TutorialPage6)); + break; + case EventLogSettingPage.TransitionReason.Splash: + _ = await _splashNavigationService.NavigateNextAsync(); + break; + case EventLogSettingPage.TransitionReason.Setting: + _ = await NavigationService.GoBackAsync(); + break; + default: + throw new ArgumentException($"EventLogSettingPage.TransitionReason is invalid. ({_transitionReason})"); + } + } + finally + { + _loggerService.EndMethod(); + } + }); + } +} + diff --git a/Covid19Radar/Covid19Radar/ViewModels/Tutorial/EventLogCooperationPageViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/Tutorial/EventLogCooperationPageViewModel.cs new file mode 100644 index 000000000..1a668cdc8 --- /dev/null +++ b/Covid19Radar/Covid19Radar/ViewModels/Tutorial/EventLogCooperationPageViewModel.cs @@ -0,0 +1,116 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +using System; +using Covid19Radar.Repository; +using Covid19Radar.Services; +using Covid19Radar.Services.Logs; +using Covid19Radar.Views; +using Prism.Navigation; +using Xamarin.CommunityToolkit.ObjectModel; + +namespace Covid19Radar.ViewModels +{ + public class EventLogCooperationPageViewModel : ViewModelBase + { + public string SetupLaerLinkReadText => $"{Resources.AppResources.SetupLaerLink} {Resources.AppResources.Button}"; + + private readonly ILoggerService _loggerService; + private readonly ISplashNavigationService _splashNavigationService; + private readonly ISendEventLogStateRepository _sendEventLogStateRepository; + + private EventLogCooperationPage.TransitionReason _transitionReason; + + public EventLogCooperationPageViewModel( + INavigationService navigationService, + ILoggerService loggerService, + ISplashNavigationService splashNavigationService, + ISendEventLogStateRepository sendEventLogStateRepository + ) : base(navigationService) + { + _loggerService = loggerService; + _splashNavigationService = splashNavigationService; + _sendEventLogStateRepository = sendEventLogStateRepository; + } + + public override void Initialize(INavigationParameters parameters) + { + _loggerService.StartMethod(); + base.Initialize(parameters); + + try + { + if (parameters.ContainsKey(EventLogCooperationPage.TransitionReasonKey)) + { + _transitionReason = parameters.GetValue(EventLogCooperationPage.TransitionReasonKey); + } + } + finally + { + _loggerService.EndMethod(); + } + } + + public IAsyncCommand OnClickSetting => new AsyncCommand(async () => + { + _loggerService.StartMethod(); + + try + { + EventLogSettingPage.TransitionReason transitionReason; + switch (_transitionReason) + { + case EventLogCooperationPage.TransitionReason.Tutorial: + transitionReason = EventLogSettingPage.TransitionReason.Tutorial; + break; + case EventLogCooperationPage.TransitionReason.Splash: + transitionReason = EventLogSettingPage.TransitionReason.Splash; + break; + default: + throw new ArgumentException($"EventLogCooperationPage.TransitionReason is invalid. ({_transitionReason})"); + } + + INavigationParameters navigatinParameters = EventLogSettingPage.BuildNavigationParams(transitionReason); + _ = await NavigationService.NavigateAsync(nameof(EventLogSettingPage), navigatinParameters); + } + finally + { + _loggerService.EndMethod(); + } + }); + + public IAsyncCommand OnClickSetLater => new AsyncCommand(async () => + { + _loggerService.StartMethod(); + + try + { + foreach (var eventType in EventType.All) + { + if (_sendEventLogStateRepository.GetSendEventLogState(eventType) == SendEventLogState.NotSet) + { + _sendEventLogStateRepository.SetSendEventLogState(eventType, SendEventLogState.Disable); + } + } + + switch (_transitionReason) + { + case EventLogCooperationPage.TransitionReason.Tutorial: + _ = await NavigationService.NavigateAsync(nameof(TutorialPage6)); + break; + case EventLogCooperationPage.TransitionReason.Splash: + _ = await _splashNavigationService.NavigateNextAsync(); + break; + default: + throw new ArgumentException($"EventLogCooperationPage.TransitionReason is invalid. ({_transitionReason})"); + } + } + finally + { + _loggerService.EndMethod(); + } + }); + } +} + diff --git a/Covid19Radar/Covid19Radar/ViewModels/Tutorial/TutorialPage4ViewModel.cs b/Covid19Radar/Covid19Radar/ViewModels/Tutorial/TutorialPage4ViewModel.cs index 1825249a2..8a29af3b5 100644 --- a/Covid19Radar/Covid19Radar/ViewModels/Tutorial/TutorialPage4ViewModel.cs +++ b/Covid19Radar/Covid19Radar/ViewModels/Tutorial/TutorialPage4ViewModel.cs @@ -2,19 +2,21 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +using System.Threading.Tasks; using Chino; using Covid19Radar.Resources; using Covid19Radar.Services; using Covid19Radar.Services.Logs; using Covid19Radar.Views; using Prism.Navigation; +using Xamarin.CommunityToolkit.ObjectModel; using Xamarin.Forms; namespace Covid19Radar.ViewModels { public class TutorialPage4ViewModel : ViewModelBase, IExposureNotificationEventCallback { - public string TutorialPage4LinkReadText => $"{AppResources.TutorialPage4Link} {AppResources.Button}"; + public string SetupLaerLinkReadText => $"{AppResources.SetupLaerLink} {AppResources.Button}"; private readonly IDialogService dialogService; private readonly ILoggerService loggerService; @@ -32,7 +34,7 @@ AbsExposureNotificationApiService exposureNotificationApiService this.exposureNotificationApiService = exposureNotificationApiService; } - public Command OnClickEnable => new Command(async () => + public IAsyncCommand OnClickEnable => new AsyncCommand(async () => { loggerService.StartMethod(); @@ -41,7 +43,7 @@ AbsExposureNotificationApiService exposureNotificationApiService var success = await exposureNotificationApiService.StartExposureNotificationAsync(); if (success) { - await NavigationService.NavigateAsync(nameof(TutorialPage6)); + await NavigateNextPage(); } } catch (ENException exception) @@ -53,7 +55,7 @@ AbsExposureNotificationApiService exposureNotificationApiService ShowStatuses(); return; } - await NavigationService.NavigateAsync(nameof(TutorialPage6)); + await NavigateNextPage(); } finally { @@ -70,10 +72,10 @@ private async void ShowStatuses() } } - public Command OnClickDisable => new Command(async () => + public IAsyncCommand OnClickDisable => new AsyncCommand(async () => { loggerService.StartMethod(); - await NavigationService.NavigateAsync(nameof(TutorialPage6)); + await NavigateNextPage(); loggerService.EndMethod(); }); @@ -82,9 +84,16 @@ public async void OnEnabled() loggerService.StartMethod(); await exposureNotificationApiService.StartExposureNotificationAsync(); - await NavigationService.NavigateAsync(nameof(TutorialPage6)); + await NavigateNextPage(); loggerService.EndMethod(); } + + public async Task NavigateNextPage() + { + INavigationParameters navigatinParameters = + EventLogCooperationPage.BuildNavigationParams(EventLogCooperationPage.TransitionReason.Tutorial); + await NavigationService.NavigateAsync(nameof(EventLogCooperationPage), navigatinParameters); + } } } diff --git a/Covid19Radar/Covid19Radar/Views/Settings/EventLogSettingPage.xaml b/Covid19Radar/Covid19Radar/Views/Settings/EventLogSettingPage.xaml new file mode 100644 index 000000000..8219b2a06 --- /dev/null +++ b/Covid19Radar/Covid19Radar/Views/Settings/EventLogSettingPage.xaml @@ -0,0 +1,88 @@ + + + + +