package com.likebamboo.osa.android.ui.fragments; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.fasterxml.jackson.databind.ObjectMapper; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.entity.BaseRsp; import com.likebamboo.osa.android.entity.Feedback; import com.likebamboo.osa.android.entity.IssueList; import com.likebamboo.osa.android.request.JsonRequest; import com.likebamboo.osa.android.request.RequestManager; import com.likebamboo.osa.android.request.RequestParams; import com.likebamboo.osa.android.request.RequestUrl; import com.likebamboo.osa.android.ui.view.LoadingLayout; import com.likebamboo.osa.android.ui.view.TagGroup; import com.likebamboo.osa.android.ui.view.blur.BlurDialogFragmentHelper; import com.likebamboo.osa.android.utils.ToastUtil; import com.likebamboo.osa.android.utils.ValidateUtil; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Random; import butterknife.ButterKnife; import butterknife.InjectView; /** * 反馈Fragment * * @author likebamboo */ public class FeedbackFragment extends DialogFragment { /** * 博客id */ public static final String EXTRA_BLOG_ID = "extra_blog_id"; /** * 博客标题 */ public static final String EXTRA_BLOG_TITLE = "extra_blog_title"; /** * TAG */ public static final String TAG = "feedback"; private BlurDialogFragmentHelper mHelper; /** * 反馈信息 */ private Feedback mFeedback = null; /** * 博客标题 */ private String mBlogTitle = ""; @InjectView(R.id.feed_title_tv) TextView mTitleTv; @InjectView(R.id.feed_contact_et) EditText mContactEt; @InjectView(R.id.feed_issues_tags) TagGroup mIssuesTag; @InjectView(R.id.feed_desc_et) EditText mDescEt; @InjectView(R.id.feed_submit_tv) TextView mSubmitTv; @InjectView(R.id.loading_layout) LoadingLayout mLoadingLayout; /** * */ ObjectMapper mapper = null; /** * instance * * @param blogId * @return */ public static FeedbackFragment getInstance(long blogId, String blogTitle) { FeedbackFragment fragment = new FeedbackFragment(); Bundle bundle = new Bundle(); bundle.putLong(EXTRA_BLOG_ID, blogId); bundle.putString(EXTRA_BLOG_TITLE, blogTitle); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHelper = new BlurDialogFragmentHelper(this); mHelper.setDismissOnTouch(false); mHelper.onCreate(); mFeedback = new Feedback(); mFeedback.setIssues(new ArrayList<String>()); if (getArguments() != null) { mFeedback.setBlogId(getArguments().getLong(EXTRA_BLOG_ID)); mBlogTitle = getArguments().getString(EXTRA_BLOG_TITLE); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_feedback, container, false); ButterKnife.inject(this, v); // 标题 mTitleTv.setText(mBlogTitle); // 加载tag loadingIssues(mIssuesTag); // 提交 mSubmitTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (getActivity() == null || getActivity().isFinishing()) { return; } // 验证联系方式 if (TextUtils.isEmpty(mContactEt.getText().toString().trim())) { ToastUtil.show(getActivity().getApplicationContext(), getString(R.string.please_input_contact)); return; } // 验证联系方式 if (!validateContact(mContactEt.getText().toString().trim())) { ToastUtil.show(getActivity().getApplicationContext(), getString(R.string.please_input_contact_correct)); return; } // 问题 if (mFeedback.getIssues() == null || mFeedback.getIssues().isEmpty()) { ToastUtil.show(getActivity().getApplicationContext(), getString(R.string.please_select_issues)); return; } // 问题详情 if (TextUtils.isEmpty(mDescEt.getText().toString().trim())) { ToastUtil.show(getActivity().getApplicationContext(), getString(R.string.please_write_detail)); return; } // 置为不可点击 mSubmitTv.setEnabled(false); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); mFeedback.setAddTime(sdf.format(new Date())); mFeedback.setContact(mContactEt.getText().toString().trim()); mFeedback.setDescription(mDescEt.getText().toString().trim()); doFeedback(); } }); return v; } /** * */ private void doFeedback() { if (mFeedback == null) { return; } mLoadingLayout.showLoading(true); RequestParams params = new RequestParams(); // Convert object to JSON string try { if (mapper == null) { mapper = new ObjectMapper(); } String json = mapper.writeValueAsString(mFeedback); params.add("feedback", json); } catch (Exception e) { e.printStackTrace(); return; } // 服务器端有BUG,post请求返回了cache-age,导致有缓存。 // 客户端做兼容方案, JsonRequest request = new JsonRequest<BaseRsp>(Request.Method.POST, String.format(RequestUrl.FEEDBACK_SAVE_URL, "" + (new Random()).nextInt()), BaseRsp.class, params, new Response.Listener<BaseRsp>() { @Override public void onResponse(BaseRsp resp) { mSubmitTv.setEnabled(true); if (getActivity() == null || getActivity().isFinishing()) { return; } mLoadingLayout.showLoading(false); if (resp != null && resp.getErrorCode() == 0) { // 请求成功 ToastUtil.show(getActivity().getApplicationContext(), getString(R.string.feedback_commit_success)); dismiss(); return; } if (resp != null) { // 请求失败 ToastUtil.show(getActivity().getApplicationContext(), resp.getMessage()); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { mSubmitTv.setEnabled(true); if (volleyError == null || getActivity() == null || getActivity().isFinishing()) { return; } mLoadingLayout.showLoading(false); // 请求失败 ToastUtil.show(getActivity().getApplicationContext(), volleyError.getMessage()); } }); RequestManager.addRequest(request, TAG); } /** * 验证联系方式格式 * * @param info * @return */ private boolean validateContact(String info) { if (TextUtils.isEmpty(info)) { return false; } return ValidateUtil.isEmail(info) || ValidateUtil.isPhoneNum(info); } /** * 加载issues列表 */ private void loadingIssues(final TagGroup tagGroup) { JsonRequest request = new JsonRequest<IssueList>(RequestUrl.ISSUES_LIST_URL, IssueList.class, new Response.Listener<IssueList>() { @Override public void onResponse(IssueList issueList) { if (issueList == null || getActivity() == null) { return; } ArrayList<IssueList.Issue> issues = issueList.getList(); if (issues != null && !issues.isEmpty()) { ArrayList<String> tags = new ArrayList<String>(); for (IssueList.Issue issue : issues) { tags.add(issue.getName()); } tagGroup.setTags(tags); // 设置tag单击事件 tagGroup.setOnTagClickListener(new TagGroup.IOnTagClickListener() { @Override public void onTagClick(String tag) { boolean selected = tagGroup.isTagSelected(tag); if (selected) { mFeedback.getIssues().remove(tag); } else { mFeedback.getIssues().add(tag); } tagGroup.setTagSelected(tag, !selected); } @Override public void onTagLongClick(String tag) { } }); } } }, null); RequestManager.addRequest(request, "issues"); } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mHelper.onActivityCreated(); } @Override public void onStart() { super.onStart(); mHelper.onStart(); } @Override public void onDismiss(DialogInterface dialog) { mHelper.onDismiss(); super.onDismiss(dialog); RequestManager.cancelAll("issues"); RequestManager.cancelAll(TAG); } }