package org.softeg.slartus.forpdaplus.listfragments;/* * Created by slinkin on 18.03.14. */ import android.os.Bundle; import android.widget.BaseAdapter; import com.android.internal.util.Predicate; import org.softeg.slartus.forpdaapi.ICatalogItem; import org.softeg.slartus.forpdaapi.digest.DigestApi; import org.softeg.slartus.forpdaapi.digest.DigestCatalog; import org.softeg.slartus.forpdaplus.App; import org.softeg.slartus.forpdaplus.Client; import org.softeg.slartus.forpdaplus.MainActivity; import org.softeg.slartus.forpdaplus.R; import org.softeg.slartus.forpdaplus.listfragments.adapters.CatalogAdapter; import org.softeg.slartus.forpdaplus.listtemplates.DigestTopicsListBrickInfo; import java.util.ArrayList; public class DigestCatalogFragment extends BaseCatalogFragment { protected ArrayList<DigestCatalog> mCatalogData = new ArrayList<>(); protected ArrayList<DigestCatalog> mData = new ArrayList<>(); protected ArrayList<DigestCatalog> mLoadResultList; protected Boolean isSavedInstanceStateEnabled() { return m_CurrentCatalogItem != null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { m_CurrentCatalogItem = (DigestCatalog) savedInstanceState.getParcelable("CurrentCatalogItem"); m_LoadingCatalogItem = (DigestCatalog) savedInstanceState.getParcelable("LoadingCatalogItem"); mData = savedInstanceState.getParcelableArrayList("Data"); mCatalogData = savedInstanceState.getParcelableArrayList("CatalogData"); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); afterDeliveryResult(); if (m_CurrentCatalogItem != null) rebuildCrumbs(m_CurrentCatalogItem); } @Override public void onSaveInstanceState(android.os.Bundle outState) { outState.putParcelable("CurrentCatalogItem", (DigestCatalog) m_CurrentCatalogItem); outState.putParcelable("LoadingCatalogItem", (DigestCatalog) m_LoadingCatalogItem); outState.putParcelableArrayList("Data", mData); outState.putParcelableArrayList("CatalogData", mCatalogData); super.onSaveInstanceState(outState); } protected BaseAdapter createAdapter() { return new CatalogAdapter(getContext(), mData); } public DigestCatalogFragment() { super(); m_CurrentCatalogItem = new DigestCatalog("-1", App.getContext().getString(R.string.apps_and_games)); m_LoadingCatalogItem = m_CurrentCatalogItem; } private ArrayList<DigestCatalog> getFilteredList(Predicate<DigestCatalog> predicate) { ArrayList<DigestCatalog> res = new ArrayList<>(); for (DigestCatalog item : mCatalogData) { if (!predicate.apply(item)) continue; res.add(item); } return res; } @Override protected boolean inBackground(boolean isRefresh, final ICatalogItem catalogItem) throws Throwable { if (mCatalogData.size() == 0) mCatalogData = DigestApi.getCatalog(Client.getInstance(), (DigestCatalog) m_CurrentCatalogItem); if (((DigestCatalog) catalogItem).getLevel() == DigestCatalog.LEVEL_TOPICS_NEXT) return false; mLoadResultList = getFilteredList(new Predicate<DigestCatalog>() { @Override public boolean apply(DigestCatalog catalog) { return catalog.getParent() != null && catalog.getParent().getId().equals(catalogItem.getId()); } }); if (mCatalogData.size() > 0 && mLoadResultList.size() == 0) return false; return true; } @Override protected void deliveryResult(boolean isRefresh) { super.deliveryResult(isRefresh); mData.clear(); for (DigestCatalog item : mLoadResultList) { mData.add(item); } mLoadResultList.clear(); getAdapter().notifyDataSetChanged(); } @Override protected void onFailureResult() { Bundle args = new Bundle(); args.putParcelable(DigestTopicsListFragment.CATALOG_KEY, (DigestCatalog) m_LoadingCatalogItem); MainActivity.showListFragment(new DigestTopicsListBrickInfo().getName(), args); } }