package org.intermine.app.fragment; /* * Copyright (C) 2015 InterMine * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. See the LICENSE file for more * information or http://www.gnu.org/copyleft/lesser.html. * */ import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import org.intermine.app.R; import org.intermine.app.activity.BaseActivity; import org.intermine.app.activity.MainActivity; import org.intermine.app.adapter.DividerItemDecoration; import org.intermine.app.adapter.ListsAdapter; import org.intermine.app.core.List; import org.intermine.app.net.ResponseHelper; import org.intermine.app.net.request.get.GetListsRequest; import org.intermine.app.util.Collections; import org.intermine.app.util.Views; import butterknife.InjectView; public class ListsFragment extends BaseFragment implements ListsAdapter.OnItemClickListener { public static final String TAG = ListsFragment.class.getSimpleName(); public static final String MINE_NAME_KEY = "mine_name_key"; public static final long LISTS_CACHE_EXPIRY_DURATION = 1000 * 60 * 10; @InjectView(R.id.progress_view) ProgressBar mProgressBar; @InjectView(R.id.lists) RecyclerView mRecyclerView; @InjectView(R.id.not_found_results_container) ViewGroup mNotFoundContainer; private String mMineName; private OnListSelectedListener mListener; // -------------------------------------------------------------------------------------------- // Static Methods // -------------------------------------------------------------------------------------------- public static ListsFragment newInstance(String mineName) { ListsFragment fragment = new ListsFragment(); Bundle bundle = new Bundle(); bundle.putString(MINE_NAME_KEY, mineName); fragment.setArguments(bundle); return fragment; } // -------------------------------------------------------------------------------------------- // Inner Classes // -------------------------------------------------------------------------------------------- public static interface OnListSelectedListener { void onListSelected(org.intermine.app.core.List list, String mineName); } class GetListsRequestListener implements RequestListener<GetListsRequest.Lists> { @Override public void onRequestFailure(SpiceException ex) { setProgress(false); Views.setVisible(mNotFoundContainer); Views.setGone(mRecyclerView); ResponseHelper.handleSpiceException(ex, (BaseActivity) getActivity(), mMineName); } @Override public void onRequestSuccess(GetListsRequest.Lists lists) { setProgress(false); if (Collections.isNullOrEmpty(lists)) { Views.setVisible(mNotFoundContainer); Views.setGone(mRecyclerView); } else { mRecyclerView.setAdapter(new ListsAdapter(lists, ListsFragment.this)); } } } // -------------------------------------------------------------------------------------------- // Fragment Lifecycle // -------------------------------------------------------------------------------------------- @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { return inflater.inflate(R.layout.lists_fragment, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); LinearLayoutManager manager = new LinearLayoutManager(getActivity()); manager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(manager); mRecyclerView.scheduleLayoutAnimation(); setProgress(true); fetchLists(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); mListener = (OnListSelectedListener) activity; Bundle bundle = getArguments(); if (null != bundle) { mMineName = bundle.getString(MINE_NAME_KEY); } String title = mMineName + " " + getString(R.string.lists); ((MainActivity) activity).onSectionAttached(title); } // -------------------------------------------------------------------------------------------- // Callbacks // -------------------------------------------------------------------------------------------- @Override public void onItemClick(List list) { mListener.onListSelected(list, mMineName); } // -------------------------------------------------------------------------------------------- // Helper Methods // -------------------------------------------------------------------------------------------- protected void fetchLists() { GetListsRequest request = new GetListsRequest(getActivity(), mMineName, null); execute(request, mMineName, LISTS_CACHE_EXPIRY_DURATION, new GetListsRequestListener()); } protected void setProgress(boolean loading) { if (loading) { Views.setVisible(mProgressBar); Views.setGone(mNotFoundContainer); Views.setGone(mRecyclerView); } else { Views.setVisible(mRecyclerView); Views.setGone(mProgressBar); } } public void setMineName(String mineName) { mMineName = mineName; } }