Skip to content

アプリ更新をバックグラウンドで継続できるようにする - #66

Merged
Atsumi3 merged 1 commit into
mainfrom
feature/update-background
Aug 24, 2026
Merged

アプリ更新をバックグラウンドで継続できるようにする#66
Atsumi3 merged 1 commit into
mainfrom
feature/update-background

Conversation

@Atsumi3

@Atsumi3 Atsumi3 commented Aug 24, 2026

Copy link
Copy Markdown
Member

背景

設定画面でアプリ更新を開始したあと、別の画面へ移動するとステータスがリセットされていた。

更新の状態と処理が SettingsViewModel の viewModelScope に閉じていたため、画面を離れて ViewModel が破棄されると、ダウンロードのコルーチンごと打ち切られ進捗も失われていた。

変更内容

  • update/AppUpdateManager.kt を新規追加し、更新状態(UpdateStatus / UpdateFailure)と、チェック・ダウンロード・インストールの処理をここへ移した
  • AppUpdateManager は Singleton で、既存の AppScopeModule が提供するアプリケーションスコープのコルーチンで処理を実行する。画面を離れてもダウンロードが継続し、戻ったときに進行中の進捗をそのまま表示できる
  • SettingsViewModel は AppUpdateManager の StateFlow を購読して UI 状態へ反映するだけにし、操作は委譲するようにした。初期値にも Manager の現在値を使うため、再生成直後から進行中の状態が見える
  • ApkInstallResultBus の購読も Manager 側へ移し、インストール結果の反映が画面の生存に依存しないようにした
  • 進行中の判定はジョブの生存だけでなく状態も見ている。apkInstaller.install() から戻ったあともブロードキャスト待ちが残るため、その窓で checkForUpdate が状態を上書きしないようにするため

テスト

  • update/AppUpdateManagerTest.kt を新規追加(18 件)。初期状態、チェック成功・失敗、ダウンロード進捗の公開、ダウンロード失敗、インストール失敗、権限不足、進行中の多重操作の無視、インストール結果バスの反映と再配信されないことまで検証している
  • SettingsViewModelTest に、ViewModel を作り直しても状態が保持されることと、ダウンロード進行中に ViewModel を作り直しても進捗が引き継がれ、そのまま完了してインストールへ進むことを検証するテストを追加した

既知の制限

プロセスが OS に停止された場合のダウンロード継続には対応していない。アプリケーションスコープのため、プロセスが生きている間はバックグラウンドでも継続するが、プロセス死をまたぐには Foreground Service 化が必要になる。


Generated by Claude Code

設定画面から離れると ViewModel が破棄され、viewModelScope ごと
ダウンロードが打ち切られて進捗表示もリセットされていた。

更新状態と処理を Singleton の AppUpdateManager に移し、
アプリケーションスコープのコルーチンで実行するようにした。
画面を離れてもダウンロードが継続し、戻ったときに進行中の
進捗をそのまま表示できる。
github-actions Bot added a commit that referenced this pull request Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

UI差分

基準画像との差分はありません。

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

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 9940a79 into main Aug 24, 2026
2 checks passed
@Atsumi3
Atsumi3 deleted the feature/update-background branch August 24, 2026 18:55
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