@Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
      case KeyEvent.KEYCODE_ENTER:
        if (mNameChangeListener != null) {
          String name = getText().toString().trim();
          if (!TextUtils.isEmpty(name)) {
            // use new name
            setText(name);
            mNameChangeListener.onNameChanged(name);

          } else {
            // use original name
            setText(mOriginalName);
          }
          clearFocus();

          // hide the keyboard
          mInputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
          return true;
        }
        break;
      default:
        break;
    }
    return super.onKeyUp(keyCode, event);
  }
  @Override
  protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
    if (!focused && mNameChangeListener != null) {
      String name = getText().toString().trim();
      if (!TextUtils.isEmpty(name)) {
        // use new name
        setText(name);
        mNameChangeListener.onNameChanged(name);

      } else {
        // use original name
        setText(mOriginalName);
      }

      // hide the keyboard
      mInputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
    } else if (focused) {
      mOriginalName = getText().toString();
    }
  }