Acivitiyで実装するか、Fragmentで実装するか悩み、いままで簡潔なActivityを選んでいたけれど、「画面下部ナビボタンで、画面遷移せずに機能を切り替える。」場合など、Fragment上に設計するほうが、使い勝手が良くなりそう。
Acitivity,Contextのライフサイクルも簡潔になる。
ボタンは「16Pads」「Songs」「Setup」とする。「Keys」(バーチャル鍵盤)と「Timer」(メトロノーム)もほしいが、空きがなさそうだ。
「16Pads」(ホーム画面)大きく変更はなく、シーンを、プルダウンで変更できるようにする。プルダウンの最後に「その他」を追加し、最近つかったもの以外はそちらで表示させる。「その他」にはエクスポートインポート機能がある。プルダウンには5項目+その他を表示しておけばいいだろう。
「Songs」(シーケンス一覧画面とピアノロール画面)シーケンス一覧、自分で記録した20曲と、サンプル曲をつける。一時的に再生せず、一回20曲のうちに、ロードすることを推奨したい。「PLAY」「MUSICBOX」「REC」Tool類(Export、Import、ImportSysex)の6つのボタン。技術的には、RECの時だけ、ファイル書き込みをし、インポートなどではプレーンデータのコピーをする。画面遷移で保存しなおしたりはしないようにしたい。(今やってて痛いめにあったので)
「Setup」設定項目すべての一覧(デバイス一覧、それ以外の設定の一覧)
メトロノームを鳴らすデバイスを、出力デバイスから選択できるように変更したほうが、ユーザー体験が向上するだろう。出力リスト、入力リスト、MIDITHRUスイッチ、メトロノーム出力先の順番。メトロノーム出力先はメトロノーム画面からも変更可能にするのが良いだろう。
設定については、Serialize可能で、Intentにセットできる、SetupValueGroupクラスを実装して継承したものに保存する。TheValue<T>をリストにして所持して、Value単位でも、Group単位でも変化したら通知するリスナーを登録でできると良いだろう。
「Keys」、普通に、縦画面でも、横画面でも、横に広がるキーボードを表示。外部キーをつなげ、上段と下段で、レイヤーやスプリットをするインターフェイスもゆっくり実装してはみたいと考えている。(おそらく出力CHと、入力キーレンジ、プログラム、バンク、ADSR、フィルタ、ポルタメント、かなり後回しなので、そこまで手がまわらない可能性が大きいと思っている。)
コード上は、App.v3パッケージに実装していく予定。広告は、もはや、[16Pads」「Songs」「Setup」のとなりに、「RestTime」というボタンを設置して、広告をフル画面で「楽しめる」でもいいかもしれない。さすがに、項目が6つあるメニューはみたことがないので、Setupを右上にしたり、Metronomeをあきらめるなどの工夫がいりそうだ。
「16Pads」「Songs」「Refresh」「Keys」となるだろう。そして「Setup」は上部メニューにする可能性がつよくある。