@Override
  public void onClick(View v) {
    if (null == mAdapter) {
      return;
    }

    if (v == mCancel) {
      finish();
    } else if (v == mOk) {
      StringBuilder sb = new StringBuilder();
      int i = -1;
      boolean first = true;
      for (boolean[] selections : mSelections) {
        for (boolean b : selections) {
          i++;
          if (i == 0) {
            continue;
          }
          if (b) {
            if (!first) {
              sb.append("x");
            } else {
              first = false;
            }
            sb.append(LANGUAGES[i - 1]);
          }
        }
      }

      String excludedLanguages = sb.toString();
      Settings.putExcludedLanguages(excludedLanguages);
      finish();
    } else if (v == mSelectAll) {
      for (boolean[] selections : mSelections) {
        int length = selections.length;
        for (int i = 0; i < length; i++) {
          selections[i] = true;
        }
      }
      mAdapter.notifyDataSetChanged();
    } else if (v == mDeselectAll) {
      for (boolean[] selections : mSelections) {
        int length = selections.length;
        for (int i = 0; i < length; i++) {
          selections[i] = false;
        }
      }
      mAdapter.notifyDataSetChanged();
    } else if (v == mInvertSelection) {
      for (boolean[] selections : mSelections) {
        int length = selections.length;
        for (int i = 0; i < length; i++) {
          selections[i] = !selections[i];
        }
      }
      mAdapter.notifyDataSetChanged();
    }
  }