package in.mvpstarter.sample.ui.detail;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import com.bumptech.glide.Glide;
import javax.inject.Inject;
import butterknife.BindView;
import in.mvpstarter.sample.R;
import in.mvpstarter.sample.data.model.Pokemon;
import in.mvpstarter.sample.data.model.Statistic;
import in.mvpstarter.sample.ui.base.BaseActivity;
import in.mvpstarter.sample.ui.common.ErrorView;
import in.mvpstarter.sample.ui.detail.widget.StatisticView;
import timber.log.Timber;
public class DetailActivity extends BaseActivity implements DetailMvpView, ErrorView.ErrorListener {
public static final String EXTRA_POKEMON_NAME = "EXTRA_POKEMON_NAME";
@Inject
DetailPresenter mDetailPresenter;
@BindView(R.id.view_error)
ErrorView mErrorView;
@BindView(R.id.image_pokemon)
ImageView mPokemonImage;
@BindView(R.id.progress)
ProgressBar mProgress;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.layout_stats)
LinearLayout mStatLayout;
@BindView(R.id.layout_pokemon)
View mPokemonLayout;
private String mPokemonName;
public static Intent getStartIntent(Context context, String pokemonName) {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(EXTRA_POKEMON_NAME, pokemonName);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityComponent().inject(this);
mDetailPresenter.attachView(this);
mPokemonName = getIntent().getStringExtra(EXTRA_POKEMON_NAME);
if (mPokemonName == null) {
throw new IllegalArgumentException("Detail Activity requires a pokemon name@");
}
setSupportActionBar(mToolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) actionBar.setDisplayHomeAsUpEnabled(true);
setTitle(mPokemonName.substring(0, 1).toUpperCase() + mPokemonName.substring(1));
mErrorView.setErrorListener(this);
mDetailPresenter.getPokemon(mPokemonName);
}
@Override
public int getLayout() {
return R.layout.activity_detail;
}
@Override
public void showPokemon(Pokemon pokemon) {
if (pokemon.sprites != null && pokemon.sprites.frontDefault != null) {
Glide.with(this)
.load(pokemon.sprites.frontDefault)
.into(mPokemonImage);
}
mPokemonLayout.setVisibility(View.VISIBLE);
}
@Override
public void showStat(Statistic statistic) {
StatisticView statisticView = new StatisticView(this);
statisticView.setStat(statistic);
mStatLayout.addView(statisticView);
}
@Override
public void showProgress(boolean show) {
mErrorView.setVisibility(View.GONE);
mProgress.setVisibility(show ? View.VISIBLE : View.GONE);
}
@Override
public void showError(Throwable error) {
mPokemonLayout.setVisibility(View.GONE);
mErrorView.setVisibility(View.VISIBLE);
Timber.e(error, "There was a problem retrieving the pokemon...");
}
@Override
public void onReloadData() {
mDetailPresenter.getPokemon(mPokemonName);
}
@Override
protected void onDestroy() {
super.onDestroy();
mDetailPresenter.detachView();
}
}