package com.apollographql.apollo.sample.detail; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.apollographql.apollo.ApolloCall; import com.apollographql.apollo.api.Response; import com.apollographql.apollo.cache.normalized.CacheControl; import com.apollographql.apollo.rx2.Rx2Apollo; import com.apollographql.apollo.sample.EntryDetailQuery; import com.apollographql.apollo.sample.GitHuntApplication; import com.apollographql.apollo.sample.R; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; public class GitHuntEntryDetailActivity extends AppCompatActivity { private static final String TAG = GitHuntEntryDetailActivity.class.getSimpleName(); private static final String ARG_REPOSITORY_FULL_NAME = "arg_repo_full_name"; private GitHuntApplication application; ViewGroup content; ProgressBar progressBar; TextView description; TextView name; TextView postedBy; private String repoFullName; private CompositeDisposable disposables = new CompositeDisposable(); public static Intent newIntent(Context context, String repositoryFullName) { Intent intent = new Intent(context, GitHuntEntryDetailActivity.class); intent.putExtra(ARG_REPOSITORY_FULL_NAME, repositoryFullName); return intent; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_repository_detail); repoFullName = getIntent().getStringExtra(ARG_REPOSITORY_FULL_NAME); application = (GitHuntApplication) getApplication(); content = (ViewGroup) findViewById(R.id.content_holder); progressBar = (ProgressBar) findViewById(R.id.loading_bar); name = (TextView) findViewById(R.id.tv_repository_name); description = (TextView) findViewById(R.id.tv_repository_description); postedBy = (TextView) findViewById(R.id.tv_posted_by); getSupportActionBar().setDisplayHomeAsUpEnabled(true); fetchRepositoryDetails(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: this.finish(); return true; default: return super.onOptionsItemSelected(item); } } private void setEntryData(EntryDetailQuery.Data data) { content.setVisibility(View.VISIBLE); progressBar.setVisibility(View.GONE); final EntryDetailQuery.Entry entry = data.entry(); if (entry != null) { name.setText(entry.repository().full_name()); description.setText(entry.repository().description()); postedBy.setText(getResources().getString(R.string.posted_by, entry.postedBy().login())); } } private void fetchRepositoryDetails() { ApolloCall<EntryDetailQuery.Data> entryDetailQuery = application.apolloClient() .newCall(new EntryDetailQuery(repoFullName)) .cacheControl(CacheControl.CACHE_FIRST); //Example call using Rx2Support disposables.add(Rx2Apollo.from(entryDetailQuery) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSingleObserver<Response<EntryDetailQuery.Data>>() { @Override public void onSuccess(Response<EntryDetailQuery.Data> dataResponse) { setEntryData(dataResponse.data()); } @Override public void onError(Throwable e) { Log.e(TAG, e.getMessage(), e); } })); } @Override protected void onDestroy() { super.onDestroy(); disposables.dispose(); } }