/brailler/src/com/google/marvin/brailler/BraillerView.java

http://eyes-free.googlecode.com/ · Java · 245 lines · 219 code · 15 blank · 11 comment · 191 complexity · a3291b39d0a1526181c5a40ecfbcd8b3 MD5 · raw file

  1. package com.google.marvin.brailler;
  2. import android.content.Context;
  3. import android.os.Vibrator;
  4. import android.view.MotionEvent;
  5. import android.view.View;
  6. /**
  7. * Custom View that implements the Brailler
  8. *
  9. * @author clchen@google.com (Charles L. Chen)
  10. */
  11. public class BraillerView extends View {
  12. private static final long[] PATTERN = {0, 1, 40, 41};
  13. private boolean dot1;
  14. private boolean dot2;
  15. private boolean dot3;
  16. private boolean dot4;
  17. private boolean dot5;
  18. private boolean dot6;
  19. private Brailler parent;
  20. private Vibrator vibe;
  21. public BraillerView(Context context) {
  22. super(context);
  23. parent = (Brailler) context;
  24. vibe = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
  25. dot1 = false;
  26. dot2 = false;
  27. dot3 = false;
  28. dot4 = false;
  29. dot5 = false;
  30. dot6 = false;
  31. setClickable(true);
  32. setFocusable(true);
  33. setFocusableInTouchMode(true);
  34. requestFocus();
  35. }
  36. @Override
  37. public boolean onTouchEvent(MotionEvent event) {
  38. // Ignore any events that involve the user going off the edge of the screen
  39. int edgeFlags = event.getEdgeFlags();
  40. if ((edgeFlags == MotionEvent.EDGE_BOTTOM) || (edgeFlags == MotionEvent.EDGE_LEFT)
  41. || (edgeFlags == MotionEvent.EDGE_RIGHT) || (edgeFlags == MotionEvent.EDGE_TOP)) {
  42. vibe.vibrate(PATTERN, -1);
  43. return true;
  44. }
  45. int action = event.getAction();
  46. switch (action) {
  47. case MotionEvent.ACTION_UP:
  48. processInput();
  49. break;
  50. default:
  51. float x = event.getX();
  52. float y = event.getY();
  53. if (x < (getWidth() * .4)) {
  54. if (y < (getHeight() * .25)) {
  55. if (!dot1) {
  56. parent.tts.speak("[tock]", 0, null);
  57. vibe.vibrate(PATTERN, -1);
  58. }
  59. dot1 = true;
  60. } else if (y < (getHeight() * .375)) {
  61. //Nothing - alley
  62. } else if (y < (getHeight() * .625)) {
  63. if (!dot2) {
  64. parent.tts.speak("[tock]", 0, null);
  65. vibe.vibrate(PATTERN, -1);
  66. }
  67. dot2 = true;
  68. } else if (y < (getHeight() * .75)) {
  69. //Nothing - alley
  70. } else {
  71. if (!dot3) {
  72. parent.tts.speak("[tock]", 0, null);
  73. vibe.vibrate(PATTERN, -1);
  74. }
  75. dot3 = true;
  76. }
  77. } else if (x < (getWidth() * .6)) {
  78. //Nothing - alley
  79. } else {
  80. if (y < (getHeight() * .25)) {
  81. if (!dot4) {
  82. parent.tts.speak("[tock]", 0, null);
  83. vibe.vibrate(PATTERN, -1);
  84. }
  85. dot4 = true;
  86. } else if (y < (getHeight() * .375)) {
  87. //Nothing - alley
  88. } else if (y < (getHeight() * .625)) {
  89. if (!dot5) {
  90. parent.tts.speak("[tock]", 0, null);
  91. vibe.vibrate(PATTERN, -1);
  92. }
  93. dot5 = true;
  94. } else if (y < (getHeight() * .75)) {
  95. //Nothing - alley
  96. } else {
  97. if (!dot6) {
  98. parent.tts.speak("[tock]", 0, null);
  99. vibe.vibrate(PATTERN, -1);
  100. }
  101. dot6 = true;
  102. }
  103. }
  104. break;
  105. }
  106. return true;
  107. }
  108. private void processInput() {
  109. parent.tts.speak(letterFromBraille(), 0, null);
  110. dot1 = false;
  111. dot2 = false;
  112. dot3 = false;
  113. dot4 = false;
  114. dot5 = false;
  115. dot6 = false;
  116. }
  117. private String letterFromBraille() {
  118. if ( dot1 && !dot4 &&
  119. !dot2 && !dot5 &&
  120. !dot3 && !dot6 ) {
  121. return "a";
  122. }
  123. if (dot1 && !dot4 && dot2 && !dot5 && !dot3 && !dot6) {
  124. return "b";
  125. }
  126. if (dot1 && dot4 && !dot2 && !dot5 && !dot3 && !dot6) {
  127. return "c";
  128. }
  129. if (dot1 && dot4 && !dot2 && dot5 && !dot3 && !dot6) {
  130. return "d";
  131. }
  132. if (dot1 && !dot4 && !dot2 && dot5 && !dot3 && !dot6) {
  133. return "e";
  134. }
  135. if (dot1 && dot4 && dot2 && !dot5 && !dot3 && !dot6) {
  136. return "f";
  137. }
  138. if (dot1 && dot4 && dot2 && dot5 && !dot3 && !dot6) {
  139. return "g";
  140. }
  141. if (dot1 && !dot4 && dot2 && dot5 && !dot3 && !dot6) {
  142. return "h";
  143. }
  144. if (!dot1 && dot4 && dot2 && !dot5 && !dot3 && !dot6) {
  145. return "i";
  146. }
  147. if (!dot1 && dot4 && dot2 && dot5 && !dot3 && !dot6) {
  148. return "j";
  149. }
  150. if (dot1 && !dot4 && !dot2 && !dot5 && dot3 && !dot6) {
  151. return "k";
  152. }
  153. if ( dot1 && !dot4 &&
  154. dot2 && !dot5 &&
  155. dot3 && !dot6 ) {
  156. return "l";
  157. }
  158. if ( dot1 && dot4 &&
  159. !dot2 && !dot5 &&
  160. dot3 && !dot6 ) {
  161. return "m";
  162. }
  163. if ( dot1 && dot4 &&
  164. !dot2 && dot5 &&
  165. dot3 && !dot6 ) {
  166. return "n";
  167. }
  168. if ( dot1 && !dot4 &&
  169. !dot2 && dot5 &&
  170. dot3 && !dot6 ) {
  171. return "o";
  172. }
  173. if ( dot1 && dot4 &&
  174. dot2 && !dot5 &&
  175. dot3 && !dot6 ) {
  176. return "p";
  177. }
  178. if ( dot1 && dot4 &&
  179. dot2 && dot5 &&
  180. dot3 && !dot6 ) {
  181. return "q";
  182. }
  183. if ( dot1 && !dot4 &&
  184. dot2 && dot5 &&
  185. dot3 && !dot6 ) {
  186. return "r";
  187. }
  188. if (!dot1 && dot4 &&
  189. dot2 && !dot5 &&
  190. dot3 && !dot6 ) {
  191. return "s";
  192. }
  193. if (!dot1 && dot4 &&
  194. dot2 && dot5 &&
  195. dot3 && !dot6 ) {
  196. return "t";
  197. }
  198. if ( dot1 && !dot4 &&
  199. !dot2 && !dot5 &&
  200. dot3 && dot6 ) {
  201. return "u";
  202. }
  203. if ( dot1 && !dot4 &&
  204. dot2 && !dot5 &&
  205. dot3 && dot6 ) {
  206. return "v";
  207. }
  208. if (!dot1 && dot4 &&
  209. dot2 && dot5 &&
  210. !dot3 && dot6 ) {
  211. return "w";
  212. }
  213. if ( dot1 && dot4 &&
  214. !dot2 && !dot5 &&
  215. dot3 && dot6 ) {
  216. return "x";
  217. }
  218. if ( dot1 && dot4 &&
  219. !dot2 && dot5 &&
  220. dot3 && dot6 ) {
  221. return "y";
  222. }
  223. if ( dot1 && !dot4 &&
  224. !dot2 && dot5 &&
  225. dot3 && dot6 ) {
  226. return "z";
  227. }
  228. return "";
  229. }
  230. }