AndroidのTalkBack機能についてまとめる（基本操作について編）

# はじめに - モバイル端末のa11yについて
Webでは活発であったアクセシビリティを踏まえた開発は近年のモバイル端末の使用者増加によって、モバイル端末でも必要とされ始めています。アプリ開発者はこれを踏まえた上での開発や、開発ずみのアプリのさらなるユーザへの改善としてユーザ補助機能を高めることが必要になってきています。

今回は自学のためandroid developers documentからユーザ補助に関するドキュメントをざっと全体をみてまとめていきます。参考は最後にリンクを貼っていますので、詳しくはそちらから見てください。

# Androidで提供されているユーザ補助機能
Androidでは端末に備わっているユーザ補助機能として以下の二つが挙げられます。

TalkBack: 視力の弱いユーザーや目の不自由なユーザーをサポートします。合成音声でコンテンツを知らせ、ユーザーの操作に応じてアプリでアクションを実行します。
スイッチ アクセス: 運動障がいのあるユーザーをサポートします。インタラクティブな要素をハイライト表示し、ユーザーのボタン押下に応じてアクションを実行します。1 つまたは 2 つのボタンを使用するだけでデバイスを制御できます。
(アプリのユーザー補助機能の改善に関する原則より)

これにより、最低でもこの二つの機能が満足に使用できるようにアプリ開発の際には実装に交える必要があります。

# TalkBack機能について
TalkBack機能について説明をしていきます。原則としてこの記事は、ユーザ補助機能を必要とせず、アプリにユーザ補助機能を実装しようとしている人への助けになるように書いています。そのため、読み上げられる言葉は可能な限り文字に起こしてはいますが、全て書き上げることは一部行っておりません。
## TalkBackを使うには
- 音量ボタンの大小を同時に押す続ける
- [ユーザー補助]＞[TalkBack]から[TalkBack を使用する] を選択する。
- 端末の電源を入れる時に設定をする
以下、原文ママ
> Android 搭載端末の電源を初めて入れるときに、TalkBack をオンにできます。

> できれば、ヘッドホンを用意して、パスワード（Wi-Fi パスワードなど）を入力するときにヘッドホンが使えるようにします。デフォルトでは、キーの読み上げは、端末にヘッドホンをつなげた場合のみ有効になります。この設定は、後で Android 搭載端末の設定で変更できます。

> Android 4.1 以降: 2 本の指でセットアップ画面を押し続けます。端末でこのジェスチャーが認識されると、TalkBack が有効になり、チュートリアルが開始します。
Android 4.0: セットアップ画面上に指で切れ目のない長方形を描きます。デバイスでこのジェスチャーが認識されると、ビープ音が鳴ります。

#### 
## TalkBackの使い方
### 基本的な使い方

#### ジェスチャーを使う
AndroidのTalkback機能は１本指で操作することでしようできます。２本指での操作を行うことで、従来のアプリの操作をおこなうことができます（画面のスクロール、タップなど）
詳しくは公式サポートが表としてまとめてくれているので、そちらをみるといいと思います。
https://support.google.com/accessibility/android/answer/6151827?hl=ja&ref_topic=3529932

#### タッチガイド
１本指で画面をなぞることでタッチガイドが使用できます。タッチガイドを使用すると、なぞられたオブジェクトのラベルや説明が音声によって再生されます。通常のドラッグ動作は２本の指で操作することで、画面のスクロールを行うことができます。
また、タッチガイドなどで移動したオブジェクトをタップしたい時はダブルタップをすることで、その項目が選択されます。

#### 直線的なナビゲーション
画面の項目を選択する上で、タッチガイドを使用するのではなく、全てを網羅的に確認するためには左右に１本指でスワイプします。オブジェクトへ移動することによって、そのオブジェクトで実行できる操作のヒントが読み上げられます。
また、上下にスワイプすることで移動できるオブジェクトの種類を選択することができます。
選択できるオブジェクトの種類は以下の通りです。

**[TalkBack を使用してデバイスを操作する](https://support.google.com/accessibility/android/answer/6006598?hl=ja&ref_topic=3529932)より**
- 見出し: 見出しを使ってナビゲートします。
- リンク: 画面上のメールアドレス、電話番号、ウェブサイト、アドレスなどのリンクを使ってナビゲートします。
- コントロール: チェックボックス、ラジオボタン、スイッチ、スライダー（シーク制御）、テキスト フィールド、ボタンを使ってナビゲートします。
- デフォルト: ページ上のすべての要素に論理的な順序で移動します。

たとえば、リンクを使ってナビゲートするとします。左右にスワイプすると、TalkBack は各リンクにフォーカスを置いて、読み上げます。現在の画面にリンクがない場合、TalkBack は次または前の画面に移動します。次または前のリンクを探すには、もう一度スワイプします。最後または最初の画面でリンクが見つからない場合、TalkBack は直近のフォーカス可能なアイテムに移動した後、検索を停止します。




#### 画面検索
TalkBackの画面で画面検索を行うことができます。
画面検索を行うためには、**ジェスチャー：左スワイプ　→　下スワイプ**を行います。
ジェスチャーを行うと、検索するためのキーワードを入力する画面になります。ただし、検索は表示されている画面領域で行われます。
「前の画面（↑のアイコン）」「次の画面↓のアイコン」を選択することで画面が移動し、その領域内で再び検索を行います。

検索したキーワードがヒットすると、検索結果がリスト表示されるので、左右にスワイプすることで、リストから選択し、そのオブジェクトへと移動します。

#### 連続読み上げ
**ジェスチャー：下スワイプ　→　右スワイプ**にてグローバルコンテキストメニューが開けます。
このグローバルコンテキストメニューについては次回記事にて説明を行います。（[グローバルコンテキスト メニューとローカルコンテキストメニューを使う](https://support.google.com/accessibility/android/answer/6007066?hl=ja&ref_topic=3529932)）
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261466/cfdcf321-12c7-882d-8439-dbf33579db21.png "グローバルコンテキストメニュー" width=50%>
このメニューでは様々なことを行えます。その中でも連続読み上げを行う場合には、[最上部から読み上げる]または、[次のアイテム以降を読み上げる]を選択することで、画面の領域を読み上げ続けます。
読み上げを中止するためには画面をタップします。画面の最後まで到達した場合には次の画面へと自動で移動します。

読み上げ途中に前後にスキップするためには、画面で左、右にスワイプをします。
また、前述した直線的なナビゲーションにて、移動できるオブジェクトの設定を行いましたが、その設定にしたがって、連続読み上げは行われます。

#### テキストを編集する 
テキストフィールドにフォーカスが当たることで、画面下部に仮想キーボードが表示されます。このキーボードは通常の物と似たような動作を行いますが、若干の違いがあります。
1. フリック入力のストローク距離が短い
    - キーボード上でも通常の画面と同じように、画面のドラッグによって文字の読み上げを行います。そのため、「あ」ボタンへと手をつけ、「え」を入力するために右へスワイプした時に、スワイプのストロークが長い（「か」の領域までドラッグしてしまう）と、「か」の読み上げが始まり、「え」の入力ができなくなります。
2. 入力スピードが遅い
    - 基本的に文字の読み上げが行われるため、次の文字を入力するまでにタイムラグがあります。
3. 入力された文字を確認することができる
    - 入力欄に入力された文字を一文字ずつ確認するためには音量ボタンの大、小を押すことによって読み上げることができます。


## おわりに

今回はandroid developer documentの中のTalkBack機能について概要を説明しました。
これ以外にもTalkBack機能によるユーザ補助機能があるので、そちらもまとめていきます。
また、より便利に使用できる方法もあるので、そちらも参考にしてみてください。
[グローバルコンテキスト メニューとローカルコンテキストメニューを使う](https://support.google.com/accessibility/android/answer/6007066?hl=ja&ref_topic=3529932)
（まだ記事を書いていないので、リンクは参考になります。）

## 参考
https://developer.android.com/guide/topics/ui/accessibility/apps
https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor
https://developer.android.com/guide/topics/ui/accessibility/custom-views
https://developer.android.com/guide/topics/ui/accessibility/service
https://developer.android.com/guide/topics/ui/accessibility/principles
https://developer.android.com/guide/topics/ui/accessibility/testing
https://android-developers.googleblog.com/2012/04/accessibility-are-you-serving-all-your.html