Skip to content

Commit

Permalink
Implements AsyncTasks as field members in MainActivity and DetailsAct…
Browse files Browse the repository at this point in the history
…ivity
  • Loading branch information
bogdanorzea committed Feb 28, 2018
1 parent 66b68b7 commit 52c75da
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 106 deletions.
107 changes: 28 additions & 79 deletions app/src/main/java/com/bogdanorzea/popularmovies/DetailsActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.v7.app.AppCompatActivity;
Expand All @@ -24,14 +23,9 @@
import com.bogdanorzea.popularmovies.model.objects.Movie;
import com.bogdanorzea.popularmovies.model.objects.Video;
import com.bogdanorzea.popularmovies.model.response.VideosResponse;
import com.bogdanorzea.popularmovies.utils.AsyncTaskUtils;
import com.bogdanorzea.popularmovies.utils.DataUtils;
import com.bogdanorzea.popularmovies.utils.NetworkUtils;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;

import java.io.IOException;

import okhttp3.HttpUrl;

import static com.bogdanorzea.popularmovies.utils.DataUtils.formatDuration;
import static com.bogdanorzea.popularmovies.utils.DataUtils.formatMoney;
Expand All @@ -44,11 +38,34 @@ public class DetailsActivity extends AppCompatActivity {
private ProgressBar mProgressBar;
private Movie mCurrentMovie;
private VideosResponse mCurrentVideosResponse;

private CardView mMovieCardView;
private AppBarLayout mAppBarLayout;
private AsyncTaskUtils.AsyncTaskListener<Movie> mMovieAsyncTaskListener =
new AsyncTaskUtils.AsyncTaskListener<Movie>() {
@Override
public void onTaskStarting() {
showProgress();
}

@Override
public void onTaskComplete(Movie movie) {
mCurrentMovie = movie;
hideProgress();
renderMovieInformation();
}
};
private AsyncTaskUtils.AsyncTaskListener<VideosResponse> mMovieVideosAsyncTaskListener =
new AsyncTaskUtils.AsyncTaskListener<VideosResponse>() {
@Override
public void onTaskStarting() {
}

@Override
public void onTaskComplete(VideosResponse videosResponse) {
mCurrentVideosResponse = videosResponse;
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
Expand All @@ -70,8 +87,8 @@ protected void onCreate(Bundle savedInstanceState) {
if (NetworkUtils.hasInternetConnection(this)) {
int movieId = intent.getIntExtra(MOVIE_ID_INTENT_KEY, -1);
if (movieId != -1) {
new MovieDetailsAsyncTask().execute(NetworkUtils.movieDetailsUrl(movieId));
new MovieVideosAsyncTask().execute(NetworkUtils.movieVideosUrl(movieId));
new AsyncTaskUtils.MovieDetailsAsyncTask(mMovieAsyncTaskListener).execute(NetworkUtils.movieDetailsUrl(movieId));
new AsyncTaskUtils.MovieVideosAsyncTask(mMovieVideosAsyncTaskListener).execute(NetworkUtils.movieVideosUrl(movieId));
}
} else {
Toast.makeText(this, R.string.warning_no_internet, Toast.LENGTH_SHORT).show();
Expand Down Expand Up @@ -197,72 +214,4 @@ private void renderMovieInformation() {
((RatingBar) findViewById(R.id.movie_score)).setRating(mCurrentMovie.voteAverage / 2);
}

private class MovieDetailsAsyncTask extends AsyncTask<HttpUrl, Void, Movie> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgress();
}

@Override
protected Movie doInBackground(HttpUrl... httpUrls) {
String response = "";
try {
response = NetworkUtils.fetch(httpUrls[0]);
} catch (IOException e) {
e.printStackTrace();
}

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<Movie> jsonAdapter = moshi.adapter(Movie.class);

Movie movie = null;

try {
movie = jsonAdapter.fromJson(response);
} catch (IOException e) {
e.printStackTrace();
}

return movie;
}

@Override
protected void onPostExecute(Movie movie) {
mCurrentMovie = movie;
hideProgress();
renderMovieInformation();
}
}

private class MovieVideosAsyncTask extends AsyncTask<HttpUrl, Void, VideosResponse> {
@Override
protected VideosResponse doInBackground(HttpUrl... httpUrls) {
String response = "";
try {
response = NetworkUtils.fetch(httpUrls[0]);
} catch (IOException e) {
e.printStackTrace();
}

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<VideosResponse> jsonAdapter = moshi.adapter(VideosResponse.class);

VideosResponse videosResponse = null;

try {
videosResponse = jsonAdapter.fromJson(response);
} catch (IOException e) {
e.printStackTrace();
}

return videosResponse;
}

@Override
protected void onPostExecute(VideosResponse videosResponse) {
mCurrentVideosResponse = videosResponse;
}
}

}
51 changes: 27 additions & 24 deletions app/src/main/java/com/bogdanorzea/popularmovies/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,36 @@
import okhttp3.HttpUrl;

public class MainActivity extends AppCompatActivity implements
SharedPreferences.OnSharedPreferenceChangeListener,
AsyncTaskUtils.AsyncTaskCompleteListener<ListOfMoviesResponse> {
SharedPreferences.OnSharedPreferenceChangeListener {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
private ProgressBar mProgressBar;
private RecyclerView mCoverRecyclerView;
private CoverAdapter mAdapter;
private AsyncTaskUtils.AsyncTaskListener<ListOfMoviesResponse> mCoverListener =
new AsyncTaskUtils.AsyncTaskListener<ListOfMoviesResponse>() {

@Override
public void onTaskStarting() {
showProgress();
}

@Override
public void onTaskComplete(ListOfMoviesResponse listOfMoviesResponse) {
if (listOfMoviesResponse != null) {
if (null == mAdapter.movies) {
mAdapter.movies = listOfMoviesResponse.results;
mCoverRecyclerView.setAdapter(mAdapter);
} else {
mAdapter.movies.addAll(listOfMoviesResponse.results);
}

hideProgress();
mAdapter.notifyDataSetChanged();
mAdapter.nextPageToLoad += 1;
}
}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down Expand Up @@ -105,7 +129,7 @@ private void loadData() {
return;
}

new AsyncTaskUtils.ListOfMoviesAsyncTask(this).execute(url);
new AsyncTaskUtils.ListOfMoviesAsyncTask(mCoverListener).execute(url);
} else {
hideProgress();
if (mAdapter.movies == null || mAdapter.movies.isEmpty()) {
Expand Down Expand Up @@ -142,25 +166,4 @@ public void onDestroy() {
.unregisterOnSharedPreferenceChangeListener(this);
}

@Override
public void onTaskStarting() {
showProgress();
}

@Override
public void onTaskComplete(ListOfMoviesResponse listOfMoviesResponse) {
if (listOfMoviesResponse != null) {
if (null == mAdapter.movies) {
mAdapter.movies = listOfMoviesResponse.results;
mCoverRecyclerView.setAdapter(mAdapter);
} else {
mAdapter.movies.addAll(listOfMoviesResponse.results);
}

hideProgress();
mAdapter.notifyDataSetChanged();
mAdapter.nextPageToLoad += 1;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

import android.os.AsyncTask;

import com.bogdanorzea.popularmovies.model.objects.Movie;
import com.bogdanorzea.popularmovies.model.response.ListOfMoviesResponse;
import com.bogdanorzea.popularmovies.model.response.VideosResponse;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;

Expand All @@ -12,15 +14,16 @@
import okhttp3.HttpUrl;

public class AsyncTaskUtils {
public interface AsyncTaskCompleteListener<T> {
public interface AsyncTaskListener<T> {
void onTaskStarting();

void onTaskComplete(T result);
}

public static class ListOfMoviesAsyncTask extends AsyncTask<HttpUrl, Void, ListOfMoviesResponse> {
private final AsyncTaskUtils.AsyncTaskCompleteListener<ListOfMoviesResponse> listener;
private final AsyncTaskListener<ListOfMoviesResponse> listener;

public ListOfMoviesAsyncTask(AsyncTaskUtils.AsyncTaskCompleteListener<ListOfMoviesResponse> listener) {
public ListOfMoviesAsyncTask(AsyncTaskListener<ListOfMoviesResponse> listener) {
this.listener = listener;
}

Expand Down Expand Up @@ -60,4 +63,89 @@ protected void onPostExecute(ListOfMoviesResponse listOfMoviesResponse) {
}
}

public static class MovieDetailsAsyncTask extends AsyncTask<HttpUrl, Void, Movie> {
private final AsyncTaskUtils.AsyncTaskListener<Movie> listener;

public MovieDetailsAsyncTask(AsyncTaskUtils.AsyncTaskListener<Movie> listener) {
this.listener = listener;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
listener.onTaskStarting();
}

@Override
protected Movie doInBackground(HttpUrl... httpUrls) {
String response = "";
try {
response = NetworkUtils.fetch(httpUrls[0]);
} catch (IOException e) {
e.printStackTrace();
}

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<Movie> jsonAdapter = moshi.adapter(Movie.class);

Movie movie = null;

try {
movie = jsonAdapter.fromJson(response);
} catch (IOException e) {
e.printStackTrace();
}

return movie;
}

@Override
protected void onPostExecute(Movie movie) {
super.onPostExecute(movie);
listener.onTaskComplete(movie);
}
}

public static class MovieVideosAsyncTask extends AsyncTask<HttpUrl, Void, VideosResponse> {
private final AsyncTaskListener<VideosResponse> listener;

public MovieVideosAsyncTask(AsyncTaskUtils.AsyncTaskListener<VideosResponse> listener) {
this.listener = listener;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
listener.onTaskStarting();
}

@Override
protected VideosResponse doInBackground(HttpUrl... httpUrls) {
String response = "";
try {
response = NetworkUtils.fetch(httpUrls[0]);
} catch (IOException e) {
e.printStackTrace();
}

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<VideosResponse> jsonAdapter = moshi.adapter(VideosResponse.class);

VideosResponse videosResponse = null;

try {
videosResponse = jsonAdapter.fromJson(response);
} catch (IOException e) {
e.printStackTrace();
}

return videosResponse;
}

@Override
protected void onPostExecute(VideosResponse videosResponse) {
super.onPostExecute(videosResponse);
listener.onTaskComplete(videosResponse);
}
}
}

0 comments on commit 52c75da

Please sign in to comment.