gt:                             maxScore = result.getScore();
context: /* == This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
   *
   *   Copyright 2014, Enno Gottschalk <mrmaffen@googlemail.com>
   *
   *   Tomahawk is free software: you can redistribute it and/or modify
   *   it under the terms of the GNU General Public License as published by
   *   the Free Software Foundation, either version 3 of the License, or
   *   (at your option) any later version.
   *
   *   Tomahawk is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *   GNU General Public License for more details.
   *
   *   You should have received a copy of the GNU General Public License
   *   along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
   */
  package org.tomahawk.tomahawk_android.fragments;
  
  import org.tomahawk.libtomahawk.collection.Album;
  import org.tomahawk.libtomahawk.collection.Artist;
  import org.tomahawk.libtomahawk.collection.Image;
  import org.tomahawk.libtomahawk.collection.Playlist;
  import org.tomahawk.libtomahawk.infosystem.InfoRequestData;
  import org.tomahawk.libtomahawk.infosystem.InfoSystem;
  import org.tomahawk.libtomahawk.infosystem.User;
  import org.tomahawk.libtomahawk.infosystem.hatchet.Search;
  import org.tomahawk.libtomahawk.infosystem.hatchet.SearchResult;
  import org.tomahawk.libtomahawk.resolver.PipeLine;
  import org.tomahawk.libtomahawk.resolver.Query;
  import org.tomahawk.tomahawk_android.R;
  import org.tomahawk.tomahawk_android.activities.TomahawkMainActivity;
  import org.tomahawk.tomahawk_android.utils.FragmentInfo;
  import org.tomahawk.tomahawk_android.utils.IdGenerator;
  import org.tomahawk.tomahawk_android.utils.ThreadManager;
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.net.ConnectivityManager;
  import android.os.Bundle;
  import android.view.View;
  
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.List;
  import java.util.Set;
  import java.util.concurrent.ConcurrentHashMap;
  
  public class SearchPagerFragment extends PagerFragment {
  
      private String mCurrentQueryString;
  
      protected final Set<Query> mCorrespondingQueries
              = Collections.newSetFromMap(new ConcurrentHashMap<Query, Boolean>());
  
      private final ArrayList<String> mAlbumIds = new ArrayList<>();
  
      private final ArrayList<String> mArtistIds = new ArrayList<>();
  
      private final ArrayList<String> mUserIds = new ArrayList<>();
  
      private Playlist mTrackResultPlaylist =
              Playlist.fromEmptyList(IdGenerator.getSessionUniqueStringId(), "");
  
      private SearchFragmentReceiver mSearchFragmentReceiver;
  
      private boolean mIsFirstBroadcast;
  
      /**
       * Handles incoming broadcasts.
       */
      private class SearchFragmentReceiver extends BroadcastReceiver {
  
          @Override
          public void onReceive(Context context, Intent intent) {
              if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
                  boolean noConnectivity =
                          intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                  if (!noConnectivity && !mIsFirstBroadcast) {
                      resolveFullTextQuery(mCurrentQueryString);
                  }
                  mIsFirstBroadcast = false;
              }
          }
      }
  
      @SuppressWarnings("unused")
      public void onEventMainThread(PipeLine.ResultsEvent event) {
          if (mCorrespondingQueries.contains(event.mQuery)) {
              mTrackResultPlaylist = event.mQuery.getResultPlaylist();
              updatePager();
          }
      }
  
      /**
       * Restore the {@link String} inside the search {@link android.widget.TextView}. Either through
       * the savedInstanceState {@link Bundle} or through the a {@link Bundle} provided in the
       * Arguments.
       */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          if (savedInstanceState != null
                  && savedInstanceState.containsKey(TomahawkFragment.QUERY_STRING)
                  && savedInstanceState.getString(TomahawkFragment.QUERY_STRING) != null) {
              mCurrentQueryString = savedInstanceState.getString(
                      TomahawkFragment.QUERY_STRING);
          }
      }
  
  
      /**
       * Called, when this {@link SearchPagerFragment}'s {@link android.view.View} has been created
       */
      @Override
      public void onViewCreated(View view, Bundle savedInstanceState) {
          super.onViewCreated(view, savedInstanceState);
  
          int initialPage = -1;
          if (getArguments() != null) {
              if (getArguments().containsKey(TomahawkFragment.CONTAINER_FRAGMENT_PAGE)) {
                  initialPage = getArguments().getInt(TomahawkFragment.CONTAINER_FRAGMENT_PAGE);
              }
              if (getArguments().containsKey(TomahawkFragment.QUERY_STRING)
                      && getArguments().getString(TomahawkFragment.QUERY_STRING) != null) {
                  mCurrentQueryString = getArguments().getString(
                          TomahawkFragment.QUERY_STRING);
              }
          }
  
          // If we have restored a CurrentQueryString, start searching, so that we show the proper
          // results again
          if (mCurrentQueryString != null) {
              resolveFullTextQuery(mCurrentQueryString);
              getActivity().setTitle(mCurrentQueryString);
          }
  
          showContentHeader(null);
  
          updatePager(initialPage);
      }
  
      @Override
      public void onStart() {
          super.onStart();
  
          // Initialize and register Receiver
          if (mSearchFragmentReceiver == null) {
              mIsFirstBroadcast = true;
              mSearchFragmentReceiver = new SearchFragmentReceiver();
              IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
              getActivity().registerReceiver(mSearchFragmentReceiver, intentFilter);
          }
      }
  
      @Override
      public void onPause() {
          super.onPause();
  
          for (Query query : mCorrespondingQueries) {
              if (ThreadManager.get().stop(query)) {
                  mCorrespondingQueries.remove(query);
              }
          }
      }
  
      @Override
      public void onStop() {
          super.onStop();
  
          if (mSearchFragmentReceiver != null) {
              getActivity().unregisterReceiver(mSearchFragmentReceiver);
              mSearchFragmentReceiver = null;
          }
      }
  
      /**
       * Save the {@link String} inside the search {@link android.widget.TextView}.
       */
      @Override
      public void onSaveInstanceState(Bundle out) {
          out.putString(TomahawkFragment.QUERY_STRING, mCurrentQueryString);
          super.onSaveInstanceState(out);
      }
  
      private void updatePager() {
          updatePager(-1);
      }
  
      private void updatePager(int initialPage) {
          List<FragmentInfoList> fragmentInfoLists = new ArrayList<>();
          FragmentInfoList fragmentInfoList = new FragmentInfoList();
          FragmentInfo fragmentInfo = new FragmentInfo();
          fragmentInfo.mClass = PlaylistEntriesFragment.class;
          fragmentInfo.mTitle = getString(R.string.songs);
          fragmentInfo.mBundle = getChildFragmentBundle();
          if (mTrackResultPlaylist != null) {
              fragmentInfo.mBundle.putString(
                      TomahawkFragment.PLAYLIST, mTrackResultPlaylist.getCacheKey());
          }
          fragmentInfoList.addFragmentInfo(fragmentInfo);
          fragmentInfoLists.add(fragmentInfoList);
  
          fragmentInfoList = new FragmentInfoList();
          fragmentInfo = new FragmentInfo();
          fragmentInfo.mClass = ArtistsFragment.class;
          fragmentInfo.mTitle = getString(R.string.artists);
          fragmentInfo.mBundle = getChildFragmentBundle();
          fragmentInfo.mBundle.putStringArrayList(TomahawkFragment.ARTISTARRAY, mArtistIds);
          fragmentInfoList.addFragmentInfo(fragmentInfo);
          fragmentInfoLists.add(fragmentInfoList);
  
          fragmentInfoList = new FragmentInfoList();
          fragmentInfo = new FragmentInfo();
          fragmentInfo.mClass = AlbumsFragment.class;
          fragmentInfo.mTitle = getString(R.string.albums);
          fragmentInfo.mBundle = getChildFragmentBundle();
          fragmentInfo.mBundle.putStringArrayList(TomahawkFragment.ALBUMARRAY, mAlbumIds);
          fragmentInfoList.addFragmentInfo(fragmentInfo);
          fragmentInfoLists.add(fragmentInfoList);
  
          fragmentInfoList = new FragmentInfoList();
          fragmentInfo = new FragmentInfo();
          fragmentInfo.mClass = UsersFragment.class;
          fragmentInfo.mTitle = getString(R.string.users);
          fragmentInfo.mBundle = getChildFragmentBundle();
          fragmentInfo.mBundle.putStringArrayList(TomahawkFragment.USERARRAY, mUserIds);
          fragmentInfoList.addFragmentInfo(fragmentInfo);
          fragmentInfoLists.add(fragmentInfoList);
  
          setupPager(fragmentInfoLists, initialPage, null, 1);
      }
  
      /**
       * Invoke the resolving process with the given fullTextQuery {@link String}
       */
      public void resolveFullTextQuery(String fullTextQuery) {
          ((TomahawkMainActivity) getActivity()).closeDrawer();
          mTrackResultPlaylist = Playlist.fromEmptyList(IdGenerator.getSessionUniqueStringId(), "");
          mAlbumIds.clear();
          mArtistIds.clear();
          mUserIds.clear();
          mCurrentQueryString = fullTextQuery;
          mCorrespondingRequestIds.clear();
          String requestId = InfoSystem.get().resolve(fullTextQuery);
          if (requestId != null) {
              mCorrespondingRequestIds.add(requestId);
          }
          Query query = PipeLine.get().resolve(fullTextQuery, false);
          if (query != null) {
              mCorrespondingQueries.clear();
              mCorrespondingQueries.add(query);
          }
      }
  
      @Override
      protected void onInfoSystemResultsReported(InfoRequestData infoRequestData) {
          if (mCorrespondingRequestIds.contains(infoRequestData.getRequestId())) {
              List<Search> results = infoRequestData.getResultList(Search.class);
              if (results != null && results.size() > 0) {
                  Search search = results.get(0);
                  float maxScore = 0f;
                  Image contentHeaderImage = null;
                  for (SearchResult result : search.getSearchResults()) {
                      Object resultObject = result.getResult();
                      if (resultObject instanceof Artist) {
                          Artist artist = (Artist) resultObject;
                          mArtistIds.add(artist.getCacheKey());
                          if (artist.getImage() != null && result.getScore() > maxScore) {
                              maxScore = result.getScore();
                              contentHeaderImage = artist.getImage();
                          }
                      } else if (resultObject instanceof Album) {
                          Album album = (Album) resultObject;
                          mAlbumIds.add(album.getCacheKey());
                          if (album.getImage() != null && result.getScore() > maxScore) {
  