package com.aptoide.amethyst.ui; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.view.View; import android.widget.TextView; import com.aptoide.amethyst.R; import com.aptoide.amethyst.ui.listeners.EndlessRecyclerOnScrollListener; import com.aptoide.amethyst.utils.AptoideUtils; import com.aptoide.dataprovider.webservices.models.Constants; import com.aptoide.models.displayables.DisplayableList; import com.aptoide.models.displayables.ProgressBarRow; import com.octo.android.robospice.persistence.DurationInMillis; 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; /** * Created by fabio on 28-10-2015. */ public class MoreVersionsActivity extends MoreActivity { @Override protected Fragment getFragment(Bundle args) { return MoreAppVersionsFragment.newInstance(args); } public static class MoreAppVersionsFragment extends BaseWebserviceFragment { public static final int MORE_APP_LIMIT = 9; boolean mLoading; int limit = MORE_APP_LIMIT; protected RequestListener<DisplayableList> listener = new RequestListener<DisplayableList>() { @Override public void onRequestFailure(SpiceException spiceException) { handleErrorCondition(spiceException); } @Override public void onRequestSuccess(DisplayableList displayables) { if (displayables.size() > 0) { handleSuccessCondition(); offset += displayables.size(); adapter = getAdapter(); setRecyclerAdapter(adapter); displayableList.clear(); displayableList.addAll(displayables); } else { handleNoItemsCondition(); TextView tvEmptyMsg = (TextView) getActivity().findViewById(R.id.tv_empty_msg); if (tvEmptyMsg != null) { tvEmptyMsg.setVisibility(View.VISIBLE); tvEmptyMsg.setText(getString(R.string.no_apps_found)); } } } }; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getRecyclerView().addOnScrollListener(new EndlessRecyclerOnScrollListener((LinearLayoutManager) getRecyclerView().getLayoutManager()) { @Override public void onLoadMore() { if (displayableList.size() >= limit) { 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; } }); } public static MoreAppVersionsFragment newInstance(Bundle args) { MoreAppVersionsFragment fragment = new MoreAppVersionsFragment(); fragment.setArguments(args); return fragment; } @Override protected void executeSpiceRequest(boolean useCache) { this.useCache = useCache; long cacheExpiryDuration = useCache ? DurationInMillis.ONE_HOUR * 6 : DurationInMillis.ALWAYS_EXPIRED; // in order to present the right info on screen after a screen rotation, always pass the bucketsize as cachekey spiceManager.execute( AptoideUtils.RepoUtils.GetMoreAppVersionsRequest(getArguments().getString(Constants.PACKAGENAME_KEY), limit, offset), getBaseContext() + "-packageName-" + getArguments().getString(Constants.PACKAGENAME_KEY) + "-" + BUCKET_SIZE + "-" + AptoideUtils.getSharedPreferences().getBoolean(Constants.MATURE_CHECK_BOX, false) + offset, cacheExpiryDuration, listener); } private void executeEndlessSpiceRequest() { long cacheExpiryDuration = useCache ? DurationInMillis.ONE_HOUR * 6 : DurationInMillis.ALWAYS_EXPIRED; spiceManager.execute( AptoideUtils.RepoUtils.GetMoreAppVersionsRequest(getArguments().getString(Constants.PACKAGENAME_KEY), limit, offset), getBaseContext() + "-packageName-" + getArguments().getString(Constants.PACKAGENAME_KEY) + "-" + BUCKET_SIZE + "-" + AptoideUtils.getSharedPreferences().getBoolean(Constants.MATURE_CHECK_BOX, false) + offset, cacheExpiryDuration, new RequestListener<DisplayableList>() { @Override public void onRequestFailure(SpiceException spiceException) { if (mLoading && !displayableList.isEmpty()) { displayableList.remove(displayableList.size() - 1); adapter.notifyItemRemoved(displayableList.size()); } } @Override public void onRequestSuccess(DisplayableList displayables) { if (mLoading && !displayableList.isEmpty()) { displayableList.remove(displayableList.size() - 1); adapter.notifyItemRemoved(displayableList.size()); } int index = displayableList.size(); displayableList.addAll(displayables); adapter.notifyItemRangeInserted(index, displayables.size()); offset += displayables.size(); mLoading = false; } }); } @Override protected BaseAdapter getAdapter() { if (adapter == null) { return new HomeTabAdapter(displayableList, getFragmentManager(), getStoreTheme()); } else { return adapter; } } @Override protected String getBaseContext() { return "search"; } } }