Google Glassでポモドーロテクニック (2/3)

こんにちは、ATLでウェアラブルデバイスの研究をしている吉村です。前回に引き続いて、今度はタイマーをAndroidでプロトタイピングします。

アーキテクチャ

ポモドーロタイマーということで、ユーザがActivityから離れている時にもずっと時間を追跡しつづけ、音を出しつづけることになります。

ここではセオリー通りにメイン画面はActivity+カスタムView、タイミング追跡・発音はServiceで、と分解することにします。

メイン画面の作成

Activityにビュー寄りのロジックが集中することを避けるために、カスタムビューを別途作成しましょう。

タイマービューの作成

TimerViewとして作成して行きます。

まずレイアウトですが中心寄りに、TextViewを使ってシンプルに組みます。fontFamilyプロパティを使用して、Robotoを明示的に指定していることに注意してください。

res/layout/view_timer.xml:

最低限のロジックを書いておきます。

src/main/java/com/gmail/altakey/myapplication/TimerView.java:

src/main/java/com/gmail/altakey/myapplication/TimerReader.java:

これをプレビューすると、以下のようになるはずです。

image-1

Activityの作成

ここまでできたら、今度はこれをActivityに組み込みます。レイアウトはただはめ込むだけです。

res/layout/activity_my.xml:

すると、最終的にこんな形でレンダリングされます。簡単ですね。

image-2

次にロジックを書いて行きます。ここでやることは 1) 起動と同時にサービスを起動し、2) タップされた時にメニューを表示、3) Resetでタイマーをリセットし、4) Exitで終了する、の4点です。

#1: サービス制御

Activityが起動されると通常通りonCreateが呼ばれるので、ここでサービスを起動します。サービスからはLocalBroadcastReceiverを使用してタイマー表示更新リクエストを受けとります。

src/main/java/com/gmail/altakey/myapplication/MainActivity.java:

#2: メニュー表示

タップされた場合にメニューを表示します。今のところこれはいわゆる普通のOptions Menuで良いです。GlassのMenuと比べると見かけ的には随分と違いますが、ここで作り込んでもしかたがない(理由は次回分かります!)のでひとまず目を瞑りましょう。

#3: タイマーリセット

Options MenuでResetが叩かれた場合の処理です。サービスをリセットします。

#4: 終了

Options MenuでExitが叩かれた場合の処理です。サービスを止めアプリを終了します。

ここまで来ればあとはタイマーの処理を担っているサービスだけです。もう一息ですね。

タイマーサービスの作成

変哲もなく、普通に書きます。以下のような形に。

src/main/java/com/gmail/altakey/myapplication/TimerService.java:

あとは、AndroidManifest.xmlでの宣言も忘れずに行なっておきましょう。

リソースの追加

res/rawに2つのOgg Vorbisファイルを追加します。

ring.ogg : クリック音

tick.ogg : ベル音

プロトタイプ完成!

ビルドして実行してみましょう。起動と同時にカウントダウンが始まりましたか?また、タップするとメニューが出現してResetで25分に戻り、Exitでカウントダウンも止まりましたか?

また、Eclipseで開発したことがある方はもう既に気づいているかもしれませんが、Android Studioではエラーなどを事前に下線などで知ることができながら、残っていてもとりあえずビルド・実行をトライさせることができます。

では、次回はこれをいよいよGlass実機へポートしてみましょう。