package com.myMinistry.fragments;
import java.util.Locale;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
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.telephony.PhoneNumberUtils;
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.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.myMinistry.FragmentActivityStatus;
import com.myMinistry.R;
import com.myMinistry.adapters.HouseholderRecentActivityAdapter;
import com.myMinistry.provider.MinistryContract.Householder;
import com.myMinistry.provider.MinistryDatabase;
import com.myMinistry.provider.MinistryService;
import com.squareup.phrase.Phrase;
public class HouseholderEditorFragment extends ListFragment {
public static final String ARG_HOUSEHOLDER_ID = "householder_id";
private boolean is_dual_pane = false;
/** Display vars */
private EditText et_name, et_address, et_phone_mobile, et_phone_home, et_phone_work, et_phone_other;
private CheckBox cb_is_active;
private TextView recent_activity_text;
/** Internal vars */
static final long CREATE_ID = (long)MinistryDatabase.CREATE_ID;
private long householderID = CREATE_ID;
private MinistryService database;
private Cursor activity;
private FragmentManager fm;
private HouseholderRecentActivityAdapter adapter;
private FragmentActivityStatus fragmentActivityStatus;
public HouseholderEditorFragment newInstance() {
return new HouseholderEditorFragment();
}
public HouseholderEditorFragment newInstance(long _householderID) {
HouseholderEditorFragment f = new HouseholderEditorFragment();
Bundle args = new Bundle();
args.putLong(ARG_HOUSEHOLDER_ID, _householderID);
f.setArguments(args);
return f;
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = fragmentActivityStatus.isDrawerOpen();
if(menu.findItem(R.id.menu_discard) != null)
menu.findItem(R.id.menu_discard).setVisible(!drawerOpen);
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 onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if(householderID == CREATE_ID)
inflater.inflate(R.menu.save_cancel, menu);
else
inflater.inflate(R.menu.save_cancel_discard, menu);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
fragmentActivityStatus = (FragmentActivityStatus)activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.householder_editor, container, false);
Bundle args = getArguments();
if(args != null)
setHouseholder(args.getLong(ARG_HOUSEHOLDER_ID));
setHasOptionsMenu(true);
fm = getActivity().getSupportFragmentManager();
et_name = (EditText) root.findViewById(R.id.et_name);
et_address = (EditText) root.findViewById(R.id.et_address);
et_phone_mobile = (EditText) root.findViewById(R.id.et_phone_mobile);
et_phone_home = (EditText) root.findViewById(R.id.et_phone_home);
et_phone_work = (EditText) root.findViewById(R.id.et_phone_work);
et_phone_other = (EditText) root.findViewById(R.id.et_phone_other);
cb_is_active = (CheckBox) root.findViewById(R.id.cb_is_active);
recent_activity_text = (TextView) root.findViewById(R.id.recent_activity_text);
adapter = new HouseholderRecentActivityAdapter(getActivity().getApplicationContext(), activity, (int)householderID);
setListAdapter(adapter);
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;
if(!is_dual_pane)
getActivity().setTitle(R.string.title_householder_edit);
fillForm();
}
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_save:
if(et_name.getText().toString().trim().length() > 0) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
et_phone_mobile.setText(PhoneNumberUtils.formatNumber(et_phone_mobile.getText().toString(), Locale.getDefault().getISO3Country()));
et_phone_home.setText(PhoneNumberUtils.formatNumber(et_phone_home.getText().toString(), Locale.getDefault().getISO3Country()));
et_phone_work.setText(PhoneNumberUtils.formatNumber(et_phone_work.getText().toString(), Locale.getDefault().getISO3Country()));
et_phone_other.setText(PhoneNumberUtils.formatNumber(et_phone_other.getText().toString(), Locale.getDefault().getISO3Country()));
} else {
et_phone_mobile.setText(PhoneNumberUtils.formatNumber(et_phone_mobile.getText().toString()));
et_phone_home.setText(PhoneNumberUtils.formatNumber(et_phone_home.getText().toString()));
et_phone_work.setText(PhoneNumberUtils.formatNumber(et_phone_work.getText().toString()));
et_phone_other.setText(PhoneNumberUtils.formatNumber(et_phone_other.getText().toString()));
}
ContentValues values = new ContentValues();
values.put(Householder.NAME, et_name.getText().toString().trim());
values.put(Householder.ACTIVE, (cb_is_active.isChecked()) ? 1 : 0);
values.put(Householder.ADDR, et_address.getText().toString().trim());
values.put(Householder.MOBILE_PHONE, et_phone_mobile.getText().toString().trim());
values.put(Householder.HOME_PHONE, et_phone_home.getText().toString().trim());
values.put(Householder.WORK_PHONE, et_phone_work.getText().toString().trim());
values.put(Householder.OTHER_PHONE, et_phone_other.getText().toString().trim());
database.openWritable();
if(householderID > 0) {
if(database.saveHouseholder(householderID, 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.createHouseholder(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) {
HouseholdersFragment f = (HouseholdersFragment) fm.findFragmentById(R.id.primary_fragment_container);
f.updateHouseholderList();
}
else {
HouseholdersFragment newFragment = new HouseholdersFragment().newInstance();
Fragment replaceFrag = fm.findFragmentById(R.id.primary_fragment_container);
FragmentTransaction transaction = fm.beginTransaction();
if(replaceFrag != null) {
transaction.remove(replaceFrag);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
transaction.add(R.id.primary_fragment_container, newFragment);
transaction.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(CREATE_ID);
else {
HouseholdersFragment newFragment = new HouseholdersFragment().newInstance();
Fragment replaceFrag = fm.findFragmentById(R.id.primary_fragment_container);
FragmentTransaction transaction = fm.beginTransaction();
if(replaceFrag != null) {
transaction.remove(replaceFrag);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
transaction.add(R.id.primary_fragment_container, newFragment);
transaction.commit();
}
return true;
case R.id.menu_discard:
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
database.openWritable();
database.deleteHouseholderByID((int)householderID);
database.close();
Toast.makeText(getActivity()
,Phrase.from(getActivity().getApplicationContext(), R.string.toast_deleted_with_space)
.put("name", et_name.getText().toString().trim())
.format()
, Toast.LENGTH_SHORT).show();
if(is_dual_pane) {
HouseholdersFragment f = (HouseholdersFragment) fm.findFragmentById(R.id.primary_fragment_container);
f.updateHouseholderList();
switchForm(CREATE_ID);
}
else {
HouseholdersFragment newFragment = new HouseholdersFragment().newInstance();
Fragment replaceFrag = fm.findFragmentById(R.id.primary_fragment_container);
FragmentTransaction transaction = fm.beginTransaction();
if(replaceFrag != null) {
transaction.remove(replaceFrag);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
transaction.add(R.id.primary_fragment_container, newFragment);
transaction.commit();
}
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.confirm_deletion)
.setPositiveButton(R.string.menu_delete, dialogClickListener)
.setNegativeButton(R.string.menu_cancel, dialogClickListener)
.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void setHouseholder(long _id) {
householderID = _id;
}
public void switchForm(long _id) {
ActivityCompat.invalidateOptionsMenu(getActivity());
setHouseholder(_id);
fillForm();
}
public void fillForm() {
et_name.setError(null);
if(householderID == CREATE_ID) {
et_name.setText("");
cb_is_active.setChecked(true);
et_address.setText("");
et_phone_mobile.setText("");
et_phone_home.setText("");
et_phone_work.setText("");
et_phone_other.setText("");
recent_activity_text.setVisibility(View.GONE);
getListView().setVisibility(View.GONE);
getListView().getEmptyView().setVisibility(View.GONE);
}
else {
recent_activity_text.setVisibility(View.VISIBLE);
getListView().setVisibility(View.VISIBLE);
getListView().getEmptyView().setVisibility(View.VISIBLE);
database.openWritable();
Cursor householder = database.fetchHouseholder((int) householderID);
if(householder.moveToFirst()) {
et_name.setText(householder.getString(householder.getColumnIndex(Householder.NAME)));
cb_is_active.setChecked((householder.getInt(householder.getColumnIndex(Householder.ACTIVE)) == 1) ? true : false);
et_address.setText(householder.getString(householder.getColumnIndex(Householder.ADDR)));
et_phone_mobile.setText(householder.getString(householder.getColumnIndex(Householder.MOBILE_PHONE)));
et_phone_home.setText(householder.getString(householder.getColumnIndex(Householder.HOME_PHONE)));
et_phone_work.setText(householder.getString(householder.getColumnIndex(Householder.WORK_PHONE)));
et_phone_other.setText(householder.getString(householder.getColumnIndex(Householder.OTHER_PHONE)));
}
else {
et_name.setText("");
cb_is_active.setChecked(true);
et_address.setText("");
et_phone_mobile.setText("");
et_phone_home.setText("");
et_phone_work.setText("");
et_phone_other.setText("");
}
householder.close();
activity = database.fetchActivityForHouseholder((int)householderID);
adapter.setHouseholderID((int)householderID);
adapter.changeCursor(activity);
database.close();
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
int LAYOUT_ID = (is_dual_pane) ? R.id.secondary_fragment_container : R.id.primary_fragment_container;
FragmentTransaction ft = fm.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment frag = fm.findFragmentById(LAYOUT_ID);
TimeEditorFragment f = new TimeEditorFragment().newInstance((int) id);
if(frag != null)
ft.remove(frag);
ft.add(LAYOUT_ID, f);
ft.addToBackStack(null);
ft.commit();
}
}