package com.huhx0015.gw2at.view.fragments;
import android.app.ProgressDialog;
import android.content.res.Configuration;
import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.GridLayoutManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.huhx0015.gw2at.R;
import com.huhx0015.gw2at.databinding.FragmentApiRecyclerviewBinding;
import com.huhx0015.gw2at.interfaces.RetrofitInterface;
import com.huhx0015.gw2at.model.responses.QuaggansResponse;
import com.huhx0015.gw2at.view.adapters.QuaggansAdapter;
import com.huhx0015.gw2at.utils.DialogUtils;
import com.huhx0015.gw2at.utils.DisplayUtils;
import com.huhx0015.gw2at.utils.SnackbarUtils;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
/**
* Created by Michael Yoon Huh on 2/1/2017.
*/
public class QuaggansFragment extends ApiFragment {
/** CLASS VARIABLES ________________________________________________________________________ **/
// DATABINDING VARIABLES
private FragmentApiRecyclerviewBinding mBinding;
// DATA VARIABLES
private List<QuaggansResponse> mQuaggansList;
// LOGGING VARIABLES
private static final String LOG_TAG = QuaggansFragment.class.getSimpleName();
// RECYCLERVIEW VARIABLES
private static final int QUAGGANS_GRID_PORTRAIT_COLUMNS = 2;
private static final int QUAGGANS_GRID_LANDSCAPE_COLUMNS = 3;
private static final int QUAGGANS_PREFETCH_VALUE = 6;
// PARCELABLE VARIABLES
private static final String QUAGGANS_FRAGMENT_QUAGGANS_LIST = LOG_TAG + "_QUAGGANS_LIST";
/** CONSTRUCTOR METHODS ____________________________________________________________________ **/
public static QuaggansFragment newInstance() {
return new QuaggansFragment();
}
/** FRAGMENT LIFECYCLE METHODS _____________________________________________________________ **/
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(getActivity().getLayoutInflater(), R.layout.fragment_api_recyclerview, null, false);
initLayout();
if (savedInstanceState != null) {
mQuaggansList = savedInstanceState.getParcelableArrayList(QUAGGANS_FRAGMENT_QUAGGANS_LIST);
if (mQuaggansList != null) {
setRecyclerView();
} else {
queryQuaggansList();
}
} else {
queryQuaggansList();
}
return mBinding.getRoot();
}
/** FRAGMENT EXTENSION METHODS _____________________________________________________________ **/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mQuaggansList != null) {
outState.putParcelableArrayList(QUAGGANS_FRAGMENT_QUAGGANS_LIST, new ArrayList<>(mQuaggansList));
}
}
/** LAYOUT METHODS _________________________________________________________________________ **/
private void initLayout() {
initRecyclerView();
}
private void initRecyclerView() {
GridLayoutManager layoutManager;
if (DisplayUtils.getOrientation(mContext) == Configuration.ORIENTATION_PORTRAIT) {
layoutManager = new GridLayoutManager(mContext, QUAGGANS_GRID_PORTRAIT_COLUMNS);
} else {
layoutManager = new GridLayoutManager(mContext, QUAGGANS_GRID_LANDSCAPE_COLUMNS);
}
layoutManager.setItemPrefetchEnabled(true);
layoutManager.setInitialPrefetchItemCount(QUAGGANS_PREFETCH_VALUE);
mBinding.apiRecyclerview.setLayoutManager(layoutManager);
mBinding.apiRecyclerview.setHasFixedSize(true);
mBinding.apiRecyclerview.setDrawingCacheEnabled(true);
mBinding.apiRecyclerview.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
}
private void setRecyclerView() {
QuaggansAdapter adapter = new QuaggansAdapter(mQuaggansList);
adapter.setHasStableIds(true);
mBinding.apiRecyclerview.setAdapter(adapter);
}
/** NETWORK METHODS ________________________________________________________________________ **/
private void queryQuaggansList() {
final ProgressDialog progressDialog = DialogUtils.createProgressDialog(mContext);
RetrofitInterface quaggansRequest = mNetworkAdapter.create(RetrofitInterface.class);
Observable<List<QuaggansResponse>> call = quaggansRequest.getQuaggans("all");
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<QuaggansResponse>>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(List<QuaggansResponse> response) {
mQuaggansList = response;
if (response != null) {
setRecyclerView();
}
}
@Override
public void onError(Throwable t) {
progressDialog.dismiss();
SnackbarUtils.displaySnackbarWithAction(mBinding.getRoot(), t.getLocalizedMessage(),
Snackbar.LENGTH_INDEFINITE, Color.RED, getString(R.string.retry),
new View.OnClickListener() {
@Override
public void onClick(View v) {
queryQuaggansList();
}
});
Log.e(LOG_TAG, "queryQuaggansList(): ERROR: " + t.getLocalizedMessage());
}
@Override
public void onComplete() {
progressDialog.dismiss();
}
});
}
}