package com.myMinistry.fragments;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Spinner;
import com.myMinistry.FragmentActivityStatus;
import com.myMinistry.Helper;
import com.myMinistry.R;
import com.myMinistry.adapters.NavDrawerMenuItemAdapter;
import com.myMinistry.adapters.TitleAndDateAdapter;
import com.myMinistry.model.NavDrawerMenuItem;
import com.myMinistry.provider.MinistryContract.LiteratureType;
import com.myMinistry.provider.MinistryDatabase;
import com.myMinistry.provider.MinistryService;
import com.myMinistry.util.HelpUtils;
import com.myMinistry.util.PrefUtils;
public class PublicationFragment extends ListFragment {
public static String ARG_PUBLICATION_ID = "publication_id";
private boolean is_dual_pane = false;
private MinistryService database;
private Spinner myspinner;
private TitleAndDateAdapter adapter;
private Cursor cursor;
private int literatureTypeId = 0;
private FragmentManager fm;
private NavDrawerMenuItemAdapter sadapter;
private FragmentActivityStatus fragmentActivityStatus;
public PublicationFragment newInstance() {
return new PublicationFragment();
}
public PublicationFragment newInstance(int literatureTypeId) {
PublicationFragment f = new PublicationFragment();
Bundle args = new Bundle();
args.putInt(ARG_PUBLICATION_ID, literatureTypeId);
f.setArguments(args);
return f;
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = fragmentActivityStatus.isDrawerOpen();
if(menu.findItem(R.id.literature_create) != null)
menu.findItem(R.id.literature_create).setVisible(!drawerOpen);
if(menu.findItem(R.id.sort_container) != null)
menu.findItem(R.id.sort_container).setVisible(!drawerOpen);
super.onPrepareOptionsMenu(menu);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
fragmentActivityStatus = (FragmentActivityStatus)activity;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.literature, menu);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
View root = inflater.inflate(R.layout.literature, container, false);
Bundle args = getArguments();
if(args != null && args.containsKey(ARG_PUBLICATION_ID))
literatureTypeId = args.getInt(ARG_PUBLICATION_ID);
database = new MinistryService(getActivity());
myspinner = (Spinner) root.findViewById(R.id.myspinner);
fm = getActivity().getSupportFragmentManager();
sadapter = new NavDrawerMenuItemAdapter(getActivity().getApplicationContext());
database.openWritable();
cursor = database.fetchActiveTypesOfLiterature();
while(cursor.moveToNext())
sadapter.addItem(new NavDrawerMenuItem(cursor.getString(cursor.getColumnIndex(LiteratureType.NAME)), Helper.getIconResIDByLitTypeID(cursor.getInt(cursor.getColumnIndex(LiteratureType._ID))), cursor.getInt(cursor.getColumnIndex(LiteratureType._ID))));
myspinner.setAdapter(sadapter);
myspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
updateLiteratureList(sadapter.getItem(position).getID());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
database.close();
if(literatureTypeId > 0) {
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
if(cursor.getInt(cursor.getColumnIndex(LiteratureType._ID)) == literatureTypeId) {
myspinner.setSelection(cursor.getPosition());
break;
}
}
}
root.findViewById(R.id.tv_add_item).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openEditor(PublicationEditorFragment.CREATE_ID);
}
});
return root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
is_dual_pane = getActivity().findViewById(R.id.secondary_fragment_container) != null;
getActivity().setTitle(R.string.navdrawer_item_publications);
database.openWritable();
adapter = new TitleAndDateAdapter(getActivity().getApplicationContext(), null, R.string.last_placed_on);
setListAdapter(adapter);
database.close();
if (is_dual_pane) {
Fragment frag = fm.findFragmentById(R.id.secondary_fragment_container);
PublicationEditorFragment f = new PublicationEditorFragment().newInstance();
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if(frag != null)
ft.remove(frag);
ft.add(R.id.secondary_fragment_container, f);
ft.commit();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.literature_create:
openEditor(PublicationEditorFragment.CREATE_ID);
return true;
case R.id.sort_alpha:
PrefUtils.setPublicationSort(getActivity(), MinistryDatabase.SORT_BY_ASC);
HelpUtils.sortPublications(getActivity().getApplicationContext(), MinistryDatabase.SORT_BY_ASC);
updateLiteratureList(literatureTypeId);
return true;
case R.id.sort_alpha_desc:
PrefUtils.setPublicationSort(getActivity(), MinistryDatabase.SORT_BY_DESC);
HelpUtils.sortPublications(getActivity().getApplicationContext(), MinistryDatabase.SORT_BY_DESC);
updateLiteratureList(literatureTypeId);
return true;
case R.id.sort_most_placed:
PrefUtils.setPublicationSort(getActivity(), MinistryDatabase.SORT_BY_POPULAR);
HelpUtils.sortPublications(getActivity().getApplicationContext(), MinistryDatabase.SORT_BY_POPULAR);
updateLiteratureList(literatureTypeId);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void updateLiteratureList(int typeID) {
if(literatureTypeId != typeID) {
literatureTypeId = typeID;
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
if(cursor.getInt(cursor.getColumnIndex(LiteratureType._ID)) == literatureTypeId) {
myspinner.setSelection(cursor.getPosition());
break;
}
}
}
database.openWritable();
adapter.loadNewData(database.fetchLiteratureByTypeWithActivityDates(literatureTypeId));
database.close();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
openEditor(id);
}
public void openEditor(long id) {
int LAYOUT_ID = (is_dual_pane) ? R.id.secondary_fragment_container : R.id.primary_fragment_container;
if (is_dual_pane) {
if(fm.findFragmentById(LAYOUT_ID) instanceof PublicationEditorFragment) {
PublicationEditorFragment fragment = (PublicationEditorFragment) fm.findFragmentById(LAYOUT_ID);
fragment.switchForm(id);
}
else {
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment frag = fm.findFragmentById(LAYOUT_ID);
PublicationEditorFragment f = new PublicationEditorFragment().newInstance(id);
if(frag != null)
ft.remove(frag);
ft.add(LAYOUT_ID, f);
ft.addToBackStack(null);
ft.commit();
}
}
else {
Fragment frag = fm.findFragmentById(LAYOUT_ID);
PublicationEditorFragment f = new PublicationEditorFragment().newInstance(id);
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
if(frag != null)
ft.remove(frag);
ft.add(LAYOUT_ID, f);
ft.addToBackStack(null);
ft.commit();
}
}
}