package treehou.se.habit.ui.sitemaps; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import se.treehou.ng.ohcommunicator.connector.models.OHServer; import se.treehou.ng.ohcommunicator.connector.models.OHSitemap; import se.treehou.ng.ohcommunicator.services.Connector; import se.treehou.ng.ohcommunicator.services.IServerHandler; import se.treehou.ng.ohcommunicator.services.callbacks.OHCallback; import se.treehou.ng.ohcommunicator.services.callbacks.OHResponse; import treehou.se.habit.R; import treehou.se.habit.ui.adapter.SitemapAdapter; public class SitemapSelectorFragment extends Fragment { private static final String TAG = "SitemapSelectorFragment"; @BindView(R.id.list) RecyclerView mListView; private SitemapAdapter mSitemapAdapter; private Unbinder unbinder; public static SitemapSelectorFragment newInstance() { SitemapSelectorFragment fragment = new SitemapSelectorFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } public SitemapSelectorFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSitemapAdapter = new SitemapAdapter(getActivity()); mSitemapAdapter.setSelectorListener(sitemapSelectListener); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_sitemap_selector, container, false); unbinder = ButterKnife.bind(this, rootView); GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 1); mListView.setLayoutManager(gridLayoutManager); mListView.setItemAnimator(new DefaultItemAnimator()); mListView.setAdapter(mSitemapAdapter); return rootView; } private SitemapAdapter.OnSitemapSelectListener sitemapSelectListener = new SitemapAdapter.OnSitemapSelectListener() { @Override public void onSitemapSelect(OHSitemap sitemap) { if(getTargetFragment() != null){ ((SitemapAdapter.OnSitemapSelectListener) getTargetFragment()).onSitemapSelect(sitemap); }else { ((SitemapAdapter.OnSitemapSelectListener) getActivity()).onSitemapSelect(sitemap); } } @Override public void onErrorClicked(OHServer server) { requestSitemap(server); } }; @Override public void onResume() { super.onResume(); mSitemapAdapter.clear(); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } /** * Request sitemaps for server. * @param server the server to request sitemap for. */ private void requestSitemap(final OHServer server){ mSitemapAdapter.setServerState(server, SitemapAdapter.SitemapItem.STATE_LOADING); IServerHandler serverHandler = new Connector.ServerHandler(server, getContext()); serverHandler.requestSitemaps(new OHCallback<List<OHSitemap>>() { @Override public void onUpdate(OHResponse<List<OHSitemap>> items) { List<OHSitemap> sitemaps = items.body(); for (OHSitemap sitemap : sitemaps) { sitemap.setServer(server); if (!mSitemapAdapter.contains(sitemap)) { mSitemapAdapter.add(sitemap); } else if (OHSitemap.isLocal(sitemap)) { mSitemapAdapter.remove(sitemap); mSitemapAdapter.add(sitemap); } } mSitemapAdapter.notifyDataSetChanged(); } @Override public void onError() { mSitemapAdapter.setServerState(server, SitemapAdapter.SitemapItem.STATE_ERROR); } }); } }