package pt.rupeal.invoicexpress.fragments;
import pt.rupeal.invoicexpress.MainActivity;
import pt.rupeal.invoicexpress.R;
import pt.rupeal.invoicexpress.enums.FragmentTagsEnum;
import pt.rupeal.invoicexpress.enums.RoleEnum;
import pt.rupeal.invoicexpress.fragments.DocumentsListFragment.DocumentFilterFragment;
import pt.rupeal.invoicexpress.layouts.SubTitleLayout;
import pt.rupeal.invoicexpress.layouts.ValueLabelImageLayout;
import pt.rupeal.invoicexpress.listeners.EmailListener;
import pt.rupeal.invoicexpress.listeners.PhoneCallListener;
import pt.rupeal.invoicexpress.model.ContactModel;
import pt.rupeal.invoicexpress.model.DocumentModel;
import pt.rupeal.invoicexpress.server.ContactDetailsRestHandler;
import pt.rupeal.invoicexpress.server.DocumentsRestHandler;
import pt.rupeal.invoicexpress.server.InvoiceXpress;
import pt.rupeal.invoicexpress.utils.ScreenLayoutUtil;
import pt.rupeal.invoicexpress.widgets.TextViewInvoiceXpress;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
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.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ContactDetailsFragment extends Fragment {
private View view;
private ContactModel contact;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// enable option menu
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate view
view = inflater.inflate(R.layout.contact_details, container, false);
// attach info to view
attachView();
return view;
}
private void attachView() {
// get contact
contact = (ContactModel) getArguments().getSerializable(ContactModel.CONTACT);
// contact title name
TextViewInvoiceXpress titleNameTextView = ((TextViewInvoiceXpress) view.findViewById(R.id.contact_details_title_name));
// calculate margin values
int margin = titleNameTextView.getPaddingLeft();
margin += titleNameTextView.getPaddingRight();
margin += ((ImageView) view.findViewById(R.id.contact_details_title_name_image)).getPaddingRight();
margin += ScreenLayoutUtil.convertDpToPixels(getActivity(), 80);
// set text
titleNameTextView.setText(getActivity(), contact.getName(), margin, TextViewInvoiceXpress.BREAK);
Button getInvoicesButton = ((Button) view.findViewById(R.id.contact_details_button));
getInvoicesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// vibrate - time in milliseconds
((Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE)).vibrate(50);
// debug log
if(InvoiceXpress.DEBUG) {
Log.d(this.getClass().getCanonicalName(), "Get invoices clicked for contact: " + contact.getName());
}
// check if the progress bar is visible to disable clicks
if(!InvoiceXpress.isInvoiceXpressClickable(getActivity())) {
return;
}
// verify if the user can consult invoices according his roles
if(!RoleEnum.isAllowToConsultInvoices(InvoiceXpress.getInstance().getActiveAccount().getRoles())) {
Toast.makeText(getActivity(), R.string.error_documents_roles, Toast.LENGTH_LONG).show();
return;
}
// call server if there are no documents in cache
if(InvoiceXpress.getInstance().getContacts().containsKey(contact.getId())
&& InvoiceXpress.getInstance().getContacts().get(contact.getId()).existsDocuments()) {
// set extra contact id. this will be read in DocumentsListFragment
Bundle args = new Bundle();
args.putString(DocumentModel.DOC_TYPE, "");
args.putString(ContactModel.ID, contact.getId());
// call fragment
((MainActivity) getActivity()).addFragment(DocumentsListFragment.class,
FragmentTagsEnum.DOCUMENTS_LIST,
args);
} else {
// get data from server
// set parameters
String[] params = new String[]{"", contact.getId(),
String.valueOf(DocumentFilterFragment.NO_FILTER), ""};
// execute web service
DocumentsRestHandler resthandler = new DocumentsRestHandler(getActivity());
InvoiceXpress.getInstance().setAsyncTaskActive(resthandler);
resthandler.execute(params);
}
}
});
if(contact.hasContactPreferredInfo()) {
((SubTitleLayout) view.findViewById(R.id.contact_details_preferred_subtitle)).setVisibility(View.VISIBLE);
((SubTitleLayout) view.findViewById(R.id.contact_details_preferred_subtitle)).setTextToTextViewLeft(R.string.contact_details_preferred_title);
} else {
((SubTitleLayout) view.findViewById(R.id.contact_details_preferred_subtitle)).setVisibility(View.GONE);
}
if(contact.hasPreferredName()) {
((LinearLayout) view.findViewById(R.id.contact_details_preferred_name_layout)).setVisibility(LinearLayout.VISIBLE);
((View) view.findViewById(R.id.contact_details_preferred_name_layout_line)).setVisibility(View.VISIBLE);
TextViewInvoiceXpress preferredNameTextView = ((TextViewInvoiceXpress) view.findViewById(R.id.contact_details_preferred_name));
margin = ((ViewGroup.MarginLayoutParams) preferredNameTextView.getLayoutParams()).leftMargin;
margin += ((ViewGroup.MarginLayoutParams) preferredNameTextView.getLayoutParams()).rightMargin;
preferredNameTextView.setText(getActivity(), contact.getPreferredName(), margin, TextViewInvoiceXpress.RESIZE);
} else {
((LinearLayout) view.findViewById(R.id.contact_details_preferred_name_layout)).setVisibility(LinearLayout.GONE);
((View) view.findViewById(R.id.contact_details_preferred_name_layout_line)).setVisibility(View.GONE);
}
if(contact.hasPreferredPhone()) {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setVisibility(View.VISIBLE);
((View) view.findViewById(R.id.contact_details_preferred_phone_line)).setVisibility(View.VISIBLE);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setText(getActivity(), contact.getPreferredPhone());
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setLabel(R.string.details_phone);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setImage(R.drawable.ic_device_access_call);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setOnClickListener(
new PhoneCallListener(getActivity(), contact.getPreferredPhone()));
} else {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_phone)).setVisibility(View.GONE);
((View) view.findViewById(R.id.contact_details_preferred_phone_line)).setVisibility(View.GONE);
}
if(contact.hasPreferredEmail()) {
ValueLabelImageLayout preferredEmailLayout = ((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_email));
// set layout visible
preferredEmailLayout.setVisibility(View.VISIBLE);
((View) view.findViewById(R.id.contact_details_preferred_email_line)).setVisibility(View.VISIBLE);
// set values
preferredEmailLayout.setText(getActivity(), contact.getPreferredEmail());
preferredEmailLayout.setLabel(R.string.details_email);
preferredEmailLayout.setImage(R.drawable.ic_content_email);
preferredEmailLayout.setOnClickListener(new EmailListener(getActivity(), contact.getPreferredEmail()));
} else {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_preferred_email)).setVisibility(View.GONE);
((View) view.findViewById(R.id.contact_details_preferred_email_line)).setVisibility(View.GONE);
}
if(contact.hasContactInfo()) {
((SubTitleLayout) view.findViewById(R.id.contact_details_general_subtitle)).setVisibility(View.VISIBLE);
((SubTitleLayout) view.findViewById(R.id.contact_details_general_subtitle)).setTextToTextViewLeft(R.string.details_general_subTitle);
} else {
((SubTitleLayout) view.findViewById(R.id.contact_details_general_subtitle)).setVisibility(View.GONE);
}
if(!contact.hasAddress() && !contact.hasPostalCode() && !contact.hasCountry()) {
((LinearLayout) view.findViewById(R.id.contact_details_address_layout)).setVisibility(LinearLayout.GONE);
((View) view.findViewById(R.id.contact_details_address_layout_line)).setVisibility(View.GONE);
} else {
((LinearLayout) view.findViewById(R.id.contact_details_address_layout)).setVisibility(LinearLayout.VISIBLE);
((View) view.findViewById(R.id.contact_details_address_layout_line)).setVisibility(View.VISIBLE);
}
if(contact.hasPostalCode()) {
((TextView) view.findViewById(R.id.contact_details_postal_code)).setVisibility(View.VISIBLE);
((TextView) view.findViewById(R.id.contact_details_postal_code)).setText(contact.getPostalCode());
} else {
((TextView) view.findViewById(R.id.contact_details_postal_code)).setVisibility(View.GONE);
}
if(contact.hasCountry()) {
((TextView) view.findViewById(R.id.contact_details_country)).setVisibility(View.VISIBLE);
((TextView) view.findViewById(R.id.contact_details_country)).setText(contact.getCountry());
} else {
((TextView) view.findViewById(R.id.contact_details_country)).setVisibility(View.GONE);
}
if(contact.hasAddress()) {
((TextView) view.findViewById(R.id.contact_details_address)).setVisibility(View.VISIBLE);
((TextView) view.findViewById(R.id.contact_details_address)).setText(contact.getAddress());
} else {
((TextView) view.findViewById(R.id.contact_details_address)).setVisibility(View.GONE);
}
if(contact.hasPhone()) {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setVisibility(View.VISIBLE);
((View) view.findViewById(R.id.contact_details_phone_line)).setVisibility(View.VISIBLE);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setText(getActivity(), contact.getPhone());
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setLabel(R.string.details_phone);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setImage(R.drawable.ic_device_access_call);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setOnClickListener(
new PhoneCallListener(getActivity(), contact.getPhone()));
} else {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_phone)).setVisibility(View.GONE);
((View) view.findViewById(R.id.contact_details_phone_line)).setVisibility(View.GONE);
}
if(contact.hasFax()) {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_fax)).setVisibility(View.VISIBLE);
((View) view.findViewById(R.id.contact_details_fax_line)).setVisibility(View.VISIBLE);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_fax)).setText(getActivity(), contact.getFax());
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_fax)).setLabel(R.string.details_fax);
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_fax)).setImage(R.drawable.ic_device_access_call);
} else {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_fax)).setVisibility(View.GONE);
((View) view.findViewById(R.id.contact_details_fax_line)).setVisibility(View.GONE);
}
if(contact.hasEmail()) {
ValueLabelImageLayout emailLayout = ((ValueLabelImageLayout) view.findViewById(R.id.contact_details_email));
emailLayout.setVisibility(View.VISIBLE);
((View) view.findViewById(R.id.contact_details_email_line)).setVisibility(View.VISIBLE);
emailLayout.setText(getActivity(), contact.getEmail());
emailLayout.setLabel(R.string.details_email);
emailLayout.setImage(R.drawable.ic_content_email);
emailLayout.setOnClickListener(new EmailListener(getActivity(), contact.getEmail()));
} else {
((ValueLabelImageLayout) view.findViewById(R.id.contact_details_email)).setVisibility(View.GONE);
((View) view.findViewById(R.id.contact_details_email_line)).setVisibility(View.GONE);
}
if(contact.hasFiscalId()) {
((LinearLayout) view.findViewById(R.id.contact_details_nif_layout)).setVisibility(LinearLayout.VISIBLE);
((View) view.findViewById(R.id.contact_details_nif_layout_line)).setVisibility(View.VISIBLE);
((TextView) view.findViewById(R.id.contact_details_nif)).setText(contact.getFiscalId());
} else {
((LinearLayout) view.findViewById(R.id.contact_details_nif_layout)).setVisibility(LinearLayout.GONE);
((View) view.findViewById(R.id.contact_details_nif_layout_line)).setVisibility(View.GONE);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.action_bar_contact_details, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh_tab:
// refresh and get contact details from server
String[] params = new String[] {contact.getId(), "true"};
new ContactDetailsRestHandler(getActivity()).execute(params);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}