- ~~~~~~~~~~~~~~~~~
- 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 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 within the system navigation area.
- 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 area isn't rendered via software.
- * An application has chosen to hide the system navigation area.
- 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-serv