package com.linangran.tgfcapp.fragments;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.util.Log;
import android.view.*;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.linangran.tgfcapp.R;
import com.linangran.tgfcapp.data.EditPostData;
import com.linangran.tgfcapp.data.HttpResult;
import com.linangran.tgfcapp.tasks.EditPostTask;
import com.linangran.tgfcapp.tasks.PostTask;
import com.linangran.tgfcapp.utils.ErrorHandlerUtils;
import com.linangran.tgfcapp.utils.PreferenceUtils;
/**
* Created by linangran on 26/1/15.
*/
public class PostFragment extends Fragment
{
EditText titleEditText;
TextView quotedTextView;
EditText contentEditText;
LinearLayout quotedTextLayout;
LinearLayout titleLayout;
public boolean doNotSave = false;
int fid = -1;
int tid = -1;
int quotePid = -1;
int editPid = -1;
boolean isReply;
String mainTitle;
boolean hasQuote;
String quotedText;
boolean isEdit = false;
ProgressDialog loadingDialog;
PostTask postTask;
EditPostTask editPostTask;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
Bundle bundle = getArguments();
isReply = bundle.getBoolean("isReply", false);
isEdit = bundle.getBoolean("isEdit", false);
if (isEdit)
{
editPid = bundle.getInt("editPid");
tid = bundle.getInt("tid");
}
else
{
fid = bundle.getInt("fid");
if (isReply)
{
tid = bundle.getInt("tid");
hasQuote = bundle.getBoolean("hasQuote", false);
if (hasQuote)
{
quotePid = bundle.getInt("quotePid");
quotedText = bundle.getString("quotedText");
}
mainTitle = bundle.getString("mainTitle");
}
}
View fragment = inflater.inflate(R.layout.fragment_post, container, false);
this.titleEditText = (EditText) fragment.findViewById(R.id.fragment_post_title_edit_text);
this.quotedTextView = (TextView) fragment.findViewById(R.id.fragment_post_quoted_text_view);
this.contentEditText = (EditText) fragment.findViewById(R.id.fragment_post_content_edit_text);
this.titleLayout = (LinearLayout) fragment.findViewById(R.id.fragment_post_title_layout);
this.quotedTextLayout = (LinearLayout) fragment.findViewById(R.id.fragment_post_quoted_text_layout);
updateUI();
if (isEdit)
{
startFetchEditText(editPid, tid);
}
return fragment;
}
public void updateUI()
{
if (isReply)
{
this.titleLayout.setVisibility(View.GONE);
if (hasQuote)
{
this.quotedTextLayout.setVisibility(View.VISIBLE);
this.quotedTextView.setText(Html.fromHtml(quotedText), TextView.BufferType.SPANNABLE);
}
else
{
this.quotedTextLayout.setVisibility(View.GONE);
}
}
else
{
this.titleLayout.setVisibility(View.VISIBLE);
this.quotedTextLayout.setVisibility(View.GONE);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.menu_fragment_post, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
ClearContentListener clearContentListener;
AlertDialog.Builder builder;
switch (item.getItemId())
{
case R.id.menu_fragment_post_clear:
clearContentListener = new ClearContentListener(false);
builder = new AlertDialog.Builder(this.getActivity()).setMessage("确定清空吗?\n这也会同时清除您已保存的草稿").setPositiveButton(R.string.text_positive, clearContentListener).setNegativeButton(R.string.text_negative, clearContentListener);
builder.show();
return true;
case R.id.menu_fragment_post_discard:
clearContentListener = new ClearContentListener(true);
builder = new AlertDialog.Builder(this.getActivity()).setMessage("确定放弃所有改动吗?\n您自上次保存后的所有改动均会丢失").setPositiveButton(R.string.text_positive, clearContentListener).setNegativeButton(R.string.text_negative, clearContentListener);
builder.show();
return true;
case R.id.menu_fragment_post_send:
startPostTask();
return true;
}
return super.onOptionsItemSelected(item);
}
class ClearContentListener implements DialogInterface.OnClickListener
{
public boolean isDiscard = false;
public ClearContentListener(boolean isDiscard)
{
this.isDiscard = isDiscard;
}
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
switch (i)
{
case DialogInterface.BUTTON_POSITIVE:
if (isDiscard)
{
discardDraft();
}
else
{
clearText();
}
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
}
public void clearText()
{
this.titleEditText.setText("");
this.contentEditText.setText("");
PreferenceUtils.discardDraft();
Toast.makeText(this.getActivity(), "草稿已清空", Toast.LENGTH_SHORT).show();
}
public void discardDraft()
{
if (PreferenceUtils.hasDraft())
{
this.titleEditText.setText(PreferenceUtils.getDraftTitle());
this.contentEditText.setText(PreferenceUtils.getDraftContent());
}
this.doNotSave = true;
Toast.makeText(this.getActivity(), "已撤销所有改动", Toast.LENGTH_SHORT).show();
navigationReturn();
}
@Override
public void onPause()
{
super.onPause();
if (this.titleEditText.getText().toString().trim().length() != 0 || this.contentEditText.getText().toString().trim().length() != 0)
{
if (doNotSave == false)
{
PreferenceUtils.saveDraft(this.titleEditText.getText().toString().trim(), this.contentEditText.getText().toString().trim());
Toast.makeText(this.getActivity(), "已保存为草稿", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onResume()
{
super.onResume();
if (PreferenceUtils.hasDraft())
{
this.titleEditText.setText(PreferenceUtils.getDraftTitle());
this.contentEditText.setText(PreferenceUtils.getDraftContent());
}
}
public void finishPost(HttpResult<Boolean> result)
{
this.loadingDialog.dismiss();
if (result.hasError)
{
ErrorHandlerUtils.handleError(result, this.getActivity());
}
else
{
if (result.result == true)
{
Toast.makeText(this.getActivity(), "发送成功", Toast.LENGTH_SHORT).show();
PreferenceUtils.discardDraft();
this.doNotSave = true;
this.navigationReturn();
}
else
{
Toast.makeText(this.getActivity(), "发送失败", Toast.LENGTH_SHORT).show();
}
}
}
public void navigationReturn()
{
this.getActivity().finish();
}
public void startPostTask()
{
this.postTask = new PostTask(this);
String title = isReply ? mainTitle : titleEditText.getText().toString();
String content = contentEditText.getText().toString();
this.postTask.setPostData(isReply, hasQuote, isEdit, fid, tid, quotePid, editPid, title, content);
this.loadingDialog = ProgressDialog.show(this.getActivity(), "", "正在提交,请稍后...", true);
this.postTask.execute();
}
public void startFetchEditText(int pid, int tid)
{
loadingDialog = ProgressDialog.show(this.getActivity(), "", "正在加载原始回帖", true);
if (this.editPostTask == null || this.editPostTask.getStatus().equals(AsyncTask.Status.RUNNING) == false)
{
this.editPostTask = new EditPostTask(pid, tid, this);
this.editPostTask.execute();
}
}
public void finishFetchEditText(HttpResult<EditPostData> result)
{
loadingDialog.dismiss();
if (result.hasError)
{
ErrorHandlerUtils.handleError(result, this.getActivity());
}
else
{
this.isReply = result.result.isReply;
//Log.w("", String.valueOf(this.isReply));
this.hasQuote = false;
if (isReply == false)
{
this.titleEditText.setText(result.result.title);
}
this.contentEditText.setText(result.result.content);
updateUI();
}
}
}