package com.battlelancer.seriesguide.loaders; import android.content.Context; import android.database.Cursor; import android.text.format.DateUtils; import com.battlelancer.seriesguide.R; import com.battlelancer.seriesguide.adapters.NowAdapter; import com.battlelancer.seriesguide.provider.SeriesGuideContract; import com.battlelancer.seriesguide.provider.SeriesGuideContract.Activity; import com.battlelancer.seriesguide.provider.SeriesGuideDatabase; import com.battlelancer.seriesguide.thetvdbapi.TvdbImageTools; import com.battlelancer.seriesguide.util.TextTools; import com.uwetrottmann.androidutils.GenericSimpleLoader; import java.util.ArrayList; import java.util.List; /** * Loads a list of recently watched episodes. */ public class RecentlyWatchedLoader extends GenericSimpleLoader<List<NowAdapter.NowItem>> { public RecentlyWatchedLoader(Context context) { super(context); } @Override public List<NowAdapter.NowItem> loadInBackground() { long timeDayAgo = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS; // get activity of the last 24 hours with the latest one first Cursor query = getContext().getContentResolver() .query(Activity.CONTENT_URI, new String[] { Activity.TIMESTAMP_MS, Activity.EPISODE_TVDB_ID }, Activity.TIMESTAMP_MS + ">" + timeDayAgo, null, Activity.SORT_LATEST); if (query == null) { return null; } List<NowAdapter.NowItem> items = new ArrayList<>(); while (query.moveToNext()) { long timestamp = query.getLong(0); int episodeTvdbId = query.getInt(1); // get episode details Cursor episodeQuery = getContext().getContentResolver().query( SeriesGuideContract.Episodes.buildEpisodeWithShowUri(episodeTvdbId), new String[] { SeriesGuideDatabase.Tables.EPISODES + "." + SeriesGuideContract.Episodes._ID, // 0 SeriesGuideContract.Episodes.TITLE, SeriesGuideContract.Episodes.NUMBER, SeriesGuideContract.Episodes.SEASON, // 3 SeriesGuideContract.Episodes.FIRSTAIREDMS, SeriesGuideContract.Shows.REF_SHOW_ID, SeriesGuideContract.Shows.TITLE, SeriesGuideContract.Shows.POSTER // 7 }, null, null, null); if (episodeQuery == null) { continue; } // add items if (episodeQuery.moveToFirst()) { NowAdapter.NowItem item = new NowAdapter.NowItem().displayData( timestamp, episodeQuery.getString(6), TextTools.getNextEpisodeString(getContext(), episodeQuery.getInt(3), episodeQuery.getInt(2), episodeQuery.getString(1)), TvdbImageTools.smallSizeUrl(episodeQuery.getString(7)) ).tvdbIds(episodeTvdbId, episodeQuery.getInt(5)).recentlyWatchedLocal(); items.add(item); } episodeQuery.close(); } query.close(); // add header if (items.size() > 0) { items.add(0, new NowAdapter.NowItem().header( getContext().getString(R.string.recently_watched))); } return items; } }