COVID19Radarのソースを追ってみる-3日目(その2)
3日目(その1)はこちら
調査対象
- ソース(GitHub):https://github.com/Covid-19Radar/Covid19Radar
- リビジョン:5a54949ddf51dbf0db58c09d4142a31c7d663076
HelpMenuPage
[使い方]画面を表示。 [使い方],[陽性者との接触を確認する],[陽性情報の登録],[アプリを周りの人に知らせる]を選択すると次の画面へ移動
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpMenuPage.xaml
- 遷移先:HelpPage1,HelpPage2,HelpPage3,HelpPage4
- COCOAとの挙動差:なさそう
- 詳細:
- ListView=リスト表示
ItemsSource="{Binding MenuItems}"
=MenuItemsに設定されている内容を表示- MenuItemsの設定内容はCovid19Radar\Covid19Radar\ViewModels\HelpPage\HelpMenuPageViewModel.csで設定
- MenuItems.Add=表示する項目の設定
- PageName=選択されたときに遷移する次の画面
- Title=リストの表示される内容
HelpPage1
[接触の記録方法]画面を表示。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpPage1.xaml
- 遷移先:なし(遷移元に戻る)
- COCOAとの挙動差:なさそう
- 詳細: TutorialPage1と同じ読み方なので、割愛
HelpPage2
[接触の確認方法]画面を表示。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpPage2.xaml
- 遷移先:なし(遷移元に戻る)
- COCOAとの挙動差:なさそう
- 詳細: TutorialPage1と同じ読み方なので、割愛
HelpPage3
[感染していると判定されたら]画面を表示。 [陽性情報の登録と他者への匿名通知へ]ボタンを押すとOnClickNotifyOtherPage()を実施
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpPage3.xaml
- 遷移先:OnClickNotifyOtherPage()
- COCOAとの挙動差:なさそう
- 詳細: TutorialPage1と同じ読み方なので、割愛
OnClickNotifyOtherPage
SubmitConsentPage(陽性登録への同意)画面へ移動。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HelpPage\HelpPage3ViewModel.cs
- 遷移先:SubmitConsentPage
- COCOAとの挙動差:なさそう
- 詳細:
- NavigationService.NavigateAsync=ページ移動っぽい
- SubmitConsentPage=移動先のページっぽい
SubmitConsentPage
[陽性登録への同意]画面を表示。 [同意して陽性登録する]ボタンを押すとNotifyOtherPage(陽性情報の登録)画面へ移動
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HomePage\SubmitConsentPage.xaml
- 遷移先:NotifyOtherPage
- COCOAとの挙動差:なさそう
- 詳細: TutorialPage1と同じ読み方なので、割愛
NotifyOtherPage
[陽性情報の登録]画面を表示。 [登録する]]ボタンが押されたら、OnClickRegister()を実行
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HomePage\NotifyOtherPage.xaml
- 遷移先:HelpPage3,OnClickRegister()
- COCOAとの挙動差:なさそう
- 詳細:
- Label=ラベル
- Frame=フォーム。今回だと処理番号を入れるところ
Text="{Binding DiagnosisUid}"
=フォームに入れた内容をDiagnosisUidという名前のデータとして扱う- 残りはTutorialPage1と同じ読み方なので、割愛
OnClickRegister
処理番号を入力して、サーバーに登録?
登録結果を表示してHomePage(ホーム)画面に移動。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HomePage\NotifyOtherPageViewModel.cs
- 遷移先:AddDiagnosis(),HomePage
- COCOAとの挙動差:なさそう?微妙。ちょっと実際にデータ送ってるところがわからない。
- 詳細:
UserDialogs.Instance.Loading(Resources.AppResources.LoadingTextSubmittingDiagnosis)
=[診断を提出します]ロードダイアグを表示- 分岐系は以下参照
userData.AddDiagnosis(DiagnosisUid, new DateTimeOffset(DateTime.Now));
現在時刻(端末時刻?)で処理番号を登録。詳細は後述- NotifyOtherPageDialogSubmittedText=診断結果の提出
- NotifyOtherPageDialogExceptionText=後でもう一度試してください。
await NavigationService.NavigateAsync(nameof(MenuPage) + "/" + nameof(HomePage));
=HomePage(ホーム)画面へ移動
try { // やりたい処理を実行 } catch (Exception ex) { // tryの中で何か問題が発生した場合は、tryの処理を中断してこっちの処理を実行 }
AddDiagnosis
入力された処理番号に対して登録処理を行う。
保持するのは常に最新のものを1つだけ。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Model\UserDataModel.cs
- 遷移先:HomePage
- COCOAとの挙動差:なさそう?目に見えないところだから不明
詳細:
- String.IsNullOrEmpty()=なにも設定されてなければエラー扱い
- existing=同じ処理番号で登録済みかチェック。登録済みなら処理終了
- RemoveAll=全部消す。Add=追加する。
今日のまとめ
やっと登録のところまで進んだ。
けど、なんか実際に送ってるようには見えなかったので、なんか読み方足りてないかも。。。
実際にやってみるわけにも行かないし、これは詰んだかもなぁ。
やっているとしたら、xamarin特有の何かとして飛ばしてるawait Xamarin.ExposureNotifications.ExposureNotification.SubmitSelfDiagnosisAsync();
しかありえないから、もうちょっとXmarinのリファレンスなりで勉強しないとダメかね。
あとは、可能性としては実はここではデータを保持するだけで、実際の送信は別のタイミングで定期的にって感じ? 実際問題、接触した際の鍵交換自体も定期監視必要なはずだけど、見つけられてないので、意外とこっちのケースの可能性もありそう。