package com.apollographql.apollo.sample.feed;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import com.apollographql.apollo.ApolloCall;
import com.apollographql.apollo.ApolloCallback;
import com.apollographql.apollo.api.Response;
import com.apollographql.apollo.cache.normalized.CacheControl;
import com.apollographql.apollo.exception.ApolloException;
import com.apollographql.apollo.sample.FeedQuery;
import com.apollographql.apollo.sample.GitHuntApplication;
import com.apollographql.apollo.sample.R;
import com.apollographql.apollo.sample.detail.GitHuntEntryDetailActivity;
import com.apollographql.apollo.sample.type.FeedType;
import javax.annotation.Nonnull;
public class GitHuntFeedActivity extends AppCompatActivity implements GitHuntNavigator {
private static final String TAG = GitHuntFeedActivity.class.getSimpleName();
private static final int FEED_SIZE = 20;
GitHuntApplication application;
ViewGroup content;
ProgressBar progressBar;
GitHuntFeedRecyclerViewAdapter feedAdapter;
Handler uiHandler = new Handler(Looper.getMainLooper());
ApolloCall<FeedQuery.Data> githuntFeedCall;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_githunt_feed);
application = (GitHuntApplication) getApplication();
content = (ViewGroup) findViewById(R.id.content_holder);
progressBar = (ProgressBar) findViewById(R.id.loading_bar);
RecyclerView feedRecyclerView = (RecyclerView) findViewById(R.id.rv_feed_list);
feedAdapter = new GitHuntFeedRecyclerViewAdapter(this);
feedRecyclerView.setAdapter(feedAdapter);
feedRecyclerView.setLayoutManager(new LinearLayoutManager(this));
fetchFeed();
}
private ApolloCall.Callback<FeedQuery.Data> dataCallback
= new ApolloCallback<>(new ApolloCall.Callback<FeedQuery.Data>() {
@Override public void onResponse(@Nonnull Response<FeedQuery.Data> response) {
feedAdapter.setFeed(response.data().feedEntries());
progressBar.setVisibility(View.GONE);
content.setVisibility(View.VISIBLE);
}
@Override public void onFailure(@Nonnull ApolloException e) {
Log.e(TAG, e.getMessage(), e);
}
}, uiHandler);
private void fetchFeed() {
final FeedQuery feedQuery = FeedQuery.builder()
.limit(FEED_SIZE)
.type(FeedType.HOT)
.build();
githuntFeedCall = application.apolloClient()
.newCall(feedQuery)
.cacheControl(CacheControl.NETWORK_FIRST);
githuntFeedCall.enqueue(dataCallback);
}
@Override public void startGitHuntActivity(String repoFullName) {
final Intent intent = GitHuntEntryDetailActivity.newIntent(this, repoFullName);
startActivity(intent);
}
@Override protected void onDestroy() {
super.onDestroy();
if (githuntFeedCall != null) {
githuntFeedCall.cancel();
}
}
}