summaryrefslogtreecommitdiff
path: root/display/BrailleInputEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'display/BrailleInputEvent.java')
-rw-r--r--display/BrailleInputEvent.java300
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();
+ }
+}