package de.vanmar.android.yarrn.stashes; import android.app.Activity; import android.view.View; import android.widget.AdapterView; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ListView; import android.widget.Spinner; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.sharedpreferences.Pref; import de.vanmar.android.yarrn.R; import de.vanmar.android.yarrn.YarrnAdapter; import de.vanmar.android.yarrn.YarrnPrefs_; import de.vanmar.android.yarrn.components.PagingListFragment; import de.vanmar.android.yarrn.ravelry.IRavelryActivity; import de.vanmar.android.yarrn.ravelry.dts.StashShort; import de.vanmar.android.yarrn.ravelry.dts.StashesResult; import de.vanmar.android.yarrn.requests.AbstractRavelryGetRequest; import de.vanmar.android.yarrn.requests.ListStashesRequest; @EFragment(R.layout.fragment_stashes) @OptionsMenu(R.menu.stashes_menu) public class StashesFragment extends PagingListFragment<StashesResult, StashShort> { @ViewById(R.id.stashlist) ListView stashlist; @ViewById(R.id.sort) Spinner sort; @ViewById(R.id.sort_reverse) CheckBox sortReverse; @Pref YarrnPrefs_ prefs; public interface StashesFragmentListener extends IRavelryActivity { /** * Stash with stashId was selected, 0 if no stash selected */ void onStashSelected(int stashId, String username); } private StashesFragment.StashesFragmentListener listener; private StashesAdapter adapter; @AfterViews @Override public void afterViews() { super.afterViews(); adapter = new StashesAdapter(getActivity()) { @Override protected void onStashClicked(final StashShort stash) { listener.onStashSelected(stash.id, prefs.username().get()); } }; stashlist.setAdapter(adapter); sort.setOnItemSelectedListener(null); sort.setSelection(prefs.stashSort().get(), false); sort.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { applySort(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); sortReverse.setOnCheckedChangeListener(null); sortReverse.setChecked(prefs.stashSortReverse().get()); sortReverse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { applySort(); } }); } @Override public void onAttach(final Activity activity) { super.onAttach(activity); if (activity instanceof StashesFragment.StashesFragmentListener) { listener = (StashesFragment.StashesFragmentListener) activity; } else { throw new ClassCastException(activity.toString() + " must implement StashesFragmentListener"); } } @Override public void onDetach() { super.onDetach(); listener = null; } private void applySort() { prefs.stashSort().put(sort.getSelectedItemPosition()); prefs.stashSortReverse().put(sortReverse.isChecked()); loadData(1); } @OptionsItem(R.id.menu_refresh) public void menuRefresh() { super.menuRefresh(); } protected void displayResult(final StashesResult result) { super.displayResult(result); getActivity().setTitle(R.string.my_stashes_title); } @Override protected ListView getListView() { return stashlist; } @Override protected YarrnAdapter<StashShort> getAdapter() { return adapter; } @Override protected AbstractRavelryGetRequest<StashesResult> getRequest(int page) { return new ListStashesRequest(this.getActivity().getApplication(), prefs, page, PAGE_SIZE); } @Override protected IRavelryActivity getRavelryActivity() { return listener; } }