package com.kth.baasio.helpcenter.ui;
import com.actionbarsherlock.app.SherlockFragment;
import com.kth.baasio.Baas;
import com.kth.baasio.callback.BaasioCallback;
import com.kth.baasio.entity.user.BaasioUser;
import com.kth.baasio.exception.BaasioException;
import com.kth.baasio.help.BaasioHelp;
import com.kth.baasio.help.data.Question;
import com.kth.baasio.helpcenter.R;
import com.kth.baasio.helpcenter.prefereces.HelpCenterPreferences;
import com.kth.baasio.helpcenter.ui.dialog.DefaultDialogFragment;
import com.kth.baasio.helpcenter.ui.dialog.DefaultDialogFragment.DialogResultListener;
import com.kth.baasio.helpcenter.ui.dialog.DialogUtils;
import com.kth.baasio.helpcenter.utils.EtcUtils;
import com.kth.baasio.utils.ObjectUtils;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;
public class SendQuestionFragment extends SherlockFragment {
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
private ViewGroup mRootView;
private EditText mEmail;
private EditText mBody;
private TextView mCounter;
private Button mPost;
private int mMaxLength;
private OnQuestionSentListener mListener;
public interface OnQuestionSentListener {
void OnQuestionSent(Question question);
}
public SendQuestionFragment() {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setRetainInstance(true);
mRootView = (ViewGroup)inflater.inflate(R.layout.fragment_send_question, null);
mEmail = (EditText)mRootView.findViewById(R.id.textEmail);
BaasioUser current = Baas.io().getSignedInUser();
String email = HelpCenterPreferences.getHelpDeskEmail(getActivity());
if (!ObjectUtils.isEmpty(current)) {
if (!ObjectUtils.isEmpty(current.getEmail())) {
mEmail.setText(current.getEmail());
} else {
if (!ObjectUtils.isEmpty(email)) {
mEmail.setText(email);
}
}
} else {
if (!ObjectUtils.isEmpty(email)) {
mEmail.setText(email);
}
}
mBody = (EditText)mRootView.findViewById(R.id.textBody);
mMaxLength = getResources().getInteger(R.integer.question_max_length);
mBody.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCounter.setText(s.toString().length() + "/" + mMaxLength);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
mCounter = (TextView)mRootView.findViewById(R.id.textCounter);
mCounter.setText(0 + "/" + mMaxLength);
mPost = (Button)mRootView.findViewById(R.id.buttonPost);
mPost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String email = mEmail.getText().toString().trim();
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
if (!pattern.matcher(email).matches()) {
Toast.makeText(getActivity(),
getActivity().getResources().getString(R.string.error_invalid_email),
Toast.LENGTH_LONG).show();
return;
}
final String body = mBody.getText().toString().trim();
if (ObjectUtils.isEmpty(body)) {
Toast.makeText(getActivity(),
getActivity().getResources().getString(R.string.error_empty_question),
Toast.LENGTH_LONG).show();
return;
}
DefaultDialogFragment dialog = DialogUtils.showDefaultDialog(getActivity(),
"confirm_send", getString(R.string.label_question_post_title),
getString(R.string.label_question_post_body), true);
dialog.setDialogResultListener(new DialogResultListener() {
@Override
public boolean onPositiveButtonSelected(String tag) {
new Handler().post(new Runnable() {
@Override
public void run() {
DialogUtils.showProgressDialog(getActivity(), "sending_progress",
getString(R.string.label_question_posting),
ProgressDialog.STYLE_SPINNER);
}
});
BaasioHelp.sendQuestionInBackground(getActivity(), email, body,
new BaasioCallback<Question>() {
@Override
public void onException(BaasioException e) {
DialogUtils.dissmissProgressDialog(getActivity(),
"sending_progress");
// FIXME: 인증 실패일 경우 어떻게 처리할지 대응필요
DefaultDialogFragment dialog = DialogUtils
.showDefaultDialog(
getActivity(),
"question_sent",
getString(R.string.label_question_post_fail_title),
getString(R.string.label_question_post_fail_body),
false);
dialog.setDialogResultListener(new DialogResultListener() {
@Override
public boolean onPositiveButtonSelected(String tag) {
return false;
}
@Override
public boolean onNegativeButtonSelected(String tag) {
return false;
}
@Override
public boolean onDismiss(String tag,
DialogInterface dialog) {
return false;
}
});
}
@Override
public void onResponse(Question response) {
DialogUtils.dissmissProgressDialog(getActivity(),
"sending_progress");
if (!ObjectUtils.isEmpty(response)) {
onSent(response);
}
}
});
return false;
}
@Override
public boolean onNegativeButtonSelected(String tag) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onDismiss(String tag, DialogInterface dialog) {
// TODO Auto-generated method stub
return false;
}
});
}
});
if (ObjectUtils.isEmpty(Baas.io().getSignedInUser())) {
Toast.makeText(getActivity(), getString(R.string.error_need_login), Toast.LENGTH_LONG)
.show();
if (mPost != null) {
mPost.setEnabled(false);
}
}
return mRootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnQuestionSentListener)activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString());
}
}
private void onSent(final Question question) {
if (ObjectUtils.isEmpty(question)) {
return;
}
String dateString = "";
try {
String acceptedNumber = question.getAcceptedNumber();
SimpleDateFormat formatter = new SimpleDateFormat("yyMMddkkmmssSSS");
Date date = formatter.parse(acceptedNumber);
dateString = EtcUtils.getSimpleDateString(date.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
String result = getString(R.string.msg_send_question_success, dateString,
question.getEmail());
DefaultDialogFragment dialog = DialogUtils.showDefaultDialog(getActivity(),
"question_sent", "접수 완료", result, false);
dialog.setDialogResultListener(new DialogResultListener() {
@Override
public boolean onPositiveButtonSelected(String tag) {
return false;
}
@Override
public boolean onNegativeButtonSelected(String tag) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onDismiss(String tag, DialogInterface dialog) {
mBody.setText("");
HelpCenterPreferences.setHelpDeskEmail(getActivity(), question.getEmail());
mListener.OnQuestionSent(question);
return false;
}
});
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
}