| /* |
| * 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(); |
| } |
| } |