package com.aptoide.amethyst.fragments;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.aptoide.amethyst.ui.listeners.EndlessRecyclerOnScrollListener;
import com.aptoide.dataprovider.webservices.json.review.Review;
import com.aptoide.dataprovider.webservices.json.review.ReviewListJson;
import com.aptoide.dataprovider.webservices.models.Constants;
import com.aptoide.dataprovider.webservices.models.Defaults;
import com.aptoide.models.displayables.ProgressBarRow;
import com.aptoide.models.displayables.ReviewRowItem;
import com.octo.android.robospice.persistence.exception.SpiceException;
import com.octo.android.robospice.request.listener.RequestListener;
import com.aptoide.amethyst.adapter.BaseAdapter;
import com.aptoide.amethyst.adapter.main.HomeTabAdapter;
import com.aptoide.amethyst.fragments.store.BaseWebserviceFragment;
public abstract class ReviewsFragment extends BaseWebserviceFragment {
// on v6, 50 was the limit
protected static final int REVIEWS_LIMIT = 25;
String eventActionUrl;
protected boolean mLoading = false;
protected int offset = 0, limit = 9;
protected long storeId;
protected final RequestListener<ReviewListJson> listener = new RequestListener<ReviewListJson>() {
@Override
public void onRequestFailure(SpiceException spiceException) {
handleErrorCondition(spiceException);
}
@Override
public void onRequestSuccess(ReviewListJson reviewListJson) {
handleSuccessCondition();
displayableList.clear();
final BaseAdapter adapter = getAdapter();
setRecyclerAdapter(adapter);
if ("OK".equals(reviewListJson.status) && reviewListJson.reviews != null && reviewListJson.reviews.size() > 0) {
for (Review review : reviewListJson.reviews) {
ReviewRowItem reviewRowItem = getReviewRow(review);
displayableList.add(reviewRowItem);
}
adapter.notifyDataSetChanged();
}
offset = displayableList.size();
}
};
protected final RequestListener<ReviewListJson> endlessListener = new RequestListener<ReviewListJson>() {
@Override
public void onRequestFailure(SpiceException spiceException) {
handleErrorCondition(spiceException);
}
@Override
public void onRequestSuccess(ReviewListJson reviewListJson) {
if (adapter == null) {
return;
}
handleSuccessCondition();
if (mLoading && !displayableList.isEmpty()) {
displayableList.remove(displayableList.size() - 1);
adapter.notifyItemRemoved(displayableList.size());
}
if ("OK".equals(reviewListJson.status) && reviewListJson.reviews != null && reviewListJson.reviews.size() > 0) {
for (Review review : reviewListJson.reviews) {
ReviewRowItem reviewRowItem = getReviewRow(review);
displayableList.add(reviewRowItem);
}
adapter.notifyItemRangeInserted(offset, displayableList.size());
offset += displayableList.size();
mLoading = false;
}
}
};
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
storeId = getArguments().getLong(Constants.STOREID_KEY);
}
@Override
protected boolean isHomePage() {
return storeId == Defaults.DEFAULT_STORE_ID;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final RecyclerView recyclerView = getRecyclerView();
recyclerView.addOnScrollListener(
new EndlessRecyclerOnScrollListener((LinearLayoutManager) recyclerView.getLayoutManager()) {
@Override
public void onLoadMore() {
mLoading = true;
displayableList.add(new ProgressBarRow(BUCKET_SIZE));
adapter.notifyItemInserted(adapter.getItemCount());
executeEndlessSpiceRequest();
}
@Override
public int getOffset() {
return offset;
}
@Override
public boolean isLoading() {
return mLoading;
}
});
}
protected abstract void executeEndlessSpiceRequest();
@Override
protected BaseAdapter getAdapter() {
if (adapter == null) {
adapter = new HomeTabAdapter(displayableList, getFragmentManager(), getStoreTheme());
}
return adapter;
}
@Override
protected String getBaseContext() {
return "GetMoreReviews";
}
}