package in.mvpstarter.sample.ui.main;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ProgressBar;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import in.mvpstarter.sample.R;
import in.mvpstarter.sample.ui.base.BaseActivity;
import in.mvpstarter.sample.ui.common.ErrorView;
import in.mvpstarter.sample.ui.detail.DetailActivity;
import timber.log.Timber;
public class MainActivity extends BaseActivity implements MainMvpView, PokemonAdapter.ClickListener,
ErrorView.ErrorListener {
private static final int POKEMON_COUNT = 20;
@Inject
PokemonAdapter mPokemonAdapter;
@Inject
MainPresenter mMainPresenter;
@BindView(R.id.view_error)
ErrorView mErrorView;
@BindView(R.id.progress)
ProgressBar mProgress;
@BindView(R.id.recycler_pokemon)
RecyclerView mPokemonRecycler;
@BindView(R.id.swipe_to_refresh)
SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityComponent().inject(this);
mMainPresenter.attachView(this);
setSupportActionBar(mToolbar);
mSwipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.primary);
mSwipeRefreshLayout.setColorSchemeResources(R.color.white);
mSwipeRefreshLayout.setOnRefreshListener(() -> mMainPresenter.getPokemon(POKEMON_COUNT));
mPokemonAdapter.setClickListener(this);
mPokemonRecycler.setLayoutManager(new LinearLayoutManager(this));
mPokemonRecycler.setAdapter(mPokemonAdapter);
mErrorView.setErrorListener(this);
mMainPresenter.getPokemon(POKEMON_COUNT);
}
@Override
public int getLayout() {
return R.layout.activity_main;
}
@Override
protected void onDestroy() {
super.onDestroy();
mMainPresenter.detachView();
}
@Override
public void showPokemon(List<String> pokemon) {
mPokemonAdapter.setPokemon(pokemon);
mPokemonAdapter.notifyDataSetChanged();
mPokemonRecycler.setVisibility(View.VISIBLE);
mSwipeRefreshLayout.setVisibility(View.VISIBLE);
}
@Override
public void showProgress(boolean show) {
if (show) {
if (mPokemonRecycler.getVisibility() == View.VISIBLE
&& mPokemonAdapter.getItemCount() > 0) {
mSwipeRefreshLayout.setRefreshing(true);
} else {
mProgress.setVisibility(View.VISIBLE);
mPokemonRecycler.setVisibility(View.GONE);
mSwipeRefreshLayout.setVisibility(View.GONE);
}
mErrorView.setVisibility(View.GONE);
} else {
mSwipeRefreshLayout.setRefreshing(false);
mProgress.setVisibility(View.GONE);
}
}
@Override
public void showError(Throwable error) {
mPokemonRecycler.setVisibility(View.GONE);
mSwipeRefreshLayout.setVisibility(View.GONE);
mErrorView.setVisibility(View.VISIBLE);
Timber.e(error, "There was an error retrieving the pokemon");
}
@Override
public void onPokemonClick(String pokemon) {
startActivity(DetailActivity.getStartIntent(this, pokemon));
}
@Override
public void onReloadData() {
mMainPresenter.getPokemon(POKEMON_COUNT);
}
}