package com.hitherejoe.androidboilerplate.ui.activity;
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.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import com.hitherejoe.androidboilerplate.R;
import com.hitherejoe.androidboilerplate.data.DataManager;
import com.hitherejoe.androidboilerplate.data.model.Character;
import com.hitherejoe.androidboilerplate.ui.adapter.CharacterAdapter;
import com.hitherejoe.androidboilerplate.util.DataUtils;
import com.hitherejoe.androidboilerplate.util.DialogFactory;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
import timber.log.Timber;
public class MainActivity extends BaseActivity {
@Bind(R.id.progress_indicator) ProgressBar mProgressBar;
@Bind(R.id.recycler_characters) RecyclerView mCharactersRecycler;
@Bind(R.id.swipe_container) SwipeRefreshLayout mSwipeRefresh;
@Bind(R.id.toolbar) Toolbar mToolbar;
@Inject DataManager mDataManager;
@Inject CharacterAdapter mCharacterAdapter;
private CompositeSubscription mSubscriptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityComponent().inject(this);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
mSubscriptions = new CompositeSubscription();
setupToolbar();
setupRecyclerView();
loadCharacters();
}
@Override
protected void onDestroy() {
super.onDestroy();
mSubscriptions.unsubscribe();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_github:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void setupToolbar() {
setSupportActionBar(mToolbar);
}
private void setupRecyclerView() {
mCharactersRecycler.setLayoutManager(new LinearLayoutManager(this));
mCharactersRecycler.setAdapter(mCharacterAdapter);
mSwipeRefresh.setColorSchemeResources(R.color.primary);
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mCharacterAdapter.setCharacters(new ArrayList<Character>());
loadCharacters();
}
});
}
private void loadCharacters() {
if (DataUtils.isNetworkAvailable(this)) {
int[] characterIds = getResources().getIntArray(R.array.characters);
mSubscriptions.add(mDataManager.getCharacters(characterIds)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<List<Character>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable error) {
Timber.e("There was an error retrieving the characters " + error);
mProgressBar.setVisibility(View.GONE);
mSwipeRefresh.setRefreshing(false);
DialogFactory.createSimpleErrorDialog(MainActivity.this).show();
}
@Override
public void onNext(List<Character> characters) {
mProgressBar.setVisibility(View.GONE);
mSwipeRefresh.setRefreshing(false);
mCharacterAdapter.setCharacters(characters);
}
}));
} else {
mProgressBar.setVisibility(View.GONE);
mSwipeRefresh.setRefreshing(false);
DialogFactory.createSimpleOkErrorDialog(
this,
getString(R.string.dialog_error_title),
getString(R.string.dialog_error_no_connection)
).show();
}
}
}