From f76bb32e5c9d76292e269f2a060aa9d988370ef0 Mon Sep 17 00:00:00 2001 From: danijoo Date: Fri, 30 Oct 2015 11:26:57 +0100 Subject: [PATCH] restore movielist on config change --- .../udacityproject1/MovieListFragment.java | 28 +++++++++++++--- .../udacityproject1/tmdbapi/MovieList.java | 32 ++++++++++++++++++- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/net/headlezz/udacityproject1/MovieListFragment.java b/app/src/main/java/net/headlezz/udacityproject1/MovieListFragment.java index e71dd00..7c32c80 100644 --- a/app/src/main/java/net/headlezz/udacityproject1/MovieListFragment.java +++ b/app/src/main/java/net/headlezz/udacityproject1/MovieListFragment.java @@ -42,6 +42,8 @@ public class MovieListFragment extends Fragment implements Callback { */ private int mSortingOrder = TMDBApi.SORT_ORDER_MOST_POPULAR; + private MovieList mMovieList; + RecyclerView mMovieGridView; ProgressBar mProgressBar; @@ -70,8 +72,11 @@ public class MovieListFragment extends Fragment implements Callback { super.onActivityCreated(savedInstanceState); mMovieGridView.setLayoutManager(new GridLayoutManager(getActivity(), getNumColumns())); - if(savedInstanceState != null) + if(savedInstanceState != null) { mSortingOrder = savedInstanceState.getInt("sort_order"); + if(savedInstanceState.containsKey("movielist")) + mMovieList = savedInstanceState.getParcelable("movielist"); + } } /** @@ -90,7 +95,18 @@ public class MovieListFragment extends Fragment implements Callback { @Override public void onStart() { super.onStart(); - loadMovieList(); + initMovieList(); + } + + /** + * sets the adapter from the restored movie list if the instance state is restored + * starts the download of the new movie list if no restored one is present + */ + private void initMovieList() { + if(mMovieList == null) + loadMovieList(); + else + mMovieGridView.setAdapter(new MovieListAdapter( (MovieNavigation) getActivity(), mMovieList)); } @Override @@ -128,8 +144,10 @@ public class MovieListFragment extends Fragment implements Callback { @Override public void onResponse(Response response, Retrofit retrofit) { - if(response.isSuccess()) - setListToGrid(response.body()); + if(response.isSuccess()) { + mMovieList = response.body(); + setListToGrid(mMovieList); + } mProgressBar.setVisibility(View.GONE); } @@ -171,6 +189,8 @@ public class MovieListFragment extends Fragment implements Callback { @Override public void onSaveInstanceState(Bundle outState) { outState.putInt("sort_order", mSortingOrder); + if(mMovieList != null) + outState.putParcelable("movielist", mMovieList); super.onSaveInstanceState(outState); } } diff --git a/app/src/main/java/net/headlezz/udacityproject1/tmdbapi/MovieList.java b/app/src/main/java/net/headlezz/udacityproject1/tmdbapi/MovieList.java index 9bdf311..61ca791 100644 --- a/app/src/main/java/net/headlezz/udacityproject1/tmdbapi/MovieList.java +++ b/app/src/main/java/net/headlezz/udacityproject1/tmdbapi/MovieList.java @@ -1,11 +1,16 @@ package net.headlezz.udacityproject1.tmdbapi; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.Arrays; +import java.util.Date; import java.util.List; /** * Wrapper class for list of movies */ -public class MovieList { +public class MovieList implements Parcelable { public MovieList(List movieList) { this.movies = movieList; @@ -15,4 +20,29 @@ public class MovieList { public List getList() { return movies; } + /***** Parcelable implementation ******/ + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int i) { + parcel.writeList(movies); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public MovieList createFromParcel(Parcel src) { + return new MovieList(src); + } + + public MovieList[] newArray(int size) { + return new MovieList[size]; + } + }; + + private MovieList(Parcel src) { + movies = src.readArrayList(Movie.class.getClassLoader()); + } }