30代SEの自由帳

最初のタイトルは頓挫した

COVID19Radarのソースを追ってみる-3日目(その2)

3日目(その1)はこちら

調査対象

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で設定
      1. MenuItems.Add=表示する項目の設定
      2. PageName=選択されたときに遷移する次の画面
      3. Title=リストの表示される内容

HelpPage1

[接触の記録方法]画面を表示。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpPage1.xaml
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細: TutorialPage1と同じ読み方なので、割愛

HelpPage2

[接触の確認方法]画面を表示。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HelpPage\HelpPage2.xaml
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細: TutorialPage1と同じ読み方なので、割愛

HelpPage3

[感染していると判定されたら]画面を表示。 [陽性情報の登録と他者への匿名通知へ]ボタンを押すとOnClickNotifyOtherPage()を実施

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のリファレンスなりで勉強しないとダメかね。

あとは、可能性としては実はここではデータを保持するだけで、実際の送信は別のタイミングで定期的にって感じ? 実際問題、接触した際の鍵交換自体も定期監視必要なはずだけど、見つけられてないので、意外とこっちのケースの可能性もありそう。