/* * Copyright (C) 2016 Simon Vig Therkildsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.simonvt.cathode.ui.movie; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import javax.inject.Inject; import net.simonvt.cathode.CathodeApp; import net.simonvt.cathode.R; import net.simonvt.cathode.database.SimpleCursor; import net.simonvt.cathode.database.SimpleCursorLoader; import net.simonvt.cathode.jobqueue.Job; import net.simonvt.cathode.jobqueue.JobManager; import net.simonvt.cathode.provider.ProviderSchematic.RelatedMovies; import net.simonvt.cathode.scheduler.MovieTaskScheduler; import net.simonvt.cathode.ui.LibraryType; import net.simonvt.cathode.ui.MoviesNavigationListener; import net.simonvt.cathode.ui.fragment.ToolbarSwipeRefreshRecyclerFragment; import net.simonvt.cathode.ui.listener.MovieClickListener; import net.simonvt.cathode.ui.movies.MoviesAdapter; import net.simonvt.cathode.util.Ids; public class RelatedMoviesFragment extends ToolbarSwipeRefreshRecyclerFragment<MoviesAdapter.ViewHolder> implements LoaderManager.LoaderCallbacks<SimpleCursor>, MovieClickListener { private static final String TAG = "net.simonvt.cathode.ui.movie.RelatedMoviesFragment"; private static final String ARG_MOVIE_ID = "net.simonvt.cathode.ui.movie.RelatedMoviesFragment.movieId"; private static final int LOADER_MOVIES_RELATED = 1; @Inject JobManager jobManager; @Inject MovieTaskScheduler movieScheduler; private MoviesNavigationListener navigationListener; private long movieId; private MoviesAdapter movieAdapter; private SimpleCursor cursor; private int columnCount; public static String getTag(long movieId) { return TAG + "/" + movieId + "/" + Ids.newId(); } public static Bundle getArgs(long movieId) { Bundle args = new Bundle(); args.putLong(ARG_MOVIE_ID, movieId); return args; } @Override public void onAttach(Activity activity) { super.onAttach(activity); navigationListener = (MoviesNavigationListener) activity; } @Override public void onCreate(Bundle inState) { super.onCreate(inState); CathodeApp.inject(getActivity(), this); movieId = getArguments().getLong(ARG_MOVIE_ID); getLoaderManager().initLoader(LOADER_MOVIES_RELATED, null, this); columnCount = getResources().getInteger(R.integer.movieColumns); setTitle(R.string.title_related); setEmptyText(R.string.empty_movie_related); } @Override protected int getColumnCount() { return columnCount; } private Job.OnDoneListener onDoneListener = new Job.OnDoneListener() { @Override public void onDone(Job job) { setRefreshing(false); } }; @Override public void onRefresh() { movieScheduler.syncRelated(movieId, onDoneListener); } @Override public void onMovieClicked(long movieId, String title, String overview) { navigationListener.onDisplayMovie(movieId, title, overview); } protected void setCursor(SimpleCursor c) { this.cursor = c; if (movieAdapter == null) { movieAdapter = new MoviesAdapter(getActivity(), this, c, LibraryType.WATCHED); setAdapter(movieAdapter); return; } movieAdapter.changeCursor(c); } @Override public Loader<SimpleCursor> onCreateLoader(int i, Bundle bundle) { return new SimpleCursorLoader(getActivity(), RelatedMovies.fromMovie(movieId), MoviesAdapter.PROJECTION, null, null, null); } @Override public void onLoadFinished(Loader<SimpleCursor> loader, SimpleCursor data) { setCursor(data); } @Override public void onLoaderReset(Loader<SimpleCursor> loader) { } }