VoiceViewユーザー補助機能の実装


VoiceViewユーザー補助機能の実装

Amazon Fire TVに組み込まれているVoiceViewスクリーンリーダーを使用すれば、目の不自由なユーザーもFire TVユーザーインターフェイスを操作できます。目の不自由なユーザーは、VoiceViewで標準のFire TVナビゲーションメカニズム(リモコンの [上][下][左][右] ボタン)を使用して、画面内で入力フォーカスを移動できます。フォーカスが変更されると、VoiceViewは現在フォーカスが置かれているアイテムを自動的に読み上げます。この機能は、旧バージョンのVoiceViewの「標準ナビゲーション」モードに似ています。

2016年12月のソフトウェアアップデートで、Fire TVのスクリーンリーダーにいくつかのキーの変更が加えられています。このページでは、VoiceViewのサポートをアプリに実装するうえでのユーザーエクスペリエンス(UX)に関する推奨事項を説明します。これにより、目の不自由なFire TVアプリユーザーに最適なエクスペリエンスを構築できます。

VoiceViewの実装のチェックリスト

次のチェックリストを使用して、Amazon Fire TVアプリとVoiceViewスクリーンリーダーの連携がAmazon推奨の標準を満たしていることを確認します。

実装に関する技術的な推奨事項

アプリは、次に示すVoiceViewの要素を実装している必要があります。

  • アプリのUIにAndroidユーザー補助フレームワークとの互換性があることを確認します。
  • コンテンツの説明を実装して、VoiceViewが画像、ボタン、画面上にあるほかのオブジェクトの説明を読み上げることができるようにします。
  • 使用に関するヒントをリストおよびグリッドコンテンツに追加して、VoiceViewが目の不自由なユーザーによる操作を誘導できるようにします。
  • 静的なコンテンツに「詳細」を実装して、関連するオブジェクトがフォーカスされたときにVoiceViewがそのコンテンツを読み上げることができるようにします。

ユーザーエクスペリエンス(UX)に関する推奨事項

VoiceViewのUXに関する次の推奨事項をアプリに実装する必要があります。

  • フォーカスされたアイテムのコンテンツをVoiceViewが読み上げる。これには、タイトルやエピソード番号など、画面上に表示されるすべての情報が含まれます。
  • 「案内テキスト」と「使用ヒント」をVoiceViewが読み上げ、ユーザーが画面のUIを操作できるようにする。
  • 静的なコンテンツをVoiceViewが読み上げる。これは、「詳細」テキストを通じて自動的に行われる、ユーザーが [メニュー] ボタンを押したときに手動で行われる、ユーザーが確認モードに入って画面上のアイテム間を移動したときに手動で行われる、のいずれかです。
  • アクティベーション用のURLやコードなどのセットアップ情報をVoiceViewが読み上げる。
  • プログラムの選択、プログラム情報、再生、CCの設定などの機能やタスクをVoiceViewがサポートする。

VoiceViewの動作の概要

ユーザーは、[メニュー] ボタンやそのほかのボタンを使用して、Amazon Fire TVユーザーインターフェイスとVoiceView対応アプリを操作できます。

VoiceViewで [メニュー] ボタンを使用する

VoiceViewが有効になっている場合、[メニュー] ボタンについては次の規則に従います。

  • VoiceViewを有効または無効にするには、[戻る] ボタンと [メニュー] ボタンを同時に2秒間押します。
  • VoiceViewが有効になっている場合、VoiceViewは [メニュー] ボタンと [再生][一時停止] ボタンを制御します(VoiceViewによる読み上げが行われている場合)。
  • システムまたはアプリが [メニュー] ボタンから2回押下イベントを受信します。
  • [メニュー] ボタンを1回押すと、画面の情報の読み上げが次の順序で開始されます。
    1. 「使用ヒント」
    2. 「案内テキスト」
    3. 「詳細」テキスト
    4. その他すべての静的コンテンツ

[再生/一時停止][早戻し][早送り] ボタンを使用して音声を制御する

VoiceViewが有効になっている場合、次のナビゲーション規則に従います。

  • VoiceViewが「使用ヒント」、「案内テキスト」、「詳細」テキスト、その他すべての静的コンテンツを読み上げると、ユーザーは [早戻し] および [早送り] ボタンを使用してナビゲーションを制御できます。
  • ユーザーが画面に初めてアクセスすると、VoiceViewが「案内テキスト」を自動的に読み上げます。
  • 一時停止の後にユーザーがフォーカスをコントロールに移動すると、VoiceViewが「使用ヒント」と「詳細」テキストを読み上げます。
  • 読み上げ時に [再生/一時停止] ボタンを押すと、VoiceViewがミュートされます。
    • 映画または音楽の再生中にVoiceViewによる読み上げが行われる場合、[再生/一時停止] を1回押すとVoiceViewがミュートされます。
    • VoiceViewがミュートされた後、もう一度 [再生/一時停止] ボタンを押すとメディアの再生が一時停止します。
  • ユーザーが [メニュー] ボタンを押すと、VoiceViewは静的コンテンツの一部である「詳細」コンテンツを読み上げません。

VoiceViewの確認モードでは、ユーザーがAmazon Fire TVの画面のグリッドレイアウトを詳しく調べることができます。これは、タブレットでスクリーンリーダーによるリニアナビゲーションを使用する場合と似ています。アプリで確認モードを使用する場合、次の規則に従います。

  • [メニュー] ボタンを長押しして確認モードに入ると、そのことをVoiceViewが音声で知らせます。
  • 方向コントローラーの [左] および [右] ボタンでリニアナビゲーションを制御できます。
  • 実行不可能なアイテムにフォーカスが置かれているときにユーザーが [選択] を押すと、VoiceViewが「アイテムを選択できません」と読み上げます。
  • [メニュー] ボタンを長押しすると、確認モードが終了します。
  • 確認モードを終了すると、ユーザー補助機能のフォーカスは以前にキャッシュされたキーボードフォーカスの位置に戻り、そのフォーカスをVoiceViewが再度読み上げます。

WebViewで確認モードを使用する

WebViewは、アプリ内の複雑なUIを表現できます。これには、リンクなどの実行可能なアイテムと、静的テキストや画像などの実行不可能なアイテムの両方が含まれます。WebViewはAmazonアプリストアの多くのアプリでよく使用されるため、VoiceViewではWebViewをサポートしています。VoiceView対応のWebViewでは、ユーザーが確認モードを使用して、実行可能なアイテムを含む画面上のすべてのアイテムを操作し、静的コンテンツアイテムのコンテキストを判断できます。WebViewでは「詳細」コンテンツは利用できません。

確認モードを初めて有効にしたときは、詳細度はデフォルトで、個々のコントロール単位の移動に設定されています。[上] または [下] を押して、利用可能な詳細度オプション(文字、単語、コントロール、ウィンドウなど)を順に選択できます。ウェブコンテンツの詳細度オプションには、リンク、リスト、見出しが含まれます。このような読み上げの詳細度を使用して、女優の名前のスペルを確認するといった操作や、ウェブコンテンツのより効率的なナビゲーションを行うことができます。さまざまな詳細度オプションを操作するには、次の規則に従います。

  • 現在選択されている詳細度で前のアイテムに戻るには、[左] を押します。
  • 次のアイテムに移動するには、[右] を押します。
  • 確認モードに入ると、詳細度レベルが「コントロール」にリセットされます。

VoiceViewの実装

このセクションでは、次の種類のコンテンツにVoiceViewを実装するためのガイドラインを示します。

  • 静的な(フォーカス不可能な)コンテンツ
  • 「案内テキスト」
  • 「使用ヒント」

静的な(フォーカス不可能な)コンテンツにVoiceViewのサポートを実装する

VoiceViewには、静的な(フォーカス不可能な)コンテンツを操作するために、 (1)[メニュー][早送り][早戻し] ボタンの使用、(2)確認モード(後述)の2つのメカニズムが用意されています。これにより、目の不自由なユーザーがこのようなコンテンツにアクセスできるようになります。VoiceViewではマークアップがサポートされており、これを使用してアプリで静的な(フォーカス不可能な)コンテンツをフォーカス可能なアイテムに関連付けることができます。

フォーカスが置かれているアイテムについて画面に詳細情報が表示されており、この情報がアイテムコンテンツの説明に含まれていない場合、詳細を使用します。これらの詳細は、ユーザーがそのアイテムの上で短い時間、一時停止した後に読み上げられます。アイテム間を連続して移動する場合には、ユーザーが1つのアイテムで一時停止するまで詳細の読み上げは行われません。

次の例では、2つのシナリオを使用してユーザーが静的なコンテンツを操作する方法を説明します。

例1

Amazon Fire TVランチャー画面を使用して、映画のカタログを操作するとします。画面上部のテキストが更新され、現在フォーカスが置かれているアイテムのタイトル、説明、評価、そのほかの情報が表示されます。このフォーカス不可能なコンテンツは、ユーザーが映画を選択するたびに更新されます。そのため、describedByエクストラを使用して、選択された映画を格納するノードについて説明する必要があります。これにより、アイテムで短い時間、一時停止した後に、この情報が自動的に読み上げられるようになります。
例2

Fire TVの映画詳細ビューがあるとします。表示される映画のタイトル、年、再生時間、星による評価などはすべて静的コンテンツです。ユーザーが [メニュー] を押すと、VoiceViewがこのコンテンツを読み上げます。その後、ユーザーは [早送り] および [早戻し] ボタンを使用して操作できます。

個々の静的コンテンツまたはそのコンテナをフォーカス可能なビューに関連付けるには、次の手順に従います。

  1. com.amazon.accessibility.describedByのキーを、そのビューのAccessibilityNodeInfoextrasバンドルに設定します。
  2. このアイテムの説明が含まれているコンテナまたはビューのビューIDをスペースで区切ったリストを、文字列として値に設定します。

    VoiceViewは、com.amazon.accessibility.describedByキーが設定されたアイテムを検出すると、com.amazon.accessibility.describedByの値で指定されたビューIDのAccessibilityNodeInfoオブジェクトのリストをリクエストします。その後、詳細度の設定によって、VoiceViewが適切なテキストまたはコンテンツの説明を読み上げます。

コードサンプル

// 次のように画面のほかの場所で静的テキストによって
// 説明されているボタンにエクストラを設定できます。
Button button = (Button) findViewById(R.id.button);
button.setAccessibilityDelegate(new View.AccessibilityDelegate() {
  public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(host, info);
    info.getExtras().putString("com.amazon.accessibility.describedBy", R.id.movie_title_1 + " " + R.id.actors_1 + " " + R.id.description_1);
    info.setEnabled(host.isEnabled());
  }
});

VoiceViewに「案内テキスト」を実装する

新規ユーザーがAmazon Fire TVの画面のレイアウトを理解しやすいように、VoiceViewでは「案内テキスト」がサポートされています。これはローカライズされたテキストで、そのテキストが含まれるコンテナが初めて表示されたとき、またはユーザーが [メニュー] ボタンを押したときにVoiceViewによって読み上げられます。ある領域の全般的なレイアウトについて大まかな説明があると、初めて使用するユーザーにとって便利な場合があります。この場合、その領域のコンテナビューに案内テキストを適用します。

例1

ユーザーがFire TVのメインホームページを初めて開くと、「メインメニューです。検索、ホーム、映画、設定などの主要な選択肢が含まれています。アイテムを選択すると、画面の下側が更新されて関連コンテンツが表示されるようになります」とVoiceViewが読み上げます。
例2

アプリの画面に、多くの映画のカバーアートのビューで構成されるLinearLayoutがあるとします。この画面の目的を目の不自由なユーザーに伝えるには、LinearLayoutのAccessibilityNodeInfoに案内テキストを設定します。これにより、「この画面には映画のリストが含まれています。それぞれの映画に移動すると、あらすじを聞くことができます。映画を選択すると再生されます」などと説明することができます。

com.amazon.accessibility.orientationTextエクストラのキーによって、「案内テキスト」をAccessibilityNodeInfoに構成します。

  • 案内テキストを含むAccessibilityNodeInfoをユーザーが初めて使用すると、VoiceViewがテキストを読み上げます。
  • その後のアクセスでは、ユーザーが [メニュー] ボタンを押してコンテキスト情報を要求すると、VoiceViewが「案内テキスト」を読み上げます。

VoiceViewに「使用ヒント」を実装する

視覚障害を持たないユーザーの場合、画面のレイアウトからその画面のナビゲーションと操作の方法に関する視覚的な手掛かりを得ることができます。たとえば、画面上でアイテムAがアイテムBの上側に配置されている場合、AからBに移動するには [下] ボタンを押せばよいことが直感的にわかります。しかし、目の不自由なユーザーは、画面の操作に役立つそのほかのヒントを必要とすることがあります。VoiceViewでは、この問題に関する支援として、画面内のナビゲーションに役立つ「使用ヒント」を定義する一連のエクストラをサポートしています。

例1

画面に水平方向の映画のリストがあるとします。「[左] および [右] を使用すると、前の映画または次の映画に移動できます」という「使用ヒント」を含めることをお勧めします。
例2

画面にコンテンツの複数行のグリッドがあり、最初の行(「この映画を観た人はこんな映画も観ています」など)にフォーカスが置かれています。この場合、「アイテムを探すには [左] および [右] を押してください。別のアイテムコレクションに移動するには [上] および [下] を押してください。」のようなテキストをcom.amazon.accessibility.usageHint.remoteに設定します。 このエクストラを、グリッドのすべての行と列の親であるコンテナビューに設定します。

使用ヒントは、グリッド内の個々のオブジェクトには設定しないでください。ナビゲーション中に「使用ヒント」が不必要に繰り返される原因となります。「使用ヒント」は、コンテナを選択した場合にのみ読み上げられます。同じコンテナ内のアイテム間を移動する際に、繰り返し読み上げられることはありません。

キー
com.amazon.accessibility.usageHint.remote
(Fire TVのみ)
リモコンを使用してアイテムの使用またはナビゲート方法を説明する文字列。 「アイテムを探すには左または右を押してください。」
com.amazon.accessibility.usageHint.touch
(Fireタブレットのみ)
タッチスクリーンを使用したアイテムの操作方法の説明。 「ダブルタップして選択します。ダブルタップして長押しするとオプションが表示されます。」

コードサンプル

// 次のように、エクストラをリストに設定して使用ヒントを提供できます。
ListView listView = (ListView) findViewById(R.id.my_list);
listView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
  public void onInitializeAccessibilityNodeInfo(View host,
    AccessibilityNodeInfo info) {
      super.onInitializeAccessibilityNodeInfo(host, info);
      info.getExtras().putString("com.amazon.accessibility.usageHint.touch",
       getString(R.string.double_tap_hint));
      info.getExtras().putString("com.amazon.accessibility.usageHint.remote",
       getString(R.string.press_select_hint));
      info.setEnabled(host.isEnabled());
 }
});