// Touch
  @Override
  public boolean onTouch(View view, MotionEvent event) {
    int eventCase = event.getAction() & MotionEvent.ACTION_MASK;
    if (eventCase == MotionEvent.ACTION_DOWN) {
      // keep track of where on the button we originally pressed in order
      // to tell if we've swiped
      touchX = event.getX();
    } else {
      if (eventCase == MotionEvent.ACTION_CANCEL) {
        return true;
      }

      float distanceFromTouchX = Math.abs(touchX - event.getX());

      // if we release our click without swiping much
      if (eventCase == MotionEvent.ACTION_UP) {
        if (distanceFromTouchX < DRAG_THRESHOLD_X) {
          onClick(view);
          view.performClick();
          return true;
        } else {
          return true;
        }
      }
      // if we swipe our a certain amount either left or right
      else if (eventCase == MotionEvent.ACTION_MOVE) {
        if (distanceFromTouchX > DRAG_THRESHOLD_X) {
          WordTrain entry = m_section.WordEntry(m_id);

          // if swipe right
          if (touchX < event.getX()) {
            entry.SetScore(DataTrainWord.TRAIN_LEVELS - 1);
          } else { // swipe left
            entry.SetScore(0);
          }

          // update the color on the view
          m_color_level = entry.Score();
          TextView view_score = (TextView) view.findViewById(R.id.score);
          updateViewColor(view_score);

          view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
          return true;
        }
      }
    }
    return true;
  }