2012年3月14日水曜日

ウィジェットホストの作り方

「ウィジェットを扱うアプリ」と言っても2通りの捉え方ができる。
1つは「自作ウィジェットを他人のアプリで表示する」という意味。
もう1つは「他人のウィジェットを自作アプリで表示する」という意味。
本記事では後者、つまりウィジェットホストの機能について記載する。
前者については多くの書籍やサイトで説明されているので、ここでは記載しない。

ssFlickerにウィジェットホストの機能を追加したのはもう半年ほど前のことだが、当時ネットで検索した限り、この機能について書かれたサイトは見当たらなかった。
何とか標準ホームのソースを追って機能は実装できたのだが、同じ悩みを抱える人もいるだろう。

作り始めた当初、ウィジェットホストの機能が実現できる自信はまったくなかった。
ウィジェットホストで必要な処理を想像して、一覧を表示して設定画面を開いてアプリの情報などを色々と保存して…と色々考えていた。
が、終わってみればそこまで難しい物でもない。想像していた処理の半分位をシステム側(Android OS)が行っている為である。

毎度の事だがリファレンスを読み解いた訳ではなく、どちらかと言えば結果論(やってみたら動いた)になっているので、あくまで参考程度にして欲しい。

2012年3月1日木曜日

ssFlickerに共有アプリが登録できるようになりました

いつもの通り、先日行ったv0.8.0でのバージョンアップ内容について。

 V0.8.0                                    

□ポインタに登録できるアプリに共有アプリを追加
・これまでポインタに登録できるアプリは通常のアプリ、ホームアプリ、ショートカット、ウィジェット、ファンクションの5種類だった。これに共有アプリを追加。
・Androidでは今起動しているアプリの一部情報を、他のアプリを通じて共有する機能がある。
例えば、ブラウザから共有を呼出すと共有機能を有したアプリ(TwitterやGmailなど)の一覧が表示され、選択したアプリを通じてURLを共有(Twitterであればつぶやき、Gmailであればメール送信)することができる。
使い方によってはかなり便利な機能なんだけど、実は自分もあまり使っていない。
・前からssFlickerでもうまいこと共有アプリを扱いたいと思っていたんだけど、結果的に「ポインタに登録できる一アプリ」として扱えるようにした。
また、アプリの編集画面からテンプレートも設定可能。テンプレートを設定しておけば「起きた」ツイートや「帰る」メールなどを多用する人には便利だと思う。
テンプレートを使わなかったとしても、ツイート画面やメール送信画面を直接開く事ができるので、ぜひ1度使ってみて欲しい。

□アプリ選択画面をリスト表示からグリッド表示に変更
・単純に見やすさを重視した。
アプリインストール数が多い人はリスト表示だとページめくりが大変だと思い、グリッド表示に変更。

□ファンクションやステータスバーなどのアイコンを変更
・ファンクションのアイコンはかなり初期から作りたかったんだけど、このタイミングで作成。
合わせてステータスバーアイコンも変更。ICS標準に合わせる形に変更した。
他にもホームポインタのアイコンも四角から家っぽく変更。
細かい所だと、通常のポインタのデフォルトアイコンを矢印付きの○からただの○に変更した。
・これで長らく課題になっていたアイコンの作成は一通り完了。あとはアプリアイコンを変更するかちょっと悩んでいるけど、今よりも良いデザインも思いつかないのでこのままにしておく。

2012年2月9日木曜日

音量、バイブ、マナーモードの設定方法

ssFlickerにはファンクションに「マナーモード」と「音量」がある。
元々標準設定アプリと挙動に差異がある事は分かっていたんだけど、改めてICSをいじっていたら、想像以上に差異があったので仕様から見直してみた。
そしたら、これまた想像以上にハマってしまったのでまとめてみる。

(2012/6/20追記)
Android4.0.4を含めた記事を書きました。
検証の結果はコチラを参照してください。


2012年2月5日日曜日

ssFlickerの音量ファンクションを変更

最近のssFlickerのバージョンアップ内容。
v0.7.10の音量ファンクションはハマりました…。

■v0.7.9

□スワイプ距離の選択肢の変更
・ロング(48px)、ショート(24px)の区分をなくしてスワイプ(48px)に統一。
48pxと24pxでは操作している上でほとんど差がなかったので。

□枠厚の選択肢の変更
・前の選択肢がなんだったか忘れてしまった。
綺麗に0〜6pxまで2px単位で設定できるように変更。

□ポインタサイズの選択肢の変更
・以前苦労してたマルチディスプレイ対応の残り。
いまだにサイズが合わない機種があるらしく、設定を7段階に変更。

□透明度の選択肢の変更
・透明度に「透明」を追加。
元々、透明度に「透明」は入れてなかったんだけど、深い意味もなかったので。


■v0.7.10
□ファンクションのマナーモードと音量の仕様を変更
・マナーモードはこれまで、「通常」→「サイレントモード」→「バイブモード」で切替えていたんだけど、単純なマナーモードのON/OFFに変更した。
標準設定アプリのマナー設定をON/OFFするのと同じ意味になる。
・音量も大きく変更。
標準設定アプリと同じような設定が出来るようにした。
また、音量からマナーモードも設定変更できるようにした。
なお、「通知音にも着信音量を適用」の設定は変更できない。

□設定画面でオーバーレイポイントがおかしい不具合の修正
・詳細を忘れてしまったのだけど、設定画面でオーバーレイ設定を行っても正しく設定が反映されていないことがあったので修正。

□読み込み中ダイアログをキャンセルした時にエラーとなる不具合の修正
・ポインタへのアプリ追加時などに「読み込み中」ダイアログが表示されるが、それをキャンセルした後に他の操作を行っていると、ssFlickerがエラー終了してしまう事があった。
かなり初期から分かっていた不具合で、今回対処方法が分かったので対応してみた。
本当に直っているかは少し自信がない。

2012年1月15日日曜日

ssFlickerのバージョンアップ内容

年が明けてから2回ほどssFlickerのバージョンアップを行ったので、内容を記載しておく。

■v0.7.7
□スワイプ起動の名称をオーバーレイ起動に変更
・文字通りの内容。あまり深い意味はないのだが、「スワイプ起動」のネーミングがあまり好きじゃなかったので。

■v0.7.8
□一部機種でウィジェットの表示位置がおかしい不具合の修正
・気付いたらGNでウィジェットの表示位置が正しく設定されていなかった。場所を変更しても中途半端な位置に表示されていた。初代XPERIAでは問題なかったんだけど。
・結局何をどう直したのか忘れてしまったのだが、とりあえず修正。

□一部機種でオーバーレイ起動のアイコンが表示されない不具合の修正
・v0.7.6で修正したつもりだったものの、オーバーレイ起動時にssFlickerのアイコンを表示する所の修正が漏れていたので修正。

□フォアグラウンド起動時にステータスバーにアイコンを表示しないように変更
・元々アイコンを表示したくなかったのだが、消し方が分からなかった。
・単にstartForegraund(int, Nortification)のNortificationの中身に何も設定しなければアイコンが表示されなくなる。
・ステータスバーにアイコンを表示したければ、ステータスバー起動をONにすればOK。

□一部のアイコンをICS版に変更
・アイコンと言ってもポインタに利用するアイコンではなく、編集モードの時に表示している矢印などのアイコン。こういったアイコンは、システム側から動的に取得して表示しているものと、システム側で持っている物をssFlicker内に用意して表示しているものがある。その内、後者の分をICS版に変更した。

□編集を繰返すと画像が劣化する不具合の対応
・画像をDrawableとBitmapの形で使っているのだけど、BitmapからDrawableに変換する時に画像の劣化が発生していたので修正。
・以下のようにすれば劣化が発生しなくなる。
BitmapDrawable(bitmap) → BitmapDrawable(resources, bitmap)

□ウィンドウ背景の枠幅と角を設定可能に
・v0.7.1で背景透明度枠や枠の色を設定可能にした時にやろうかと思って見送っていた。今回実装。

□全てのアプリアイコンとアプリ名をDBに保存するよう変更
・見た目にもプログラム的にも大きな変更はないんだけど、結構影響が大きいかも知れない。
前からいつか修正しようと思っていたんだけど、このタイミングで修正してみた。
・これまで、ssFlickerにアプリを追加した際、アプリ名とアプリアイコン画像は保存していなかった。そのため、アプリを表示する都度、システムから取得する動きになっていた。
(ショートカットだけは保存していた。また、アプリ編集から設定をすると保存するようになっていた)
今回、アプリを追加した際にDB保存するよう修正。
・この修正で、おそらくアプリの表示が速くなっていると思う。一方、アプリ容量は増えると思う。

2012年1月2日月曜日

オーバーレイ表示の方法

ディスプレイ上にViewをオーバーレイ表示する方法。
ssFlickerでもオーバーレイ起動(旧スワイプ起動)で利用しており、これが使えるようになるとアプリの表現の幅が広がると思う。
ただし、使い方を誤るとオーバーレイ画面がディスプレイを占有してしまい、何も操作できなくなってしまうので注意。

2011年12月30日金曜日

物理キーのフック方法

物理キーのフックと言っても、もちろん自アプリが起動している時のみ制御可能。

以下のソースはバックキーを制御する場合のコード。
他にも検索キーやメニューキー、数字やアルファベットなどの物理キーボードもフック可能。
ただ、ホームキーだけは制御できない。
 
@Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
    //やりたいことを書く
  }
  return false;
}