Skip to content

設定画面に Danger Zone を追加してパスワード保護する - #62

Merged
Atsumi3 merged 2 commits into
mainfrom
feature/settings-danger-zone
Aug 24, 2026
Merged

設定画面に Danger Zone を追加してパスワード保護する#62
Atsumi3 merged 2 commits into
mainfrom
feature/settings-danger-zone

Conversation

@Atsumi3

@Atsumi3 Atsumi3 commented Aug 24, 2026

Copy link
Copy Markdown
Member

概要

設定画面の危険な操作を Danger Zone としてまとめ、サーバー側で設定したパスワードを入力しないと操作できないようにしました。

変更内容

  • 常に表示する情報(現在の接続先、モード、アプリのバージョン)と、パスワード解錠が必要な操作を分離
  • 解錠の後ろに置いた操作
    • QR スキャンによるサーバーアドレスの読み込み
    • モードの切り替え
    • アプリの更新(更新確認・ダウンロード・インストール)
  • サーバーの danger-zone status / verify API を呼ぶ DangerZoneService と DangerZoneRepository を追加
  • api.yaml に DangerZone タグと 2 エンドポイントを追加
  • demo flavor は常に未設定を返す DemoDangerZoneService を用意

ロックアウトの防止

端末が操作不能になることを避けるため、次の場合は解錠済みとして扱います。

  • サーバーにパスワードが設定されていない場合
  • 起動時の status 取得がサーバー未到達などで失敗した場合(接続先が誤っていると status が取れず、閉じてしまうとアドレスを直せなくなるため)

一方、明示的に解錠を試みた際の通信失敗はエラーとして表示し、解錠は行いません。

テスト

  • SettingsViewModelTest に Danger Zone のテストを 9 件追加(未設定、設定済み、status 失敗、正しいパスワード、誤ったパスワード、verify 失敗、サーバー側でクリア済み、空入力、再ロック)
  • SettingsScreenTest に Compose テストを 3 件追加(ロック時に危険操作が出ないこと、解錠で表示されること、誤入力でサーバーのメッセージが出ること)
  • ScreenshotTest にロック状態のスクリーンショットを追加

Generated by Claude Code

接続先の変更・モードの切り替え・アプリの更新をサーバー設定のパスワードで保護する。
サーバーにパスワードが未設定の場合と、サーバーへ到達できない場合は解錠済みとして扱い、
端末が操作不能になることを防ぐ。
Danger Zone セクション追加により縦方向に伸びた結果、モード切替ボタンと
解錠ボタンが Robolectric のビューポート外に出て失敗していた。
github-actions Bot added a commit that referenced this pull request Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

UI差分

settings_screen

settings_screen

settings_screen_danger_zone_locked

settings_screen_danger_zone_locked

settings_screen_install_not_permitted

settings_screen_install_not_permitted

settings_screen_up_to_date

settings_screen_up_to_date

settings_screen_update_available

settings_screen_update_available

settings_screen_update_check_failed

settings_screen_update_check_failed

全画面スクリーンショット

main_screen

main_screen

main_screen_account_result

main_screen_account_result

main_screen_calculator

main_screen_calculator

main_screen_calculator_shortage

main_screen_calculator_shortage

main_screen_drawer

main_screen_drawer

main_screen_empty

main_screen_empty

main_screen_error

main_screen_error

main_screen_item_selection

main_screen_item_selection

main_screen_item_selection_failed

main_screen_item_selection_failed

main_screen_item_selection_loading

main_screen_item_selection_loading

main_screen_store_selection

main_screen_store_selection

main_screen_store_selection_failed

main_screen_store_selection_failed

main_screen_store_selection_loading

main_screen_store_selection_loading

settings_screen

settings_screen

settings_screen_danger_zone_locked

settings_screen_danger_zone_locked

settings_screen_install_not_permitted

settings_screen_install_not_permitted

settings_screen_up_to_date

settings_screen_up_to_date

settings_screen_update_available

settings_screen_update_available

settings_screen_update_check_failed

settings_screen_update_check_failed

@Atsumi3
Atsumi3 merged commit d5fffe9 into main Aug 24, 2026
2 checks passed
@Atsumi3
Atsumi3 deleted the feature/settings-danger-zone branch August 24, 2026 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant