@Override
  public void onSaveInstanceState(Bundle outState) {

    // save the adapter data
    if (mAdapter != null && mAdapter.mPlaylists != null) {
      outState.putParcelableArrayList(
          STATE_ADAPTER_DATA, new ArrayList<Parcelable>(mAdapter.mPlaylists));
    }

    // save the task state
    final AuthorizeTask authTask = mAuthorizeTask;
    if (mIsAuthTaskRunning
        || (authTask != null && authTask.getStatus() != AsyncTask.Status.FINISHED)) {
      if (authTask != null) authTask.cancel(true);

      outState.putBoolean(STATE_AUTH_TASK_RUNNING, true);
      mAuthorizeTask = null;
    }

    final UserPlaylistsTask userPlsTask = mUserPlaylistsTask;
    if (userPlsTask != null && userPlsTask.getStatus() != AsyncTask.Status.FINISHED) {
      userPlsTask.cancel(true);

      outState.putBoolean(STATE_USER_PLAYLISTS_TASK_RUNNING, true);
      mUserPlaylistsTask = null;
    }

    final CreatePlaylistTask createPlsTask = mCreatePlaylistTask;
    if (createPlsTask != null && createPlsTask.getStatus() != AsyncTask.Status.FINISHED) {
      createPlsTask.cancel(true);

      outState.putBoolean(STATE_CREATE_PLAYLIST_TASK_RUNNING, true);
      outState.putStringArrayList(STATE_CREATE_PLAYLIST_IDS, createPlsTask.mSongIds);
      outState.putInt(STATE_CREATE_PLAYLIST_INDEX, createPlsTask.mFetchCount.get());
      outState.putParcelable(STATE_CREATE_PLAYLIST_CHOSEN, createPlsTask.mChosenPlaylist);
      mCreatePlaylistTask = null;
    }

    mSavedState = outState;

    super.onSaveInstanceState(outState);
  }
  private boolean isUserPlaylistsTaskRunning() {
    if (mUserPlaylistsTask != null && mUserPlaylistsTask.getStatus() != AsyncTask.Status.FINISHED)
      return true;

    return false;
  }