@Override public void onStart() { super.onStart(); TomahawkMainActivity activity = (TomahawkMainActivity) getActivity(); activity.hideActionbar(); EventBus.getDefault().register(this); }
@Override public void onStop() { TomahawkMainActivity activity = (TomahawkMainActivity) getActivity(); activity.showActionBar(false); if (mFromPlaybackFragment) { activity.getPlaybackPanel().hideButtons(); } else { activity.showPlaybackPanel(false); } EventBus.getDefault().unregister(this); super.onStop(); }
@Override public void onViewCreated(final View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); TomahawkMainActivity activity = (TomahawkMainActivity) getActivity(); activity.hideActionbar(); setupCloseButton(view); setupContextMenuItems(view); setupBlurredBackground(view); if (mFromPlaybackFragment) { setupPlaybackTextViews(view, activity.getPlaybackPanel()); activity.getPlaybackPanel().showButtons(); } else { setupTextViews(view); setupAlbumArt(view); activity.hidePlaybackPanel(); } }
/** * Called every time an item inside the {@link * se.emilsjolander.stickylistheaders.StickyListHeadersListView} is clicked * * @param parent The AdapterView where the click happened. * @param view The view within the AdapterView that was clicked (this will be a view provided by * the adapter) * @param position The position of the view in the adapter. * @param id The row id of the item that was clicked. */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Object item; TomahawkMainActivity activity = (TomahawkMainActivity) getActivity(); if (!isShowGridView()) { item = getListAdapter().getItem(position); } else { item = getGridAdapter().getItem(position); } if (item instanceof Query && ((Query) item).isPlayable()) { PlaybackService playbackService = activity.getPlaybackService(); if (playbackService != null && shouldShowPlaystate() && mQueryPositions.get(playbackService.getCurrentPlaylist().getCurrentQueryIndex()) == position) { playbackService.playPause(); } else { UserPlaylist playlist = UserPlaylist.fromQueryList( TomahawkMainActivity.getLifetimeUniqueStringId(), "", mShownQueries, mQueryPositions.keyAt(mQueryPositions.indexOfValue(position))); if (playbackService != null) { playbackService.setCurrentPlaylist(playlist); playbackService.start(); } } } else if (item instanceof Album) { FragmentUtils.replace( getActivity(), getActivity().getSupportFragmentManager(), TracksFragment.class, ((Album) item).getCacheKey(), TomahawkFragment.TOMAHAWK_ALBUM_KEY, mIsLocal); } }
/** * Replaces the {@link Fragment} in the hub with the given hub id and adds it to the backstack, if * isBackAction is false. * * @param fragmentStateHolder {@link FragmentStateHolder} contains all information of the to be * replaced {@link Fragment} * @param isBackAction whether or not the replacement is part of an action going back in the * backstack */ public void replace(FragmentStateHolder fragmentStateHolder, boolean isBackAction) { // Get fragmentsStack for the given (tabs)position FragmentStateHolder currentFragmentStateHolder = getCurrentFragmentStateHolder(); // Replace the fragment using a transaction. FragmentTransaction ft = mFragmentManager.beginTransaction(); if (isBackAction) { mBackstack.remove(currentFragmentStateHolder); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); } else { Fragment currentFragment = null; if (mFragmentManager != null && mFragmentManager.getFragments() != null) { currentFragment = mFragmentManager.findFragmentByTag(FRAGMENT_TAG); } if (currentFragmentStateHolder != null && currentFragment != null && currentFragment instanceof TomahawkFragment) { currentFragmentStateHolder.listScrollPosition = ((TomahawkFragment) currentFragment).getListScrollPosition(); } mBackstack.add(fragmentStateHolder); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); } Bundle bundle = new Bundle(); bundle.putString( fragmentStateHolder.tomahawkListItemType, fragmentStateHolder.tomahawkListItemKey); bundle.putBoolean( TomahawkFragment.TOMAHAWK_LIST_ITEM_IS_LOCAL, fragmentStateHolder.tomahawkListItemIsLocal); bundle.putInt( TomahawkFragment.TOMAHAWK_LIST_SCROLL_POSITION, fragmentStateHolder.listScrollPosition); bundle.putString( SearchableFragment.SEARCHABLEFRAGMENT_QUERY_STRING, fragmentStateHolder.queryString); ft.replace( mContentFrameId, Fragment.instantiate(mTomahawkMainActivity, fragmentStateHolder.clss.getName(), bundle), FRAGMENT_TAG); ft.commit(); mTomahawkMainActivity.updateViewVisibility(); }
/** Update this {@link TomahawkFragment}'s {@link TomahawkListAdapter} content */ @Override protected void updateAdapter() { if (!mIsResumed) { return; } List<TomahawkListItem> albumsAndTopHits = new ArrayList<TomahawkListItem>(); TomahawkMainActivity activity = (TomahawkMainActivity) getActivity(); Context context = getActivity(); LayoutInflater layoutInflater = getActivity().getLayoutInflater(); View rootView = getView(); if (mArtist != null) { activity.setTitle(mArtist.getName()); if (mIsLocal) { albumsAndTopHits.addAll(mArtist.getLocalAlbums()); } else { albumsAndTopHits.addAll(mArtist.getTopHits()); albumsAndTopHits.addAll(mArtist.getAlbums()); mShownQueries = mArtist.getTopHits(); int precedingItemCount = 0; if (getListAdapter() != null && ((TomahawkListAdapter) getListAdapter()).isShowingContentHeader()) { precedingItemCount++; } mQueryPositions.clear(); for (int i = 0; i < mShownQueries.size(); i++) { mQueryPositions.put(i, i + precedingItemCount); } } if (getListAdapter() == null) { TomahawkListAdapter tomahawkListAdapter = new TomahawkListAdapter(context, layoutInflater, albumsAndTopHits); tomahawkListAdapter.setShowCategoryHeaders( true, TomahawkListAdapter.SHOW_QUERIES_AS_TOPHITS); tomahawkListAdapter.showContentHeader(rootView, mArtist, mIsLocal); tomahawkListAdapter.setShowResolvedBy(true); setListAdapter(tomahawkListAdapter); } else { ((TomahawkListAdapter) getListAdapter()).setListItems(albumsAndTopHits); ((TomahawkListAdapter) getListAdapter()).showContentHeader(rootView, mArtist, mIsLocal); } getListView().setOnItemClickListener(this); } else if (mShowMode == SHOW_MODE_STARREDALBUMS) { ArrayList<Album> albums = DatabaseHelper.getInstance().getStarredAlbums(); albumsAndTopHits.addAll(albums); if (getListAdapter() == null) { TomahawkListAdapter tomahawkListAdapter = new TomahawkListAdapter(context, layoutInflater, albumsAndTopHits); setListAdapter(tomahawkListAdapter); } else { ((TomahawkListAdapter) getListAdapter()).setListItems(albumsAndTopHits); } getListView().setOnItemClickListener(this); } else { if (mIsLocal) { albumsAndTopHits.addAll(Album.getLocalAlbums()); } else { albumsAndTopHits.addAll(Album.getAlbums()); } if (getGridAdapter() == null) { TomahawkGridAdapter tomahawkGridAdapter = new TomahawkGridAdapter(activity, layoutInflater, albumsAndTopHits); setGridAdapter(tomahawkGridAdapter); } else { getGridAdapter().setListArray(albumsAndTopHits); } getGridView().setOnItemClickListener(this); adaptColumnCount(); } updateShowPlaystate(); }
public List storeRecords( JsonObject object, int resultType, int requestType, boolean isBackgroundRequest, QueryParams params) throws IOException { List results = new ArrayList(); JsonElement elements = object.get("images"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Image image = (Image) mCache.get(TYPE_IMAGES).get(id); if (image == null) { String url = getAsString(o, "url"); int width = getAsInt(o, "width"); int height = getAsInt(o, "height"); image = Image.get(url, true, width, height); mCache.get(TYPE_IMAGES).put(id, image); } if (resultType == TYPE_IMAGES) { results.add(image); } } } } elements = object.get("artists"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Artist artist = (Artist) mCache.get(TYPE_ARTISTS).get(id); if (artist == null) { String name = getAsString(o, "name"); String wiki = getAsString(o, "wikiabstract"); artist = Artist.get(name); artist.setBio(new ListItemString(wiki)); JsonElement images = get(o, "images"); if (images instanceof JsonArray && ((JsonArray) images).size() > 0) { String imageId = ((JsonArray) images).get(0).getAsString(); Image image = (Image) findRecord(imageId, TYPE_IMAGES, isBackgroundRequest); artist.setImage(image); } mCache.get(TYPE_ARTISTS).put(id, artist); } if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_ARTISTS_ALBUMS) { JsonElement rawAlbums = get(o, "albums"); if (rawAlbums instanceof JsonObject) { results.addAll( storeRecords((JsonObject) rawAlbums, TYPE_ALBUMS, isBackgroundRequest)); } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_ARTISTS_TOPHITS) { JsonElement rawTopHits = get(o, "topHits"); if (rawTopHits instanceof JsonObject) { results.addAll( storeRecords((JsonObject) rawTopHits, TYPE_TRACKS, isBackgroundRequest)); } } if (resultType == TYPE_ARTISTS) { results.add(artist); } } } } elements = object.get("albums"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Album album = (Album) mCache.get(TYPE_ALBUMS).get(id); if (album == null) { String name = getAsString(o, "name"); String artistId = getAsString(o, "artist"); Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); album = Album.get(name, artist); JsonElement images = get(o, "images"); if (images instanceof JsonArray && ((JsonArray) images).size() > 0) { String imageId = ((JsonArray) images).get(0).getAsString(); Image image = (Image) findRecord(imageId, TYPE_IMAGES, isBackgroundRequest); album.setImage(image); } mCache.get(TYPE_ALBUMS).put(id, album); } if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_ALBUMS_TRACKS) { JsonElement rawTracks = get(o, "tracks"); if (rawTracks instanceof JsonObject) { results.addAll( storeRecords((JsonObject) rawTracks, TYPE_TRACKS, isBackgroundRequest)); } } if (resultType == TYPE_ALBUMS) { results.add(album); } } } } elements = object.get("tracks"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Query query = (Query) mCache.get(TYPE_TRACKS).get(id); if (query == null) { String name = getAsString(o, "name"); String artistId = getAsString(o, "artist"); Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); query = Query.get(name, null, artist.getName(), false, true); mCache.get(TYPE_TRACKS).put(id, query); } if (resultType == TYPE_TRACKS) { results.add(query); } } } } elements = object.get("users"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); User user = User.get(id); String name = getAsString(o, "name"); user.setName(name); String about = getAsString(o, "about"); user.setAbout(about); int followersCount = getAsInt(o, "followersCount"); user.setFollowersCount(followersCount); int followCount = getAsInt(o, "followCount"); user.setFollowCount(followCount); String nowplayingId = getAsString(o, "nowplaying"); if (nowplayingId != null) { Query nowplaying = (Query) findRecord(nowplayingId, TYPE_TRACKS, isBackgroundRequest); user.setNowPlaying(nowplaying); } String nowplayingtimestamp = getAsString(o, "nowplayingtimestamp"); user.setNowPlayingTimeStamp(ISO8601Utils.parse(nowplayingtimestamp)); String avatar = getAsString(o, "avatar"); if (avatar != null) { Image image = (Image) findRecord(avatar, TYPE_IMAGES, isBackgroundRequest); user.setImage(image); } if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_PLAYLISTS) { JsonElement rawPlaylists = get(o, "playlists"); if (rawPlaylists instanceof JsonObject) { List playlists = storeRecords((JsonObject) rawPlaylists, TYPE_PLAYLISTS, isBackgroundRequest); user.setPlaylists(playlists); } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_LOVEDITEMS) { JsonElement rawLovedItems = get(o, "lovedItems"); if (rawLovedItems instanceof JsonObject) { List playlists = storeRecords((JsonObject) rawLovedItems, TYPE_PLAYLISTS, isBackgroundRequest); if (playlists != null && playlists.size() > 0) { user.setFavorites((Playlist) playlists.get(0)); } } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_LOVEDALBUMS) { JsonElement rawLovedAlbums = get(o, "lovedAlbums"); if (rawLovedAlbums instanceof JsonObject) { List albums = storeRecords((JsonObject) rawLovedAlbums, TYPE_ALBUMS, isBackgroundRequest); user.setStarredAlbums(albums); } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_LOVEDARTISTS) { JsonElement rawLovedArtists = get(o, "lovedArtists"); if (rawLovedArtists instanceof JsonObject) { List artists = storeRecords((JsonObject) rawLovedArtists, TYPE_ARTISTS, isBackgroundRequest); user.setStarredArtists(artists); } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_PLAYBACKLOG) { JsonElement rawPlaybackLog = get(o, "playbacklog"); if (rawPlaybackLog instanceof JsonObject) { List playlists = storeRecords((JsonObject) rawPlaybackLog, TYPE_PLAYLISTS, isBackgroundRequest); if (playlists != null && playlists.size() > 0) { user.setPlaybackLog((Playlist) playlists.get(0)); } } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_FOLLOWS || requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_FOLLOWERS) { boolean isFollows = requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_FOLLOWS; JsonElement rawFollows = get(o, isFollows ? "follows" : "followers"); if (rawFollows instanceof JsonObject) { JsonObject follows = (JsonObject) rawFollows; storeRecords(follows, -1, isBackgroundRequest); JsonElement relationships = get(follows, "relationships"); if (relationships instanceof JsonArray) { TreeMap<User, String> followsMap = new TreeMap<>(new AlphaComparator()); for (JsonElement relationship : (JsonArray) relationships) { JsonObject relationshipObj = (JsonObject) relationship; String relationshipId = getAsString(relationshipObj, "id"); String userId = getAsString(relationshipObj, isFollows ? "targetUser" : "user"); User followedUser = (User) findRecord(userId, TYPE_USERS, isBackgroundRequest); followsMap.put(followedUser, relationshipId); } if (isFollows) { user.setFollowings(followsMap); } else { user.setFollowers(followsMap); } } } } else if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_PLAYBACKLOG) { JsonElement rawPlaybackLog = get(o, "playbacklog"); if (rawPlaybackLog instanceof JsonObject) { List playlists = storeRecords((JsonObject) rawPlaybackLog, TYPE_PLAYLISTS, isBackgroundRequest); if (playlists != null && playlists.size() > 0) { user.setPlaybackLog((Playlist) playlists.get(0)); } } } mCache.get(TYPE_USERS).put(id, user); if (resultType == TYPE_USERS) { results.add(user); } } } } elements = object.get("playlistEntries"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Query query = (Query) mCache.get(TYPE_PLAYLISTENTRIES).get(id); if (query == null) { String trackId = getAsString(o, "track"); query = (Query) findRecord(trackId, TYPE_TRACKS, isBackgroundRequest); mCache.get(TYPE_PLAYLISTENTRIES).put(id, query); } if (resultType == TYPE_PLAYLISTENTRIES) { results.add(query); } } } } elements = object.get("playlists"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); String title = getAsString(o, "title"); String currentrevision = getAsString(o, "currentrevision"); String localId = DatabaseHelper.get().getPlaylistLocalId(id); if (localId == null) { localId = id; } Playlist playlist = null; if (requestType == InfoRequestData.INFOREQUESTDATA_TYPE_PLAYLISTS_PLAYLISTENTRIES) { JsonElement rawEntries = get(o, "playlistEntries"); if (rawEntries instanceof JsonObject) { List<PlaylistEntry> entries = storeRecords((JsonObject) rawEntries, TYPE_PLAYLISTENTRIES, isBackgroundRequest); if (entries != null) { playlist = Playlist.fromEntriesList(localId, null, null, entries); playlist.setFilled(true); } } } else { JsonElement entryIds = o.get("playlistEntries"); if (entryIds instanceof JsonArray) { List<Query> queries = new ArrayList<>(); for (JsonElement entryId : (JsonArray) entryIds) { Query query = (Query) findRecord( entryId.getAsString(), TYPE_PLAYLISTENTRIES, isBackgroundRequest); queries.add(query); } playlist = Playlist.fromQueryList(localId, null, null, queries); playlist.setFilled(true); } } if (playlist == null) { playlist = Playlist.get(localId); } playlist.setName(title); playlist.setCurrentRevision(currentrevision); playlist.setHatchetId(id); JsonElement popularArtists = get(o, "popularArtists"); if (popularArtists instanceof JsonArray) { ArrayList<String> topArtistNames = new ArrayList<>(); for (JsonElement popularArtist : (JsonArray) popularArtists) { String artistId = popularArtist.getAsString(); Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); if (artist != null) { topArtistNames.add(artist.getName()); } } playlist.setTopArtistNames(topArtistNames.toArray(new String[topArtistNames.size()])); } mCache.get(TYPE_PLAYLISTS).put(id, playlist); if (resultType == TYPE_PLAYLISTS) { results.add(playlist); } } } } elements = object.get("playbacklogEntries"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); Query query = (Query) mCache.get(TYPE_PLAYLISTENTRIES).get(id); if (query == null) { String trackId = getAsString(o, "track"); query = (Query) findRecord(trackId, TYPE_TRACKS, isBackgroundRequest); mCache.get(TYPE_PLAYLISTENTRIES).put(id, query); } if (resultType == TYPE_PLAYLISTENTRIES) { results.add(query); } } } } elements = object.get("playbacklogs"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); JsonArray playbacklogEntries = get(o, "playbacklogEntries").getAsJsonArray(); ArrayList<Query> queries = new ArrayList<>(); for (JsonElement entry : playbacklogEntries) { String entryId = entry.getAsString(); Query query = (Query) findRecord(entryId, TYPE_PLAYLISTENTRIES, isBackgroundRequest); queries.add(query); } Playlist playlist = Playlist.fromQueryList( TomahawkMainActivity.getLifetimeUniqueStringId(), "Playbacklog", null, queries); playlist.setHatchetId(id); playlist.setFilled(true); mCache.get(TYPE_PLAYLISTS).put(id, playlist); if (resultType == TYPE_PLAYLISTS) { results.add(playlist); } } } } elements = object.get("socialActions"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); SocialAction socialAction = (SocialAction) mCache.get(TYPE_SOCIALACTIONS).get(id); if (socialAction == null) { socialAction = SocialAction.get(id); String action = getAsString(o, "action"); socialAction.setAction(action); String date = getAsString(o, "date"); socialAction.setDate(ISO8601Utils.parse(date)); String actionType = getAsString(o, "type"); socialAction.setType(actionType); String trackId = getAsString(o, "track"); if (trackId != null) { Query query = (Query) findRecord(trackId, TYPE_TRACKS, isBackgroundRequest); socialAction.setQuery(query); } String artistId = getAsString(o, "artist"); if (artistId != null) { Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); socialAction.setArtist(artist); } String albumId = getAsString(o, "album"); if (albumId != null) { Album album = (Album) findRecord(albumId, TYPE_ALBUMS, isBackgroundRequest); socialAction.setAlbum(album); } String userId = getAsString(o, "user"); if (userId != null) { User user = (User) findRecord(userId, TYPE_USERS, isBackgroundRequest); socialAction.setUser(user); } String targetId = getAsString(o, "target"); if (targetId != null) { User target = (User) findRecord(targetId, TYPE_USERS, isBackgroundRequest); socialAction.setTarget(target); } String playlistId = getAsString(o, "playlist"); if (playlistId != null) { Playlist playlist = (Playlist) findRecord(playlistId, TYPE_PLAYLISTS, isBackgroundRequest); socialAction.setPlaylist(playlist); } mCache.get(TYPE_SOCIALACTIONS).put(id, socialAction); } if (resultType == TYPE_SOCIALACTIONS) { results.add(socialAction); } } } if (params != null) { User user = (User) findRecord(params.userid, TYPE_USERS, false); if (user != null) { if (HatchetInfoPlugin.HATCHET_SOCIALACTION_PARAMTYPE_FRIENDSFEED.equals(params.type)) { user.setFriendsFeed(results, params.before_date); } else { user.setSocialActions(results, params.before_date); } } } } elements = object.get("searchResults"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); SearchResult searchResult = (SearchResult) mCache.get(TYPE_SEARCHRESULTS).get(id); if (searchResult == null) { float score = getAsFloat(o, "score"); String trackId = getAsString(o, "track"); if (trackId != null) { Query query = (Query) findRecord(trackId, TYPE_TRACKS, isBackgroundRequest); searchResult = new SearchResult(score, query); } String artistId = getAsString(o, "artist"); if (artistId != null) { Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); searchResult = new SearchResult(score, artist); } String albumId = getAsString(o, "album"); if (albumId != null) { Album album = (Album) findRecord(albumId, TYPE_ALBUMS, isBackgroundRequest); searchResult = new SearchResult(score, album); } String userId = getAsString(o, "user"); if (userId != null) { User user = (User) findRecord(userId, TYPE_USERS, isBackgroundRequest); searchResult = new SearchResult(score, user); } String playlistId = getAsString(o, "playlist"); if (playlistId != null) { Playlist playlist = (Playlist) findRecord(playlistId, TYPE_PLAYLISTS, isBackgroundRequest); searchResult = new SearchResult(score, playlist); } if (searchResult == null) { throw new IOException("searchResult contained no actual result object!"); } mCache.get(TYPE_SEARCHRESULTS).put(id, searchResult); } if (resultType == TYPE_SEARCHRESULTS) { results.add(searchResult); } } } } elements = object.get("searches"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); JsonArray rawSearchResults = get(o, "searchResults").getAsJsonArray(); ArrayList<SearchResult> searchResults = new ArrayList<>(); for (JsonElement rawSearchResult : rawSearchResults) { String resultId = rawSearchResult.getAsString(); SearchResult searchResult = (SearchResult) findRecord(resultId, TYPE_SEARCHRESULTS, isBackgroundRequest); searchResults.add(searchResult); } Search search = new Search(searchResults); mCache.get(TYPE_SEARCHES).put(id, search); if (resultType == TYPE_SEARCHES) { results.add(search); } } } } elements = object.get("relationships"); if (elements instanceof JsonArray) { for (JsonElement element : (JsonArray) elements) { if (element instanceof JsonObject) { JsonObject o = (JsonObject) element; String id = getAsString(o, "id"); String type = getAsString(o, "type"); if (type.equals(HatchetInfoPlugin.HATCHET_RELATIONSHIPS_TYPE_LOVE)) { String userId = getAsString(o, "user"); User user = (User) findRecord(userId, TYPE_USERS, isBackgroundRequest); String trackId = getAsString(o, "targetTrack"); if (trackId != null) { Query query = (Query) findRecord(trackId, TYPE_TRACKS, isBackgroundRequest); user.putRelationShipId(query, id); } String albumId = getAsString(o, "targetAlbum"); if (albumId != null) { Album album = (Album) findRecord(albumId, TYPE_ALBUMS, isBackgroundRequest); user.putRelationShipId(album, id); } String artistId = getAsString(o, "targetArtist"); if (artistId != null) { Artist artist = (Artist) findRecord(artistId, TYPE_ARTISTS, isBackgroundRequest); user.putRelationShipId(artist, id); } } } } } return results; }