package org.softeg.slartus.forpdaplus.listfragments;/*
* Created by slinkin on 17.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.appsgamescatalog.AppGameCatalog;
import org.softeg.slartus.forpdaapi.appsgamescatalog.AppsGamesCatalogApi;
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.AppsGamesTopicsBrickInfo;
import java.io.IOException;
import java.util.ArrayList;
public class AppsGamesCatalogFragment extends BaseCatalogFragment {
protected ArrayList<AppGameCatalog> mCatalogData = new ArrayList<>();
protected ArrayList<AppGameCatalog> mData = new ArrayList<>();
protected ArrayList<AppGameCatalog> mLoadResultList;
protected BaseAdapter createAdapter() {
return new CatalogAdapter(getContext(), mData);
}
public AppsGamesCatalogFragment() {
super();
m_CurrentCatalogItem = new AppGameCatalog("-1", App.getContext().getString(R.string.apps_and_games));
m_LoadingCatalogItem = m_CurrentCatalogItem;
}
private ArrayList<AppGameCatalog> getFilteredList(Predicate<AppGameCatalog> predicate) {
ArrayList<AppGameCatalog> res = new ArrayList<>();
for (AppGameCatalog item : mCatalogData) {
if (!predicate.apply(item)) continue;
res.add(item);
}
return res;
}
/*
Поддерживает ли загрузку состояния
*/
protected Boolean isSavedInstanceStateEnabled() {
return m_CurrentCatalogItem != null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
removeArrow();
if (savedInstanceState != null) {
m_CurrentCatalogItem = (AppGameCatalog) savedInstanceState.getParcelable("CurrentCatalogItem");
m_LoadingCatalogItem = (AppGameCatalog) savedInstanceState.getParcelable("LoadingCatalogItem");
mData = savedInstanceState.getParcelableArrayList("Data");
mCatalogData = savedInstanceState.getParcelableArrayList("CatalogData");
}
}
@Override
public void onResume() {
super.onResume();
removeArrow();
}
@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", (AppGameCatalog) m_CurrentCatalogItem);
outState.putParcelable("LoadingCatalogItem", (AppGameCatalog) m_LoadingCatalogItem);
outState.putParcelableArrayList("Data", mData);
outState.putParcelableArrayList("CatalogData", mCatalogData);
super.onSaveInstanceState(outState);
}
@Override
protected boolean inBackground(boolean isRefresh, final ICatalogItem catalogItem) throws Throwable {
if (mCatalogData.size() == 0)
mCatalogData = AppsGamesCatalogApi.getCatalog(Client.getInstance(), (AppGameCatalog) m_CurrentCatalogItem);
if (catalogItem.getParent() != null && catalogItem.getId().equals(catalogItem.getParent().getId()))
return false;
mLoadResultList = getFilteredList(new Predicate<AppGameCatalog>() {
@Override
public boolean apply(AppGameCatalog catalog) {
return catalog.getParent() != null && catalog.getParent().getId().equals(catalogItem.getId());
}
});
return !(mCatalogData.size() > 0 && mLoadResultList.size() == 0);
}
@Override
protected void deliveryResult(boolean isRefresh) {
super.deliveryResult(isRefresh);
mData.clear();
for (AppGameCatalog item : mLoadResultList) {
mData.add(item);
}
mLoadResultList.clear();
getAdapter().notifyDataSetChanged();
}
@Override
protected void onFailureResult() {
Bundle args = new Bundle();
args.putParcelable(AppsGamesTopicsListFragment.CATALOG_KEY, (AppGameCatalog) m_LoadingCatalogItem);
MainActivity.showListFragment(new AppsGamesTopicsBrickInfo().getName(), args);
}
@Override
public void loadCache() throws IOException, IllegalAccessException, NoSuchFieldException, java.lang.InstantiationException {
}
@Override
public void saveCache() throws Exception {
}
@Override
protected void deliveryCache() {
}
}