@Override
  public void onLoaderResult(final int id, final Object result) {
    super.onLoaderResult(id, result);

    if (id == getLoaderHelper().getLoaderId(LOADER_USERS)) {
      getLoaderHelper().removeLoaderFromRunningLoaders(id);

      setUserSearchResult((UsersSearchResult) result);
    } else if (id == getLoaderHelper().getLoaderId(LOADER_USER_HAS_DATA)) {
      getLoaderHelper().destroyAsyncLoader(id);

      final UserDataResult userDataResult = (UserDataResult) result;

      if (userDataResult.isHasImages()) {
        final User user = userDataResult.getUser();
        final Fragment parentFragment = getParentFragment();
        final Activity activity = getActivity();
        if (parentFragment instanceof OnUserSelectedListener) {
          ((OnUserSelectedListener) parentFragment).onUserSelected(user);
        } else if (activity instanceof OnUserSelectedListener) {
          ((OnUserSelectedListener) activity).onUserSelected(user);
        } else {
          Log.e(
              UserSelectionFragment.class.getSimpleName(), "user selected, but no listener found");
        }
      } else if (userDataResult.isDataViewAllowed()) {
        getActionBarActivity().showToast(R.string.error_user_no_images, Gravity.CENTER);
      } else {
        getActionBarActivity().showToast(R.string.error_not_allowed, Gravity.CENTER);
      }
    }
  }
  @Override
  public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.user_account_selection, menu);

    initSearchView(menu.findItem(R.id.menu_search));
  }
  @Override
  public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    if (null != mResultPath) {
      inflater.inflate(R.menu.collage_preview, menu);
    }
  }
  @Override
  public void onLoaderResult(final int id, final Object result) {
    super.onLoaderResult(id, result);

    if (id == getLoaderHelper().getLoaderId(KOLAJ_PREVIEW_LOADER)) {
      getLoaderHelper().removeLoaderFromRunningLoaders(id);

      setResultPath((String) result);
    }
  }
  @Override
  public void onLoaderError(final int id, final Exception exception) {
    super.onLoaderError(id, exception);

    if (id == getLoaderHelper().getLoaderId(KOLAJ_PREVIEW_LOADER)
        && exception instanceof CollageCreationException) {
      final FragmentManager fm = getFragmentManager();
      fm.beginTransaction()
          .add(new CollageCreationProblemMessageFragment(), CREATION_PROBLEM_FRAGMENT)
          .commitAllowingStateLoss();
    }
  }
  @Override
  public void onViewCreated(final View view, final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    // we should check if there is no big errors in previous image creation
    if (null == getFragmentManager().findFragmentByTag(CREATION_PROBLEM_FRAGMENT)) {
      // we should check if we already create image or not
      if (null == mResultPath) {
        getLoaderHelper()
            .initAsyncLoader(
                getLoaderHelper().getLoaderId(KOLAJ_PREVIEW_LOADER),
                new CollagePreviewCreatorLoader(getActivity(), mCollageFillData));
      } else {
        setResultPath(mResultPath);
      }
    }
  }
  @Override
  public void onViewCreated(final View view, final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mUserAccountsListView.setOnItemClickListener(
        new AdapterView.OnItemClickListener() {

          private User mPrevSelectedUser;

          @Override
          public void onItemClick(
              final AdapterView<?> parent, final View view, final int position, final long id) {
            final User user = mUsersAdapter.getItem(position);
            if (mPrevSelectedUser == user) {
              getLoaderHelper()
                  .initAsyncLoader(
                      getLoaderHelper().getLoaderId(LOADER_USER_HAS_DATA),
                      new UserDataLoader(getActivity(), user));
            } else {
              mPrevSelectedUser = user;
              getLoaderHelper()
                  .restartAsyncLoader(
                      getLoaderHelper().getLoaderId(LOADER_USER_HAS_DATA),
                      new UserDataLoader(getActivity(), user));
            }
          }
        });

    if (getLoaderHelper().hasLoader(getLoaderHelper().getLoaderId(LOADER_USERS))) {
      getLoaderHelper().initAsyncLoader(getLoaderHelper().getLoaderId(LOADER_USERS), null);
    } else if (null != mSearchString) {
      onUserNickSelected(mSearchString);
    } else {
      getActionBarActivity().getSupportActionBar().setTitle(R.string.title_user_nick_selection);
    }
  }