はじめに
前回の記事では
Light Time Switcher の 開発の歴史とGoogole Play 登録についての出来事を紹介しました。
今回は、アプリの設計について紹介します。
Light Time Switcher は、機能としては非常にシンプルですが、
設計の過程で「責務の分離」「通知処理の整理」「設定値の永続化」など、意外と多くのポイントがありました。
本記事では、構成図を交えながら、設計の変遷を示します。
「なぜこのクラスを分けたのか」「どこまでAndroid Frameworkに依存させるか」などの理由を残すことで、今後の改善や再利用の土台になればと思います。
初期構成: MainActivity単体による処理集中
初期は、アプリアイコンをクリックしたら、決った秒数に設定を変更するだけの機能だったため、MainActivity単体による処理になっている。
通知機能の追加
通知機能を追加するにあたり、当初は MainActivity に直接実装する方針だったが、以下の理由から通知機能を独立させ、MainActivity から利用する構成とした。
-
MainActivityは点灯時間の制御を担っており、通知機能を加えると責務が過剰になる - 通知はUIやユーザーへのフィードバックに関わるため、制御ロジックとは関心が異なる
- 今後の拡張(通知種別の追加、通知タイミングの柔軟化)を見据えると、独立した構成の方が保守性が高い
この変更により、通知機能は NotificationManager クラスとして切り出し、MainActivity からは明示的に呼び出す形とした。
MainActivityに通知機能を追加
MainActivityから通知機能を分離
通知機能の説明
通知処理シーケンス
設定したScreen timeout時間を通知する処理
点灯時間の設定機能を追加
最新
- 点灯時間切り替えのスケジュール機能を追加
- スケジュール設定されたら AlarmSchedulerが スケジュール設定
- スケジュールされた時間の処理は、TimeoutRececiverが実行
- 下記を実現するため起動時の処理を追加
- スケジュール処理のアラームの再設定
- SharedPreferenceで記録している設定の再設定
- SharedPreference には、スケジュールが有効かどうかと、スケジュールの時間, 点灯時間と分けて設定を実施
※以下の構成図は、全体像を俯瞰するためのものと、Android Frameworkとの接点を明示するものを使い分けています。
設計判断の背景についての説明は、後者の図を参照しています。