| ~~~~~~~~~~~~~~~~~ | |
| 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 | |