30代SEの自由帳

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

COVID19Radarのソースを追ってみる-4日目

3日目はこちら

引き続きCOCOA(接触確認アプリ)のベースとして使用されているOSS(オープンソースソフトウェア)である、COVID19Radarについて、処理を追って日本語のコメントを付けてみた。

ただ、C#の経験もFultter以外のAndroid開発の経験もなく、苦戦した挙句ざっくり理解で止めた1ので、参考程度で。

なので、同じようなことしている人がいれば即やめ。
ソースべた貼りには少し抵抗があるので、コメント付近だけ抜粋。

調査対象

HelpPage4

[記録の停止/削除]画面を表示。 [アプリの設定へ]ボタンを押すとOnClickSetting()を実行

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

OnClickSetting

[アプリの設定]画面へ移動。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HelpPage\HelpPage4ViewModel.cs
  • 遷移先:SettingsPage
  • COCOAとの挙動差:なさそう
  • 詳細: TutorialPage1と同じ読み方なので、割愛

SettingsPage

[アプリの設定]画面を表示。 選択された項目に応じて設定の変更や、データの削除等を行う。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\Settings\SettingsPage.xaml
  • 遷移先:LicenseAgreementPage,OnChangeResetData()
  • COCOAとの挙動差:なさそう
  • 詳細:

    • Switch=スイッチ
    • ```IsToggled="{xxx}"=設定をトグル(切り替えた)した時に、xxxってデータの内容を切り替え
    • UserData.IsExposureNotificationEnabled=[接触の検出]設定
    • UserData.IsNotificationEnabled=[通知]設定
    • <TapGestureRecognizer Command="{prism:NavigateTo 'LicenseAgreementPage'}" />=LicenseAgreementPage(ライセンス)画面へ移動。(ライセンスラベル)
    • Command="{Binding OnChangeResetData}"=OnChangeResetData()を実行。(使用中止ボタン)

LicenseAgreementPage

[ライセンス]画面を表示。

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

OnChangeResetData

[すべてのデータを削除する]か確認し、削除に同意した場合はユーザデータを削除する。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\Settings\SettingsPageViewModel.cs
  • 遷移先:なし(遷移元へ戻る))
  • COCOAとの挙動差:なさそう
  • 詳細:

  • await UserDialogs.Instance.ConfirmAsync(~~)=すべてのデータを削除するか確認するダイアログを表示

  • if (check){削除する場合}
  • ShowLoading=ロードダイアログを表示
  • if (await ExposureNotification.IsEnabledAsync()){~~~}=通信中だった場合は通信を中止する
  • UserDataModel userData = new UserDataModel();ユーザデータに初期値データを上書きする
  • HideLoading=ロードダイアグを消す
  • await UserDialogs.Instance.AlertAsync(Resources.AppResources.SettingsPageDialogResetCompletedText);=削除しましたダイアグを表示
  • Application.Current.Quit();=アプリを終了

OnClickExposures

陽性接触者数を確認し、1人以上いた場合はContactedNotifyPage(接触あり)画面へ、0人の場合はNotContactPage(接触なし)画面へ移動。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HomePage\HomePageViewModel.cs
  • 遷移先:ContactedNotifyPage,NotContactPage
  • COCOAとの挙動差:なさそう
  • 詳細:

  • var count = exposureNotificationService.GetExposureCount();=陽性接触者数の取得。ここでは既に取得されてる結果を見てるだけだったので、実際に通信して陽性接触者数を更新しているのは別のところっぽい。

  • 分岐は以下
  • NavigationService.NavigateAsync(xxx)=xxxへ移動
if (count > 0)
{
    // 陽性接触者が1人以上の場合、ここの処理を実行
    ~~~
    return;
}
// 陽性接触者がいない場合、ここの処理を実行
~~~
return;

NotContactPage

[接触なし用]]画面を表示。 [アプリを周りの人に知らせる]ボタンを押すとOnClickShareApp()を実行

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

OnClickShareApp

PopUpShare()を実行

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HomePage\NotContactPageViewModel.cs
  • 遷移先:PopUpShare()
  • COCOAとの挙動差:なさそう
  • 詳細:

  • AppUtils.PopUpShare();=PopUpShare()を実行

PopUpShare

iOSAndroidで処理がわかれてる。 ただ、やっていることはたぶんどっちもアプリのDL用URLを共有しようとしている。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Common\AppUtils.cs
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細:

  • Share.RequestAsync=共有ダイアグ?を表示

ContactedNotifyPage

[接触あり用]画面を表示。 [症状を入力]ボタンを押すとOnClickByForm()を、[帰国者・接触者センターに電話]ボタンを押すとOnClickByPhone()を実行する。 また、[陽性者との接触一覧]ボタンを押すとExposuresPage(過去14日間の接触一覧)画面へ移動

OnClickByForm

症状診断用のサイトを表示

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HomePage\ContactedNotifyPageViewModel.cs
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細:

  • await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);=uriで指定したサイトを表示

OnClickByPhone

保健所連絡先検索用のサイトを表示

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\HomePage\ContactedNotifyPageViewModel.cs
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細:

  • OnClickByPhoneと同じ読み方なので、割愛

ExposuresPage

[陽性者との接触一覧]画面を表示。

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\HomePage\NotContactPage.xaml
  • 遷移先:なし(遷移元に戻る)
  • COCOAとの挙動差:なさそう
  • 詳細:

  • xamlのみのため割愛

今日のまとめ

画面遷移自体は今回で全部見れたはず。

そして、実際に通信しているところは最初のユーザデータ登録箇所以外見つけられなかった。

まぁそんなことはないはずなので、絶対見逃してる。

少なくとも鍵同士の交換は定期的に監視しないと実現できないはずなので、次回以降はそこらへんを切り口に漏らしてそうな処理を探す。


  1. 開発環境でもインストールしてデバッグしながら、とかならもう少し理解できたんだと思うけど、開発環境入れるだけで力尽きそうだったので諦めた。。