android: アーキテクチャに沿ったサンプルアプリの修正
2024/11/13
前回、Central から書き込まれた文字列を SB1602B に表示させる Peripheral を実装した。
Central として nRF Connect for Mobile を使っていたが、せっかくなので Android アプリも作りたい。
10月にあれだけやったのだから多少大丈夫だろうと思ったが、かなり・・・すっかり記憶から抜けている。
歳は取りたくないものだ。
既存アプリの改造
以前作った AGP 8.6.1(Android Studio koala)用のテンプレート を使って一から作るか、LBS service 向けに作った BLE LED Control を改造するかで考えたが、後者にした。
今回も BLE 操作する内容はサンプルアプリと変わらないし十分だろう。
そう思ったのだが、まずプロジェクト名の変更が面倒だった。
Gemini さんに聞いたりネットで見たりでなんとかなったと思うが、Shift+F6 で一発変更、というやり方ができないので何度もやり直しになった。
BLE Central サンプルアプリ用のテンプレートがほしくなった。
その後は、アプリアーキテクチャに沿って作った(つもり)のでそれぞれ修正していった。
Service が変わるので Data sources も変わるし、操作が違うので Repository も変わるし、
そしたら ViewModel も変わるし、もちろん View も変わる。
サンプルアプリ程度だとアーキテクチャに沿うと返って面倒になることが分かった。
まあ、メンテナンスがよくなるというのが利点だし、サンプルアプリみたいに中身をとっかえひっかえするのとは目的が違うので仕方が無い。
サンプルアプリテンプレートの構想
いつやるかわからないが構想だけ立てておこう。
書いておかないと忘れるのだよ。
そして書いたことも忘れるのだ。
- プロジェクト名を変更するところは architecture-templates/base をまねしたい
- が、後からまねをするのは難しいのでこれをベースに作るのが良いか。
- 画面は 2つ。
- Advertising をスキャンする画面
- Bluetoothの許可
- スキャンした機器をリストに出してタップすると接続し、接続後との画面に遷移
- ペアリングした機器があるなら自動で接続して画面遷移するなど
- 接続後の画面
- こちらは Service や Characteristic によってやることが違うので、特に決めない。
- Advertising をスキャンする画面
- ViewModel, Repository, Data source みたいな区分けは作らない
- あえて言うなら View か ViewModel に全部実装する感じか。どっちがよいだろう?
- 画面遷移しても同じ ViewModel を使えば画面間のデータのやりとりができるからよいのかな
- “ViewModel” と書いているけど、インスタンスを共有すればなんでもいいね
一番のネックはプロジェクト名の変更だろうか。
ここまで面倒だと、もうプロジェクト名は自分でやりたければやってもらって、Android Studio でできるリファクタリングも自分でやればいいやん、という気持ちになってくる。
Application
や Activity
の名前も固定で良いし。
いや、これも勉強の一つだよ。
意味が無いならやらないけど、改造できるテンプレートを 1つ持っておくとよさそうな気がするのだ。