| [$1E] | Android (7) Androidマシンを手に入れました
 | 2012.02.11 2012.03.31
 
 | 
■2012.02.11
・やっとAndroid実機を手に入れました。
 「ASUS TF201-PR32D」NVIDIA Tegra 3 のタブレットです。
・ざっくりテスト結果:
 ・PC-8001 (OLION80)
  問題なく動作する
  ワープシーンなどの残像による混色も再現できています。
 ・PC-8001 (PiOPiO)
  問題なく動作する
  サウンドもノーマル/PCG版ともキッチリ鳴っています。
 ・PC-8001 (The Dusty World)
  オープニングデモがほんの少し厳しい?
 ・PC-8001mkIISR (ゼビウス)
  実行速度不足 (音飛びあり@バッファ100msec)
  あと一歩?
 ・80系 + SubSystem
  実行速度不足
 ・88系 + SubSystem
  実行速度不足
  8MHz動作は無理ぽ。。。
・80のテープモノならほぼ問題なく動くようで、ちょっと安心しました。
・80SRのゼビウスは30FPSにしても少し重いようです。描画まわりを今後詰めてみます。(OPNも重い?)
 目標は「ゼビウスで処理遅れなし」としましょうか?
・SubCPUを一緒に動かすのは重すぎるようです。
 再現性に影響を与えない範囲で対応するのは難しそうですね。
 Java版では廃止したSubCPUのクロック指定などを復活させようか検討中です。
・UIのバランスも悪いのでこれから調整が必要です。
■2012.03.31
- 2012.03.11~18 あたりの状況 (3月中旬までは Java版をいじってました)
	
 今回は全般的に後ろ向きです。
 動画をアップしようとしたのですが、メンドクサクなったので止めました。
 いらぬモノが映り込んだり、まわりの音が煩かったりでなかなか思うようにいかないものですね。。。
 編集すれば。。。と思っていたのですが、挫けました。
 改めてP6の人たちはすごいなと実感しました。
- TF201(3.2.1) 実機のキャプチャ画像です
	
- これまでの作業内容:
	
		- 画面のストレッチ表示 on/off 機能を追加した
		
- メニューを作り込んだ (無駄になるかも)
		
- ファイル選択画面を(少し)リッチにした (無駄になるかも)
		
- ターゲットを android-13(Android 3.2) に変更しようとして挫けた
		
 11から KeyboardView の横サイズを指定できるようになります。
 丸め誤差でレイアウトがガタガタにならないようなサイズに固定できて気持ち良いのですが、
 メニューが表示されません。(こんなに変わっているとは。。。)
 なぜ新UIに対応したアプリが増えないのか解かりました。
- ターゲットを android-4(Android 1.6) に変更しようとして挫けた
		
 target=android-4, android:minSdkVersion="1" → "4"
 この API Level から、KeyboardViewがキー単位で再描画できる様になっています。
 が、キーボード非表示で開始すると FrameLayout のプライオリティがおかしくなるなぁ。。。
 以前はごく稀にしか起きなかったのに。。。
 あれ。元に戻してもおなしいぞ。。。
 キーボードoff → ストレッチ変更 → キーボードon でもおかしくなるな。
 ストレッチ機能を追加したあたりでおかしくなったかな?
 UI側で簡単に on/off できるようにして、常に on で開始するようにしないと駄目かな?
 メニューまわりを変えたら遷移も変わりそうなので放置しよう。そうしよう。
 
- 今後の予定
	
 ターゲットを android-11(Android 3.0) か android-13(Android 3.2) に変更する
	- メニュー(ActionBar)まわりの調査, 再設計
	
 ファイル選択画面も今の構成だと使いにくそうなのが心配 (その場合は思い切って作り直す)
 コレだけでアプリ一本分だな。。。
- リソース類の作り直し
	
- KeyboardView は「文字」入力用でエミュレータには向かない仕様なので作り直す方向で検討する
	
 コレだけでアプリ一本分だな。。。
 
- Android版の公開について
	
 いろいろ悪さをする困った人がいるので、一般公開には消極的になっています。
 Java版も次のバージョンからどうしようか迷っています。
 ライフワークのつもりなので開発は続けるつもりですが。。。
 メールのやり取りがある範囲での公開にするかもしれません。
 ま、こんな気分になる日もあるよね?
 
 
 
 
- 2012.03.18~25 あたりの状況
	
 21日に 4.0へのバージョンアップが予告されていたのですが、見送る予定でした。
 はじめてのアクションバーを新しい環境でテストしたくなかったので。。。
 ところが、3.2.1上で動かしてみるとイロイロ怪しい挙動が!!!ってことで、テスト環境を 4.0 に移行しちゃいました。
- TF201(4.0.3) 実機のキャプチャ画像です
	
- これまでの作業内容:
	
		- ターゲットを android-11(Android 3.0) に変更した
		
 アクションバーを消したくないのでフルスクリーン設定はあきらめた
- メニューをアクションバーに移した (暫定)
		
 せっかく作ったメニューアイコンが没になって悲しい。
 3.2.1 ではフォーカス遷移が旧メニューと違うので困ったことになる。
 4.0.3 ではフォーカス遷移が旧メニューと違うが(最終的に同様の遷移となるので)問題にならない。
 3.2.1用にパッチを当てると 4.0.3 で困ったことのなるので却下した。
 最終的には全サブメニューをダイアログに移行するか、ターゲットを 4.0 以上とする。
 あ。サブメニューを表示したまま回転したときだけ pause が解除されちゃうな。(表示は維持@4.0.3)
 以前の環境だと、回転時にサブメニューは消えちゃった気がする。
- 物理キーボードのナビゲーション系キー(Enter,カーソル等)を押したとき、
		
 ホームアイコン(ボタンとして機能する)等にフォーカスが当たってしまう問題を解決した。
- メニューを(さらに)作りこんだ / メニュー数の絞込みや並び順のこだわりを捨てた
		
- 一部機能をアクションバー上に置いてみた
		
 ・ホームボタン → リセット(メニュー,ファイル選択画面では「Home」)
 ・PAUSE / RESUME ボタン
 ・仮想キー ON/OFF ボタン (横画面時のみ)
- テスト環境を 4.0.3 にした
		
- 物理キーボードでの問題点が整理できた (FSKAREN 選択時のみおかしくなる)
		
 入力フィールドが無い場合は殺す設定が無いものか?
- FrameLayout のプライオリティがおかしくならないようにパッチを当てた
		
- リリース漏れを防ぐパッチを当てて、KeyboardView でもとりあえず使えるレベルにでっち上げた
		
 ついでに、CTRL,GRPH もロックできるようにした。(SHIFT,CTRL,GRPH は通常キーとロックキーの併用が可能)
- マルチタッチ対応の仮想キーボードをフルスクラッチするのは避けたいので KeyboardView の調査を始めた
		
 → なんとかなるかもしれない。
 
 
 
 
- 2012.03.25~31 あたりの状況
	
 仮想キーボードまわりの調査と再実装の結果、それなりに使い物になるレベルになりました。
 Android の KeybooardView と決別できる実装レベルになりましたが、(なんとなく)互換性は維持しています。
 ここをプラットフォーム非依存にする価値もあるかなぁと思い始めていますので、そのうち。
 「タッチパネル機能」も同じロジックを適用したいケド、マップ定義が。。。
 物理キーボードのトラブルは、特定の入力システム使用時の問題ということで内容を公開しておきます。
 Winモバイル版の FSKAREN でも「勝手にキーリピートする」ようなので仕様なのでしょうが、onKeyUp() は要らないでしょ?
 「FANFUN」は今マーケットに置いても十分通用するなぁと思った。
- TF201(4.0.3) 実機のキャプチャ画像です / 懐かしのデフォルトスキンと最新版
	
- これまでの作業内容:
	
		- マルチタッチに対応した
		
 リリース漏れを防ぐパッチを削除した。
- キートップに[SHIFT]を押したときの文字を表示した
		
 xmlで若干の調整が可能。
- キーの検索ロジックを独自のものに変更した
		
 スペースの端っこを押したとき反応しなかったり、レイアウトによって拾えないキーがあったりしたので。
- キーのヒットエリアを変更した
		
 端(周囲)のキーは余白もヒットエリアに含めていたので見た目に揃えた。
 ロジック簡素化により(ほんの少し)軽くなった?
- ゲーム用のキーレイアウトをいくつか作ってみた
		
- 「ディップスイッチ」のリストを「システム」メニュー から分離した
		
- 仮想キーボードのリストを「キーボード」メニュー から分離した
		
- 仮想キーボードのリストを「標準キーボード」と「特殊キーボード」で分けた
		
- 仮想キーボードの設定,状態を「縦画面 / 横画面」毎に「標準 / 特殊」を分けて管理することにした
	
 
- その他
	
		- 「ストレッチ」時の最大倍率を制限するか、段階的な拡縮に対応した方が良さそう
		
 横画面でキーボードとの干渉を回避したいとき有利。
- 「タッチパネル」の定義方法を変えたい
		
 変えてほしくない方はメールください。
 
- 物理キーボードでの問題メモ
・FSKAREN 対策パッチ
    // ■TF201(3.2.1, 4.0.3) + 物理キーボード + FSKAREN での問題
    //  ※「Androidキーボード」選択時には問題なし
    // 0.初期状態 (通知バーにキーボードアイコンなし)
    // 1.ナビゲーションで使うキー(カーソルやEnter) を押す   onKeyDown() がリピートする
    //  →放す                                             onKeyUp() が来る
    // 2.ナビゲーションで使うキー *以外* を押す             通知バーにキーボードアイコン点灯
    //                                                     onKeyDown() がリピートする
    //  →放す                                             onKeyUp() が来る
    // 3.ナビゲーションで使うキー(カーソルやEnter) を押す   onKeyDown()+onKeyUp() がペアでリピートする
    //                                                     ×キーを押している期間が実態と合わない
    //                                                     ×PC-8001側のキースキャンが拾ってくれない
    //  →放す                                             onKeyUp() が来る
    // 4.「戻る」操作で 初期状態 に戻る                     ×アプリ側の「戻る」操作を阻害しているとも言える
    // ■FSKAREN対策
    // ・View#dispatchKeyEventPreIme(KeyEvent) でキーイベントを先取りする
    //  ※残念ながら Activity#dispatchKeyEventPreIme(KeyEvent) は無い
    //  ・Display クラスに dispatchKeyEventPreIme() を実装
    //  ・Display#init() で setFocusable(true);    ※KeyEvent 取得に必須
    //  ・Display#init() で requestFocus();
    //  ※パッチ版では 一度「戻る」でアイコンを消すと出なくなる
    // ・問題点:
    //  ・dispatchKeyEventPreIme() は 初回の KeyEvent.ACTION_DOWN を取得できない
    //    (「Androidキーボード」選択時も同様)
    //  ・通知バーにキーボードアイコンが点灯した状態では「戻る」を2回押さないとランチャに戻らない
    //    メニューの「中断」でランチャに戻った場合はアイコンが消えない
    //    さらにランチャの「終了」ボタンでトップに戻った場合もアイコンが消えない
    //    ホームボタンでトップに戻ったときは消える
    //    上記挙動は「SuperNote」等でも同様
    // ・問題が起きない「Androidキーボード」に一時的に変更できないか?
    //  ・アプリ側からの切り替えは無理っぽい
    //  ・できたとしても元に戻せない? (元のIMEを調べる手段が無い?)