~~~~~~~~~~~~~~~~~
BRLTTY on Android
~~~~~~~~~~~~~~~~~

.. |SDK build tools version| replace:: 29.0.3
.. |NDK version| replace:: r21e (21.4.7075529)
.. |JDK version| replace:: 1.7

.. _BRLTTY on Google Play: https://play.google.com/store/apps/details?id=org.a11y.brltty.android

.. include:: prologue.rst

Using BRLTTY
============

Activation and Configuration
----------------------------

At this point, BRLTTY has been installed. Next, you'll need to go into
``Settings`` -> ``Accessibility`` -> ``BRLTTY`` in order to start the ``BRLTTY``
accessibility service, adjust its settings, and select your braille device.

If you'll be connecting to your braille device via Bluetooth,
see `Connecting Via Bluetooth`_.

If you'll be connecting to your braille device via USB,
see `Connecting Via USB`_.

If your braille device has a braille keyboard,
see `Using a Braille Keyboard`_.

Starting and Stopping BRLTTY
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BRLTTY isn't a regular Android application - it's an accessibility service. As
such, it can't be started and stopped in the usual way, i.e. from the launcher.
In fact, it can't even be found within the applications list.

BRLTTY must be started and stopped from the ``Accessibility Settings`` screen.
To get there, launch the ``Settings`` application, and then tap on
``Accessibility`` (near the bottom). This screen contains a "Services" section
that lists all of the accessibility services that are currently installed on
the device. For each installed accessibility service, there's an associated
indicator that says ``On`` if that service is currently running, and ``Off`` if
it isn't.

Find ``BRLTTY`` and tap on it. This brings up a window with two items in it.
One is a "switch" for turning BRLTTY on and off. The other is a button that
takes you to BRLTTY's ``Settings`` screen. You can go through BRLTTY's
settings, making changes as desired, as well as define your braille device(s),
either before starting BRLTTY or while it's running.

Connecting Your Braille Device
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Connecting Via Bluetooth
````````````````````````

In order to use a Bluetooth braille device, you'll need to first "pair" it with
your Android device. Go into ``Settings`` -> ``Bluetooth``. If your braille
device is already listed within the ``Paired Devices`` section of that screen
then it has already been paired. If you still need to pair it then tap
``Search for Devices``. This will add an ``Available Devices`` section to the
screen. If your braille device isn't listed then you'll probably need to
perform a model-specific action on it in order to make it visible
(also known as discoverable) - see its manual for details. After doing that,
tap ``Search for Devices`` again. Tap on your braille device to begin the
Bluetooth Pairing Request, enter its PIN (see its manual for details), and tap
``OK``.

Connecting Via USB
``````````````````

In order to use a USB braille device, you'll need a special cable known as a
"Micro USB Host Adapter". The reason for this is that the USB port on an
Android device usually acts as a "device" (rather than as a "host") port. This
is so that, for example, you can control your Android device from your
computer. The Micro USB Host Adapter has a special plug, known as an OTG
(on-the-go) connector, that, when inserted into the Android device's USB port,
instructs Android to act as the USB host.

The Micro USB Host Adapter also allows you to connect any other USB 
device (keyboard, mouse, printer, hub, etc) to your Android device. Be aware,
though, that if any such device, including your braille device, draws power via
its USB port then your Android device's battery will become the source of that
power. If portability isn't an issue, you may wish to consider using your Micro
USB Host Adapter to connect your Android device to a powered hub so that your
USB devices will draw power from the hub rather than from your Android device's
battery. You may also wish to consider disabling USB charging on any devices
that offer this capability.

Defining Your Braille Device
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You don't actually need to define your braille device, but BRLTTY will connect
to it much faster if you do. If you don't, BRLTTY will search through all of
the devices that have been connected via either Bluetooth or USB
(see `Connecting Your Braille Device`_) for one that it recognizes. If there's
more than one, it'll select the first one that it finds.

To define your braille device, go to BRLTTY's ``Settings`` screen, tap on
``Manage Devices``, and then on ``Add Device``. From there, find your braille
device, and then tap ``Add``. To find your braille device:

1) Select its communication method (Bluetooth, USB).

2) Select your device from the list that's presented.

3) Select the correct braille driver.
   This step is optional, i.e. you can usually leave it set to ``autodetect``.
   Going through the effort of selecting the correct driver, however,
   ensures a fast and reliable connection.

After you've added your braille device to BRLTTY, tap on ``Selected Device``
and select it from the list of devices that BRLTTY knows about.

Using a Braille Keyboard
~~~~~~~~~~~~~~~~~~~~~~~~

Braille device keyboard input is supported, but, like all Android input
methods, it must be explicitly enabled, and then explicitly selected. Android
doesn't permit BRLTTY to do either of these automatically on your behalf.
Although it's inconvenient, Android imposes this manual process so that you're
very consciously aware of which input methods can process, and which input
method is currently processing, whatever you're typing. Such applications,
after all, handle extremely sensitive personal data (such as passwords, credit
card numbers, etc), so it's crucial that you make your own decisions regarding
which of them you're willing to trust.

If you type on your braille device's keyboard when BRLTTY's input method is
either disabled or enabled but not selected, then BRLTTY will alert you to this
fact via a message on your braille display. You may wish to enable BRLTTY's
keyboard support ahead of time, but you probably don't want to select it ahead
of time. The reason for this is that Android only allows exactly one input
method to be in use at a time. When you explicitly select BRLTTY's input
method, therefore, you're also implicitly deselecting the on-screen keyboard.

You can enable BRLTTY's keyboard support in one of the following ways:

* Launch Android's ``Settings`` application and tap on ``Language and Input``.
  The ``Keyboard and Input Methods`` section of this screen shows the
  ``Default`` (currently selected) input method, and contains a check box for
  each installed input method. An input method is enabled if its check box is
  checked, so, to enable BRLTTY's keyboard support, check the box labelled
  ``BRLTTY Input Service``. Once it's been enabled, you can select it at any
  time by adjusting the ``Default`` setting.

* If BRLTTY is running then switching between input methods is much easier.
  Go to BRLTTY's `Actions screen`_ and tap ``Switch Input Method``. This
  brings up Android's Input Method Picker, which presents a set of radio
  buttons - one for each enabled input method. If there's no radio button for
  BRLTTY's input method then it hasn't been enabled yet. To enable it, tap the
  button labelled ``Set up input methods``. This screen contains a check box for
  each installed input method. Check the box labelled ``BRLTTY Input Service``.
  Then tap the ``Back`` button to return to the ``Language and Input`` screen,
  find the ``Keyboard and Input Methods`` section, and set the ``Default``
  input method to BRLTTY's input method.

Actions Screen
~~~~~~~~~~~~~~

BRLTTY's Actions screen presents several common actions that you may wish to perform:

* Switch Input Method
* BRLTTY Settings
* View User Guide
* Browse Web Site
* Browse Community Messages
* Post Community Message
* Manage Community Membership
* Update Application
* About Application

You can get to this screen using any of the following methods:

* From your braille device via global action #5.
  See `Global Actions`_ for details.

* From your braille device via Space + Dots12345678.

* Via ``Settings`` -> ``Accessibility`` -> ``BRLTTY`` -> ``Settings``.

* From the notifications shade.
  Open it by dragging the status bar downward:

  + With two fingers (if Explore by Touch is active).
  + With one finger (if Explore by Touch isn't active).

  Then find BRLTTY's service notification and tap it.

* Via the Accessibility button on the system navigation bar.
  This capability was introduced in Android 8.0 (Oreo).
  The button may not be visible for a number of reasons, for example:

  + The device's system navigation bar isn't rendered via software.
  + An application has chosen to hide the system navigation bar.

Customized Data Files
~~~~~~~~~~~~~~~~~~~~~

You can customize any of BRLTTY's data files,
e.g. a text, contraction, or key table or subtable.
To do this, add a file with the same name directly into a folder named ``brltty``
at the top-level of your Android device's primary shared/external storage area.
This area might be internal (on the device itself)
or external (on a removal storage device, e.g. an SD card).
Normally, it's the area that ``/sdcard`` is symbolically linked to.

BRLTTY won't be aware of your customized data files
if this area has been mounted by a computer.

It's safe to include the original data file from your customized copy.
If you're only adding lines, therefore, then your customized copy
need only contain those additions and the include statement.

Navigating the Screen
---------------------

Using Multiple Hosts
~~~~~~~~~~~~~~~~~~~~

BRLTTY only remains connected to your braille device while your Android device
is unlocked or while its screen is on. If your Android device is locked and its
screen is off then BRLTTY automatically disconnects from your braille device.
This is so that you can easily share your braille device amongst multiple
hosts.

Pressing your Android device's power button (or similar action) to wake it up,
even though it may still be locked, is sufficient to cause BRLTTY to
automatically reconnect to your braille device. This allows you to enter your
password or PIN via your braille keyboard.

You can continue using your braille device even though your Android device's
screen may have turned off, as long as its lock timer hasn't yet expired.
Pressing keys on your braille device resets your Android device's lock timer in
the same way that pressing its keys, touching its screen, etc does. This means
that your Android device will stay awake and unlocked even though you're only
controlling it from your braille device, and that it'll also still
automatically lock once you're no longer using it.

Accessibility Focus
~~~~~~~~~~~~~~~~~~~

The "accessibility focus" feature of Android is used for cursor tracking and
routing. It's a soft cursor, not visible on the screen, that can be 
programmatically associated with any screen element. All screen readers that
use it to define the current element for actions (like tapping) will implicitly
cooperate reasonably seamlessly with one another.

The cursor is usually placed on the first character of the screen element that
currently has accessibility focus. The one exception to this is within an
input area. If that area has input focus then the cursor is placed at
the location within it where input will be inserted.

When a home screen folder is opened, BRLTTY automatically sets accessibility
focus to that folder's first entry. This eliminates the need to search for it.

The Cursor Routing Keys
~~~~~~~~~~~~~~~~~~~~~~~

The cursor routing keys of your braille device perform their usual function when
within an input area if it has input focus - the key above a given
character brings the cursor to that character. In any other context, however, a
cursor routing key performs an action on the screen element under it. Starting
with the leftmost routing key over a screen element, which we'll call key #1,
these actions are as follows:

1) Bring accessibility focus (cursor)
2) tap (click)
3) hold (long click)
4) scroll backward (up or left)
5) scroll forward (down or right)
6) context click
7) accessibility actions

A range control (progress bar, volume slider, etc) can be adjusted up/down
via the scroll forward/backward actions.

Input Areas
~~~~~~~~~~~

When an input area has input focus, BRLTTY's attribute underlining
feature is used to highlight the selected text region.

Widget Representations
~~~~~~~~~~~~~~~~~~~~~~

Check Boxes
```````````

A check box is rendered as a three-cell symbol:

1) dots 123478 (the left side of the box)
2) dots 2356 (the check mark)
3) dots 145678 (the right side of the box)

The check mark is present if the box is checked and absent if it isn't.
If the check box has a label then it appears to the right of the symbol.
The braille representations are:

* ⣏⠶⣹ checked
* ⣏ ⣹ not checked

Radio Buttons
`````````````

A radio button is rendered as a three-cell symbol:

1) dots 2348 (the left side of the button)
2) dots 2356 (the check mark)
3) dots 1567 (the right side of the button)

The check mark shows which of the radio buttons is currently selected.
The label for each radio button appears to the right of its symbol.
The braille representations are:

* ⢎⠶⡱ selected
* ⢎ ⡱ not selected

Switches
````````

A (two-position) switch is rendered as a three-cell symbol:

1) dots 4568 (the left side of the switch)
2) dots 1478 (the top and bottom of the switch)
3) dots 1237 (the right side of the switch)

Dots 25 are added to the middle cell if the switch is on,
and dots 36 are added to the middle cell if the switch is off.
In other words, the switch is up when on and down when off.
The label for the switch's current state appears to the right of the symbol.
The braille representations are:

* ⢸⣛⡇ on
* ⢸⣭⡇ off

Range Controls
``````````````

A range control is one which can be adjusted (rather than set or edited).
They include widgets like progress bars, volume sliders, etc.
They're rendered as a three-value summary::

* An at sign followed by the current setting.
* The minimum and maximum settings, separated by a dash, within parentheses.

The developer of an application can choose which value range a given control uses.
For example, a 16-position volume control currently set to 75% might look like this::

  @11 (0 - 15)

It could, however, also look like this::

  @75% (0% - 100%)

Disabled Controls
`````````````````

If a control is currently disabled then the word ``disabled``,
enclosed within parentheses, appears to the right of its label.
For example::

  Connect (disabled)

When There's No Text
````````````````````

A screen element that has no text of its own,
and that BRLTTY doesn't explicitly support,
is normally not rendered.
Examples of these include:

* A graphic (e.g. an image view).
* A container used to construct the screen's layout (e.g. a frame layout).

It's still necessary to render it, however, if it implements
an action (e.g. a tap) which the user needs to be able to perform.

If the application's developer has provided descriptive text
then that text is rendered.
If not, then BRLTTY renders a generic description within (parentheses).
It contains the widget's type, and, if available, it's source code identifier.

Global Actions
~~~~~~~~~~~~~~

Android supports a number of global actions that can be performed by pressing
special hardware buttons and/or by touching reserved areas on the screen.
BRLTTY also offers a way to perform these actions from your braille device.
While a better way may be developed in the future, this is how it can be done
right now.

* Since Android doesn't use the keyboard function keys
  (commonly named ``F1`` through ``F12``),
  BRLTTY uses them to perform the global actions.
  The way a braille device emulates keyboard function keys
  differs from model to model,
  so you should check the BRLTTY documentation for your braille device.
  The most common way is to press the corresponding cursor routing key
  along with some other key or key combination.
  For braille devices that have a braille keyboard,
  the most common key to be used in conjunction with a cursor routing key
  in order to emulate a keyboard function key is the space bar.

* If your braille device has a braille keyboard
  then you can perform the global actions
  via chords that also include dots 7 and 8.
  For example, Space + Dots78 + Dots125 (h) goes to the home screen.

.. table:: Global Android Actions

  =======  =========  =====================================  =====================
  FN-Key   Chord78+   Action                                 As of Android Release
  -------  ---------  -------------------------------------  ---------------------
  ``F1``   125 (h)    go to the Home screen                  4.1 (Jelly Bean)
  ``F2``   12 (b)     tap the Back button                    4.1 (Jelly Bean)
  ``F3``   1345 (n)   go to the Notifications screen         4.1 (Jelly Bean)
  ``F4``   1235 (r)   tap the Recent Apps (Overview) button  4.1 (Jelly Bean)
  ``F5``   123456     go to BRLTTY's `Actions screen`_       \*
  ``F6``   23         move to the first item                 \*
  ``F7``   2          move to the previous item              \*
  ``F8``   5          move to the next item                  \*
  ``F9``   56         move to the last item                  \*
  ``F10``  134 (m)    tap the Menu button                    \*
  ``F11``  36         return to the active window            4.0 (Kitkat)
  ``F12``  3          switch to the previous window          4.0 (Kitkat)
  ``F13``  6          switch to the next window              4.0 (Kitkat)
  ``F14``  2345 (t)   show the window title                  6.0 (Nougat)
  ``F15``  24 (i)     show various device status indicators           \*
  ``F16``  234 (s)    go to the Quick Settings screen        4.2 (Jelly Bean MR1)
  ``F17``  135 (o)    go to the Device Options screen        5.0 (Lollipop)
  =======  =========  =====================================  =====================

Text Selection and the Clipboard
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

As with the `global actions`_,
if your braille device has a braille keyboard
then you can perform text selection actions
via chords that also include dots 7 and 8.
For example, Space + Dots78 + Dots14 (c)
copies the selected text to Adroid's clipboard.
This works as of Android release 4.3 (Jelly Bean MR2).

.. table:: Text Selection and Clipboard Actions

  ========  =======================================
  Chord78+  Action
  --------  ---------------------------------------
  1 (a)     select all of the text
  4         clear the text selection
  14 (c)    copy the selected text to the clipboard
  1236 (v)  paste the text on the clipboard
  1346 (x)  cut the selected text to the clipboard
  ========  =======================================

The text selection extends inclusively
from its first endpoint through its second one.
The attribute underlining feature (see the Show Attributes preference)
is used to show which text has currently been selected.
It may be helpful to set the attribute underline to blink
if the cursor isn't set to blink, and vice versa.

In addition to being able to select all of the text,
there are ways to select a specific portion of the text.
Exactly how this is done depends on which braille device you're using.
There is, however, one way to do it that works
on any braille device that has cursor routing keys.

The cursor routing key where the cursor is
normally doesn't serve any useful purpose.
If, however, you enable the Start Text Selection preference
(which can be found within the Navigation Options submenu),
then it enters `text selection mode`_
with that character being both the first and second endpoints.
This method has the constraint that the first endpoint of the text selection
must be a character that the cursor can get to.

.. _Text Selection Mode:

When in text selection mode,
pressing a cursor routing key changes the second endpoint of the selection.
This may be done any number of times.
The second endpoint may be either after or before the first one.

Commands
````````

HOST_COPY
  Copy the selected text to the host clipboard
  and then deselect it.

HOST_CUT
  Copy the selected text to the host clipboard
  and then delete it.

HOST_PASTE
  Insert the text on the host clipboard after the screen cursor.

TXTSEL_ALL
  Select all of the text.

TXTSEL_CLEAR
  Clear (deselect) the current text selection.

TXTSEL_SET
  Select a specific portion of the text.
  This command requires that both endpoints of the text
  are within the current braille window.
  The key combination needs two cursor routing (or equivalent) keys.
  We recommend a long press of two cursor routing keys
  (if the braille device supports it).

TXTSEL_START
  Enter `text selection mode`_ with that character being both endpoints.
  With this method, the first endpoint of the text selection can be anywehre,
  i.e. it isn't constrained to be a character that the cursor can get to.
  The key combination needs a cursor routing (or equivalent) key.
  We recommend a long press of a cursor routing key
  (if the braille device supports it).

Web Pages
~~~~~~~~~

Element Annotations
```````````````````

A number of elements within a web page are annotated
in order to help distinguish them from the surrounding text.
Each annotation is placed immediately before
the text of the element that it describes.
It consists of a three-letter tag,
optionally followed by descriptivE data,
all enclosed within (parentheses).
Here are some examples:

.. table:: Web Page Element Annotation Examples

  =================  ====================================================
  Example            Meaning
  -----------------  ----------------------------------------------------
  (btn) Submit       a Submit button
  (lnk https://...)  the target URL of a link
  (tbl 4x9)          the start of a table with four columns and nine rows
  (col 2@3)          the second column of the third row of a table
  =================  ====================================================

The following table lists all of the annotations:

.. table:: Web Page Element Annotations

  ==========  =====================================  ===========
  Annotation  Meaning                                Data
  ----------  -------------------------------------  -----------
  btn         button
  cap         table caption
  col         column in table row                    coordinates
  frm         start of form
  hdg         heading (unspecified level)
  hd1         level one heading
  hd2         level two heading
  hd3         level three heading
  hd4         level four heading
  hd5         level five heading
  hd6         level six heading
  hdr         header of table column                 coordinates
  lnk         target of link                         URL
  lsi         list item                              coordinates
  lsm         list marker
  lst         start of list                          dimensions
  pop         combo box (single or Multiple choice)
  pwd         password field
  row         start of table row
  tbl         start of table                         dimensions
  txt         text field or area
  \--------   horizontal divider
  ==========  =====================================  ===========

Structural Navigation
`````````````````````

Pressing Dots2578 enters Structural navigation mode.
When in this mode,
a web page, when being browsed with Chrome, can be structurally navigated
by pressing dot combinations on your braille device.
Press Dots78 (without Space) to return to the default key bindings.

When in this mode,
combinations of dots 1 through 6 specify the type of element
that you'd like to navigate to.
Adding dot 7 means move to the previous element of that type,
and adding dot 8 means move to the next element of that type.
If neither dot 7 nor dot 8 is added then the current direction is used.

The current direction defaults to (starts out as) ``next``.
Pressing dot 7 by itself sets it to ``previous``,
and pressing dot 8 by itself sets it to ``next``.

If the key table for your braille device defines
a key to be the Left Alt (meta) modifier
then you don't need to switch to/from structural navigation mode.
Just hold that key while pressing
the desired structural navigation dot combination.

The following element types are supported
(where possible, a hopefully easy-to-remember character has been chosen):

.. table:: Structurally Navigable Web Page Elements

  ======  ====  =====================================
  Dots    Char  Go to the Previous/Next
  ------  ----  -------------------------------------
  1       a     article
  12      b     button
  14      c     control
  145     d     ARIA landmark
  15      e     editable text
  124     f     focusable item
  1245    g     graphic
  125     h     heading (any level)
  24      i     list item
  123     l     link (visited or unvisited)
  134     m     media
  135     o     list (ordered or unordered)
  1235    r     radio button
  234     s     section
  2345    t     table
  136     u     unvisited link
  1236    v     visited link
  1346    x     check box
  1356    z     combo box (single or multiple choice)
  2       1     level one heading
  23      2     level two heading
  25      3     level three heading
  256     4     level four heading
  26      5     level five heading
  235     6     level six heading
  ======  ====  =====================================

When BRLTTY Crashes
-------------------

We hope, of course, that BRLTTY won't crash. If it does, though, we want to
know about it.

If BRLTTY does crash, you'll get a dialog with a message like this::

   Unfortunately, BRLTTY has stopped.

This dialog will stay on the screen until you dismiss it by tapping its ``OK``
button. Android will then try to automatically restart BRLTTY, so don't be
overly concerned if this dialog comes up again. Android will eventually give up
if, after a few automatic restart attempts, it decides that BRLTTY simply won't
stay running.

If this ever happens, then, if you can, connect your device to your host via
USB as soon as possible in order to capture a debug log. To capture a debug
log, use this command::

   adb logcat -v time -d >/path/to/logfile

The ``-v time`` option means to add a timestamp to each log record. The ``-d``
option means to dump the current Android system log. The ``adb logcat`` command
writes the log to its standard output, so you need to redirect its standard
output (with ``>``) to wherever you'd like the log to be written.

The reason for capturing the log as soon as possible after a problem is that
Android imposes limits on its log storage so that the log can't consume too
much of your device's resources. If the log becomes too large, Android
automatically removes older entries from it. If you wait too long, therefore,
the part of it that shows how BRLTTY crashed may already have been
automatically removed.

Known Issues
------------

Serial devices aren't supported. Even though Android devices don't have serial
ports, serial devices still can be connected via a USB to Serial adapter. Users
who have older, serial-only braille devices should still be able to use them
with their Android devices.

Installing BRLTTY
=================

BRLTTY has been designed to run on at least Android 4.1 (Jelly Bean).
While it does run on Android 4.0 (Ice Cream Sandwich),
many of its highly desirable features won't work.

BRLTTY can be installed via Google Play.
You can either search for it by name
or go directly to `BRLTTY on Google Play`_.

Required Permissions
--------------------

BRLTTY requires access to a number of privileged
Android operating system capabilities.
The required permissions are as follows:

.. include:: android-permissions.rst

The Old Way
-----------

Before it was on Google Play, BRLTTY had to be installed and updated manually.
For now, this way still works.

These instructions are from the perspective of a Firefox user on Windows,
but the process should be much the same when using a different web browser and/or operating system.

On Your Computer
~~~~~~~~~~~~~~~~

1) Go to `BRLTTY's web site`_.

2) Find the ``Download`` link and press Enter on it.

3) Go to the ``Android`` section, down-arrow from there to the link that says
   ``Latest APK``, and press Enter on it.

4) You'll be prompted to open or save the file at this point. Save it.

5) Go to your ``Downloads`` folder (or wherever you save downloads), and
   find the ``brltty-latest.apk`` file.

6) If the file has been saved on your computer as ``brltty-latest.zip``,
   then press the ``Context`` key, arrow to and press Enter on ``Rename``,
   and change the file extension from ``zip`` to ``apk``. Don't worry if you
   get a warning about the possibility of rendering the file unusable. Go
   ahead with the rename.

On Your Android Device
~~~~~~~~~~~~~~~~~~~~~~

1) Go into ``Settings`` -> ``Security``, and ensure that ``Unknown Sources``
   is enabled. This option says something like:
   
      Allow the installation of apps from unknown sources
      
   This is a one-time step. Once the box has been checked, it stays checked.

2) Copy the ``apk`` file to your device. There are a number of ways to do this:

   * The easiest way may be to email it to yourself as a file attachment so
     that it will go to the email on your Android device.

   * Another option is to save the file in Dropbox on your computer, and
     then wait for it to show up in Dropbox on your Android device.

   * Another option is to connect your Android device to your computer via
     a USB cable, and then to copy the file to it in the same way that
     you'd copy a file to a thumb drive.

3) Tap the ``brltty-latest.apk`` file to start its installation, and answer any
   prompts. If you use the Dropbox method, you might need to tap on the file
   twice - once to download it, and a second time to install it.

4) Tap ``OK`` when installation is complete.

Building BRLTTY
===============

Preparing Your Host Environment
-------------------------------

BRLTTY is currently being built using:

* Version |SDK build tools version| of the Android SDK build tools.
* Version |NDK version| of the Android NDK.
* Version |JDK version| of OpenJDK.

You need the Android SDK (Software Development Kit) for:

* installing an application onto your device
* removing an application from your device

You can get it from `The Android SDK Web Page`_.

You need the Android NDK (Native Development Kit) if you want to do your own
builds. You can get it from `The Android NDK Web Page`_.

The SDK initially only includes support for the current Android API
(Application Programming Interface) level. BRLTTY, however, needs to support
earlier API levels so that it can run on older releases of Android. Support for
any missing API levels is added whenever the SDK is updated. To do this, use
the following command::

  android update sdk -u

The ``-u`` option, which is the short form of the ``--no-ui`` option, means to
bypass the graphical interface.

There may be password prompts for installing packages that are provided by
various vendours. Any of these can be easily skipped.

The 64-bit versions of the SDK and NDK depend on 32-bit system libraries. If
you're using a 64-bit version then you need to first ensure that these are
installed on your system. This at least includes:

* libc6 (or glibc)
* libz (or zlib)
* libstdc++6 (or libstdc++)
* libncurses

If you're using a modern Debian GNU/Linux system (``Wheezy`` or later), you can
install these packages for a foreign architecture (in this case, i386) with the
following commands (as root)::

   dpkg --add-architecture i386
   apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386 libc6:i386

Installing and Preparing the BRLTTY Source Tree
-----------------------------------------------

Choose the directory that should contain BRLTTY's source tree (which needn't
yet exist). Then extract the latest BRLTTY source into it with the following
command::

   git clone https://github.com/brltty/brltty.git /path/to/brltty

The directory operand (of ``git clone``) is optional. If you don't specify it
then the directory named ``brltty`` within the current working directory is
assumed.

Next, you need to prepare the source tree. This is done as follows::

   cd /path/to/brltty
   ./autogen

At this point, the source tree is essentially just like what you'd get were you
to unpack an officially released BRLTTY archive. It doesn't yet know anything
about the specifics of your system. It also doesn't yet know anything about the
platform you intend to build BRLTTY for.

Adding information to BRLTTY's source tree regarding the specifics of your
system, as well as of your intent to build BRLTTY for Android, is done as
follows::

   export ANDROID_NDK=/path/to/Android/NDK
   ./cfg-android -q

The ``-q`` option, which is the short form of the ``configure`` command's 
``--quiet`` option, means to not display any progress information (there's 
usually quite a lot of it) - only warnings and errors are displayed.

All of the options you give to the ``cfg-android`` command are passed directly
through to the ``configure`` command. So, while ``cfg-android`` supplies a
default set of options to ``configure``, it's easy for you to do your own
customization.

Building BRLTTY for Android
---------------------------

In order to be able to build an Android application, a number of Android build
tools need to be added to your command search path. This is done via the
following command::

   export PATH="/path/to/Android/SDK/tools:/path/to/Android/SDK/platform-tools:$PATH"

The final step is to build the BRLTTY service for Android. This is done as
follows::

   cd /path/to/brltty/Android/Application
   make -s

The ``-s`` option of the ``make`` command, which is short for its ``--silent``
option, means to not display any progress information (there's usually quite a
lot of it) - only warnings and errors are displayed.

The result of the build is the file ``BRLTTY_App-debug.apk``. It will be in the
``bin/`` subdirectory of BRLTTY's Android Application directory::

   /path/to/brltty/Android/Application/bin/BRLTTY_App-debug.apk

``apk`` is the file extension used for an installable Android package.

Preparing Your Android Device
-----------------------------

You need ``USB Debugging`` to be enabled. This is done from the ``Developer
Options`` screen. You can get to it from the ``Settings`` screen.

Launch the ``Settings`` application, and look, near the bottom, for ``Developer
Options``. If you can't find it, the most likely cause is a new feature that
was introduced in Android 4.2 (Jelly Bean). If you need to enable it, tap on
``About Phone``, which, again, can be found near the bottom of the ``Settings``
screen. Then, on the ``About Phone`` screen, look for the ``Build Number``
line. Tap on ``Build Number`` seven times and your device will officially
declare you to be a developer. You should then be able to find ``Developer
Options`` on the ``Settings`` screen.

There's a check box at the top-right of the ``Developer Options`` screen. It
needs to be checked so that all of the other controls on that screen will be
enabled. After doing that, check the ``USB Debugging`` check box (which can be
found within the ``Debugging`` section). This enables the ``adb`` (Android
Debug Bridge) tool to perform functions on your Android device.

Installing BRLTTY on Your Android Device
----------------------------------------

In order to install BRLTTY onto your device, or to remove it from your device,
you need to be in BRLTTY's Android Application directory::

   cd /path/to/brltty/Android/Application

You also need to connect your device to your host via USB.

To install BRLTTY, use this command::

   make -s install

To remove BRLTTY, use this command::

   make -s uninstall

The ``make install`` command will fail if BRLTTY is already installed. If
you're wanting to upgrade BRLTTY, however, then removing it first is probably
what you don't want to be doing. This is because removing BRLTTY also causes
its settings to be lost. What you should do instead is reinstall it. You can do
this with the following command::

   make -s reinstall

If you've obtained your Android package file (``apk``) for BRLTTY from some
other source (than building it for yourself), then it may have a different name
than the make file is expecting. It's useful, therefore, to know what the
actual host commands are for installing and removing Android applications.

The host command for installing an Android application is::

   adb install /path/to/file

The host command for reinstalling an Android application is::

   adb install -r /path/to/file

The host command for removing an Android application is::

   adb uninstall application.package.name

So, to remove BRLTTY, the host command is::

   adb uninstall org.a11y.brltty.android

If any of these ``make`` or ``adb`` commands fails with an error like ``device 
not found``, it's probably because your host's USB device permissions are 
requiring root access. The solution to this problem is to restart the ``adb``
server such that it is running as root. With this done, you yourself will still
be able to use ``adb`` as a regular user.

The commands to restart the ``adb`` server such that it's running as root are
as follows::

   su
   cd /path/to/Android/SDK/platform-tools
   ./adb kill-server
   ./adb start-server
   exit

