diff --git a/app/src/main/java/net/headlezz/udacityproject1/MovieDetailsFragment.java b/app/src/main/java/net/headlezz/udacityproject1/MovieDetailsFragment.java index 91314eb..f8beeae 100644 --- a/app/src/main/java/net/headlezz/udacityproject1/MovieDetailsFragment.java +++ b/app/src/main/java/net/headlezz/udacityproject1/MovieDetailsFragment.java @@ -1,6 +1,10 @@ package net.headlezz.udacityproject1; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.format.DateUtils; @@ -10,17 +14,26 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import net.headlezz.udacityproject1.tmdbapi.Movie; import net.headlezz.udacityproject1.tmdbapi.TMDBApi; +import net.headlezz.udacityproject1.tmdbapi.Video; +import net.headlezz.udacityproject1.tmdbapi.VideoList; + +import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; +import retrofit.Call; +import retrofit.Callback; +import retrofit.Response; +import retrofit.Retrofit; /** * Fragment to show the details of a movie */ -public class MovieDetailsFragment extends Fragment { +public class MovieDetailsFragment extends Fragment implements Callback { public static final String TAG = MovieDetailsFragment.class.getSimpleName(); public static final String BUNDLE_ARG_MOVIE = "movie"; @@ -30,8 +43,16 @@ public class MovieDetailsFragment extends Fragment { @Bind(R.id.movie_details_tvOverview) TextView tvOverview; @Bind(R.id.movie_details_tvReleaseDate) TextView tvReleaseDate; @Bind(R.id.movie_details_tvRating) TextView tvRating; + @Bind(R.id.movie_details_trailerHolder) ViewGroup trailerHolder; Movie mMovie; + VideoList mVideoList; + + /** + * Hold a reference to the videolist download call so + * it can be canceled when stopping + */ + Call mVideoListCall; public static MovieDetailsFragment newInstance(Movie movie) { MovieDetailsFragment frag = new MovieDetailsFragment(); @@ -49,6 +70,9 @@ public class MovieDetailsFragment extends Fragment { Log.d(TAG, "Bundled movie: " + mMovie.getTitle()); } else throw new RuntimeException(TAG + " opened without bundled movie!"); + + if(savedInstanceState != null && savedInstanceState.containsKey("videolist")) + mVideoList = savedInstanceState.getParcelable("videolist"); } @Nullable @@ -68,5 +92,82 @@ public class MovieDetailsFragment extends Fragment { String formatedDate = DateUtils.formatDateTime(tvReleaseDate.getContext(), mMovie.getReleaseDate().getTime(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_YEAR); tvReleaseDate.setText(getString(R.string.movie_release_date, formatedDate)); tvRating.setText(getString(R.string.movie_rating, mMovie.getAvRating())); + + if(mVideoList == null) + loadVideoList(); + else + showVideoList(mVideoList); + } + + private void loadVideoList() { + if(mVideoListCall != null) + mVideoListCall.cancel(); + mVideoListCall = TMDBApi.getVideosForMovie(mMovie, getString(R.string.api_key)); + mVideoListCall.enqueue(this); + } + + @Override + public void onResponse(Response response, Retrofit retrofit) { + if(response.isSuccess()) { + mVideoList = response.body(); + if(getActivity() != null) + showVideoList(mVideoList); + } + } + + @Override + public void onFailure(Throwable t) { + if(getActivity() != null) + Toast.makeText(getActivity(), "Failed to load videos: " + t.getMessage(), Toast.LENGTH_SHORT).show(); + } + + // TODO high res image for video link + + /** + * shows a list of links to youtube videos for the selected movie + * if the videolist has no videos, the user sees a message that there are no. + * @param videoList VideoList to show + */ + private void showVideoList(@NonNull VideoList videoList) { + List