package com.myMinistry.fragments;
import android.app.Activity;
import android.content.ContentValues;
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.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.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.myMinistry.FragmentActivityStatus;
import com.myMinistry.R;
import com.myMinistry.provider.MinistryContract.EntryType;
import com.myMinistry.provider.MinistryDatabase;
import com.myMinistry.provider.MinistryService;
import com.myMinistry.util.PrefUtils;
import com.squareup.phrase.Phrase;
public class EntryTypeManagerEditorFrag extends Fragment {
public static final String ARG_ENTRY_TYPE_ID = "entry_type_id";
private boolean is_dual_pane = false;
private EditText et_name;
private CheckBox cb_is_active;
private TextView tv_note;
private long resID = 0;
private MinistryService database;
private FragmentActivityStatus fragmentActivityStatus;
public EntryTypeManagerEditorFrag newInstance() {
return new EntryTypeManagerEditorFrag();
}
public EntryTypeManagerEditorFrag newInstance(long id) {
EntryTypeManagerEditorFrag f = new EntryTypeManagerEditorFrag();
Bundle args = new Bundle();
args.putLong(ARG_ENTRY_TYPE_ID, id);
f.setArguments(args);
return f;
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = fragmentActivityStatus.isDrawerOpen();
if(menu.findItem(R.id.menu_save) != null)
menu.findItem(R.id.menu_save).setVisible(!drawerOpen);
if(menu.findItem(R.id.menu_cancel) != null)
menu.findItem(R.id.menu_cancel).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.save_cancel, menu);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.entry_type_manager_editor, container, false);
Bundle args = getArguments();
if(args != null && args.containsKey(ARG_ENTRY_TYPE_ID))
setPublication(args.getLong(ARG_ENTRY_TYPE_ID));
setHasOptionsMenu(true);
et_name = (EditText) root.findViewById(R.id.et_name);
cb_is_active = (CheckBox) root.findViewById(R.id.cb_is_active);
tv_note = (TextView) root.findViewById(R.id.tv_note);
database = new MinistryService(getActivity().getApplicationContext());
return root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
is_dual_pane = getActivity().findViewById(R.id.secondary_fragment_container) != null;
fillForm();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
switch (item.getItemId()) {
case R.id.menu_save:
if(et_name.getText().toString().trim().length() > 0) {
ContentValues values = new ContentValues();
values.put(EntryType.NAME, et_name.getText().toString().trim());
values.put(EntryType.ACTIVE, (cb_is_active.isChecked()) ? 1 : 0);
if(database.isOpen())
database.close();
database.openWritable();
if(resID > 0) {
if(database.saveEntryType(resID, values) > 0) {
Toast.makeText(getActivity()
,Phrase.from(getActivity().getApplicationContext(), R.string.toast_saved_with_space)
.put("name", et_name.getText().toString().trim())
.format()
, Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getActivity()
,Phrase.from(getActivity().getApplicationContext(), R.string.toast_saved_problem_with_space)
.put("name", et_name.getText().toString().trim())
.format()
, Toast.LENGTH_SHORT).show();
}
}
else {
if(database.createEntryType(values) > 0) {
Toast.makeText(getActivity()
,Phrase.from(getActivity().getApplicationContext(), R.string.toast_created_with_space)
.put("name", et_name.getText().toString().trim())
.format()
, Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getActivity()
,Phrase.from(getActivity().getApplicationContext(), R.string.toast_created_problem_with_space)
.put("name", et_name.getText().toString().trim())
.format()
, Toast.LENGTH_SHORT).show();
}
}
database.close();
if(is_dual_pane) {
EntryTypeManagerFrag f = (EntryTypeManagerFrag) fm.findFragmentById(R.id.primary_fragment_container);
f.sortList(PrefUtils.getEntryTypeSort(getActivity()));
f.reloadCursor();
}
else {
Fragment frag = fm.findFragmentById(R.id.primary_fragment_container);
EntryTypeManagerFrag f = new EntryTypeManagerFrag().newInstance();
if(frag != null)
ft.remove(frag);
ft.add(R.id.primary_fragment_container, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
else {
et_name.setError(getActivity().getApplicationContext().getString(R.string.toast_provide_name));
et_name.setFocusable(true);
et_name.requestFocus();
}
return true;
case R.id.menu_cancel:
if(is_dual_pane)
switchForm(MinistryDatabase.CREATE_ID);
else {
Fragment frag = fm.findFragmentById(R.id.primary_fragment_container);
EntryTypeManagerFrag f = new EntryTypeManagerFrag().newInstance();
if(frag != null)
ft.remove(frag);
ft.add(R.id.primary_fragment_container, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void setPublication(long _id) {
resID = _id;
}
public void switchForm(long _id) {
setPublication(_id);
fillForm();
}
public void fillForm() {
et_name.setError(null);
database.openWritable();
Cursor cursor = database.fetchEntryType((int)resID);
if(cursor.moveToFirst()) {
et_name.setText(cursor.getString(cursor.getColumnIndex(EntryType.NAME)));
cb_is_active.setChecked((cursor.getInt(cursor.getColumnIndex(EntryType.ACTIVE)) == 1) ? true : false);
if((int)resID == MinistryDatabase.ID_ROLLOVER) {
tv_note.setVisibility(View.VISIBLE);
cb_is_active.setEnabled(false);
} else {
tv_note.setVisibility(View.GONE);
cb_is_active.setEnabled(true);
}
}
else {
et_name.setText("");
cb_is_active.setChecked(true);
tv_note.setVisibility(View.GONE);
}
cursor.close();
database.close();
}
}