diff options
Diffstat (limited to 'display/BrailleInputEvent.java')
-rw-r--r-- | display/BrailleInputEvent.java | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/display/BrailleInputEvent.java b/display/BrailleInputEvent.java new file mode 100644 index 0000000..1c2ffb4 --- /dev/null +++ b/display/BrailleInputEvent.java @@ -0,0 +1,300 @@ +/* + * Copyright (C) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.googlecode.eyesfree.braille.display; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.SparseArray; + +import java.util.HashMap; + +/** + * An input event, originating from a braille display. + * + * An event contains a command that is a high-level representation of the + * key or key combination that was pressed on the display such as a + * navigation key or braille keyboard combination. For some commands, there is + * also an integer argument that contains additional information. + */ +public class BrailleInputEvent implements Parcelable { + + // Movement commands. + + /** Keyboard command: Used when there is no actual command. */ + public static final int CMD_NONE = -1; + + /** Keyboard command: Navigate upwards. */ + public static final int CMD_NAV_LINE_PREVIOUS = 1; + /** Keyboard command: Navigate downwards. */ + public static final int CMD_NAV_LINE_NEXT = 2; + /** Keyboard command: Navigate left one item. */ + public static final int CMD_NAV_ITEM_PREVIOUS = 3; + /** Keyboard command: Navigate right one item. */ + public static final int CMD_NAV_ITEM_NEXT = 4; + /** Keyboard command: Navigate one display window to the left. */ + public static final int CMD_NAV_PAN_LEFT = 5; + /** Keyboard command: Navigate one display window to the right. */ + public static final int CMD_NAV_PAN_RIGHT = 6; + /** Keyboard command: Navigate to the top or beginning. */ + public static final int CMD_NAV_TOP = 7; + /** Keyboard command: Navigate to the bottom or end. */ + public static final int CMD_NAV_BOTTOM = 8; + + // Activation commands. + + /** Keyboard command: Activate the currently selected/focused item. */ + public static final int CMD_ACTIVATE_CURRENT = 20; + + // Scrolling. + + /** Keyboard command: Scroll backward. */ + public static final int CMD_SCROLL_BACKWARD = 30; + /** Keyboard command: Scroll forward. */ + public static final int CMD_SCROLL_FORWARD = 31; + + // Selection commands. + + /** Keyboard command: Set the start ot the selection. */ + public static final int CMD_SELECTION_START = 40; + /** Keyboard command: Set the end of the selection. */ + public static final int CMD_SELECTION_END = 41; + /** Keyboard command: Select all content of the current field. */ + public static final int CMD_SELECTION_SELECT_ALL = 42; + /** Keyboard command: Cut the content of the selection. */ + public static final int CMD_SELECTION_CUT = 43; + /** Keyboard command: Copy the current selection. */ + public static final int CMD_SELECTION_COPY = 44; + /** + * Keyboard command: Paste the content of the clipboard at the current + * insertion point. + */ + public static final int CMD_SELECTION_PASTE = 45; + + /** + * Keyboard command: Primary routing key pressed, typically + * used to move the insertion point or click/tap on the item + * under the key. + * The argument is the zero-based position, relative to the first cell + * on the display, of the cell that is closed to the key that + * was pressed. + */ + public static final int CMD_ROUTE = 50; + + // Braille keyboard input. + + /** + * Keyboard command: A key combination was pressed on the braille + * keyboard. + * The argument contains the dots that were pressed as a bitmask. + */ + public static final int CMD_BRAILLE_KEY = 60; + + // Editing keys. + + /** Keyboard command: Enter key. */ + public static final int CMD_KEY_ENTER = 70; + /** Keyboard command: Delete backward. */ + public static final int CMD_KEY_DEL = 71; + /** Keyboard command: Delete forward. */ + public static final int CMD_KEY_FORWARD_DEL = 72; + + // Glboal navigation keys. + + /** Keyboard command: Back button. */ + public static final int CMD_GLOBAL_BACK = 90; + /** Keyboard command: Home button. */ + public static final int CMD_GLOBAL_HOME = 91; + /** Keyboard command: Recent apps button. */ + public static final int CMD_GLOBAL_RECENTS = 92; + /** Keyboard command: Show notificaitons. */ + public static final int CMD_GLOBAL_NOTIFICATIONS = 93; + + // Miscelanous commands. + + /** Keyboard command: Invoke keyboard help. */ + public static final int CMD_HELP = 100; + + // Meanings of the argument to a command. + + /** This command doesn't have an argument. */ + public static final int ARGUMENT_NONE = 0; + /** + * The lower order bits of the arguemnt to this command represent braille + * dots. Dot 1 is represented by the rightmost bit and so on until dot 8, + * which is represented by bit 7, counted from the right. + */ + public static final int ARGUMENT_DOTS = 1; + /** + * The argument represents a 0-based position on the display counted from + * the leftmost cell. + */ + public static final int ARGUMENT_POSITION = 2; + + private static final SparseArray<String> CMD_NAMES = + new SparseArray<String>(); + private static final HashMap<String, Integer> NAMES_TO_CMDS + = new HashMap<String, Integer>(); + static { + CMD_NAMES.append(CMD_NAV_LINE_PREVIOUS, "CMD_NAV_LINE_PREVIOUS"); + CMD_NAMES.append(CMD_NAV_LINE_NEXT, "CMD_NAV_LINE_NEXT"); + CMD_NAMES.append(CMD_NAV_ITEM_PREVIOUS, "CMD_NAV_ITEM_PREVIOUS"); + CMD_NAMES.append(CMD_NAV_ITEM_NEXT, "CMD_NAV_ITEM_NEXT"); + CMD_NAMES.append(CMD_NAV_PAN_LEFT, "CMD_NAV_PAN_LEFT"); + CMD_NAMES.append(CMD_NAV_PAN_RIGHT, "CMD_NAV_PAN_RIGHT"); + CMD_NAMES.append(CMD_NAV_TOP, "CMD_NAV_TOP"); + CMD_NAMES.append(CMD_NAV_BOTTOM, "CMD_NAV_BOTTOM"); + CMD_NAMES.append(CMD_ACTIVATE_CURRENT, "CMD_ACTIVATE_CURRENT"); + CMD_NAMES.append(CMD_SCROLL_BACKWARD, "CMD_SCROLL_BACKWARD"); + CMD_NAMES.append(CMD_SCROLL_FORWARD, "CMD_SCROLL_FORWARD"); + CMD_NAMES.append(CMD_SELECTION_START, "CMD_SELECTION_START"); + CMD_NAMES.append(CMD_SELECTION_END, "CMD_SELECTION_END"); + CMD_NAMES.append(CMD_SELECTION_SELECT_ALL, "CMD_SELECTION_SELECT_ALL"); + CMD_NAMES.append(CMD_SELECTION_CUT, "CMD_SELECTION_CUT"); + CMD_NAMES.append(CMD_SELECTION_COPY, "CMD_SELECTION_COPY"); + CMD_NAMES.append(CMD_SELECTION_PASTE, "CMD_SELECTION_PASTE"); + CMD_NAMES.append(CMD_ROUTE, "CMD_ROUTE"); + CMD_NAMES.append(CMD_BRAILLE_KEY, "CMD_BRAILLE_KEY"); + CMD_NAMES.append(CMD_KEY_ENTER, "CMD_KEY_ENTER"); + CMD_NAMES.append(CMD_KEY_DEL, "CMD_KEY_DEL"); + CMD_NAMES.append(CMD_KEY_FORWARD_DEL, "CMD_KEY_FORWARD_DEL"); + CMD_NAMES.append(CMD_GLOBAL_BACK, "CMD_GLOBAL_BACK"); + CMD_NAMES.append(CMD_GLOBAL_HOME, "CMD_GLOBAL_HOME"); + CMD_NAMES.append(CMD_GLOBAL_RECENTS, "CMD_GLOBAL_RECENTS"); + CMD_NAMES.append(CMD_GLOBAL_NOTIFICATIONS, "CMD_GLOBAL_NOTIFICATIONS"); + CMD_NAMES.append(CMD_HELP, "CMD_HELP"); + for (int i = 0; i < CMD_NAMES.size(); ++i) { + NAMES_TO_CMDS.put(CMD_NAMES.valueAt(i), + CMD_NAMES.keyAt(i)); + } + } + + private final int mCommand; + private final int mArgument; + private final long mEventTime; + + public BrailleInputEvent(int command, int argument, long eventTime) { + mCommand = command; + mArgument = argument; + mEventTime = eventTime; + } + + /** + * Returns the keyboard command that this event represents. + */ + public int getCommand() { + return mCommand; + } + + /** + * Returns the command-specific argument of the event, or zero if the + * command doesn't have an argument. See the individual command constants + * for more details. + */ + public int getArgument() { + return mArgument; + } + + /** + * Returns the approximate time when this event happened as + * returned by {@link android.os.SystemClock#uptimeMillis}. + */ + public long getEventTime() { + return mEventTime; + } + + /** + * Returns a string representation of {@code command}, or the string + * {@code (unknown)} if the command is unknown. + */ + public static String commandToString(int command) { + String ret = CMD_NAMES.get(command); + return ret != null ? ret : "(unknown)"; + } + + /** + * Returns the command corresponding to {@code commandName}, or + * {@link #CMD_NONE} if the name doesn't match any existing command. + */ + public static int stringToCommand(String commandName) { + Integer command = NAMES_TO_CMDS.get(commandName); + if (command == null) { + return CMD_NONE; + } + return command; + } + + /** + * Returns the type of argument for the given {@code command}. + */ + public static int argumentType(int command) { + switch (command) { + case CMD_SELECTION_START: + case CMD_SELECTION_END: + case CMD_ROUTE: + return ARGUMENT_POSITION; + case CMD_BRAILLE_KEY: + return ARGUMENT_DOTS; + default: + return ARGUMENT_NONE; + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("BrailleInputEvent {"); + sb.append("amd="); + sb.append(commandToString(mCommand)); + sb.append(", arg="); + sb.append(mArgument); + sb.append("}"); + return sb.toString(); + } + + // For Parcelable support. + + public static final Parcelable.Creator<BrailleInputEvent> CREATOR = + new Parcelable.Creator<BrailleInputEvent>() { + @Override + public BrailleInputEvent createFromParcel(Parcel in) { + return new BrailleInputEvent(in); + } + + @Override + public BrailleInputEvent[] newArray(int size) { + return new BrailleInputEvent[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mCommand); + out.writeInt(mArgument); + out.writeLong(mEventTime); + } + + private BrailleInputEvent(Parcel in) { + mCommand = in.readInt(); + mArgument = in.readInt(); + mEventTime = in.readLong(); + } +} |