package net.coding.program.task;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import com.loopj.android.http.RequestParams;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ui.BaseFragment;
import net.coding.program.maopao.MaopaoDetailActivity;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.detail.TopicEditFragment;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.ViewById;
import org.json.JSONException;
import org.json.JSONObject;
@EFragment(R.layout.fragment_task_descrip_html)
public class TaskDescripHtmlFragment extends BaseFragment {
private static final String TAG_HTTP_MD_PREVIEW = "TAG_HTTP_MD_PREVIEW";
@ViewById
WebView descWeb;
@ViewById
View loading;
@FragmentArg
String contentMd = "";
@FragmentArg
String contentHtml = "";
@FragmentArg
boolean preview = false;
ActionMode mActionMode;
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
int id = 0;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.menu_task_description_pre, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
((TaskDescrip) getActivity()).closeAndSave(contentMd);
return true;
case R.id.action_edit:
id = R.id.action_edit;
mActionMode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
FragmentManager manager = getActivity().getSupportFragmentManager();
manager.popBackStack();
if (id == R.id.action_edit) {
Fragment fragment = TaskDescripMdFragment_.builder().contentMd(contentMd).build();
manager
.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack("name")
.commit();
} else {
if (manager.getFragments().size() == 1) {
getActivity().finish();
}
}
}
};
@AfterViews
void init() {
setHasOptionsMenu(true);
Global.syncCookie(getActivity());
if (contentHtml.isEmpty()) {
mdToHtml();
mActionMode = getActivity().startActionMode(mActionModeCallback);
} else {
displayWebView();
}
}
private void displayWebView() {
String locateHtml = ((TaskDescrip) getActivity()).createLocateHtml(contentHtml);
descWeb.setWebViewClient(new MaopaoDetailActivity.CustomWebViewClient(getActivity(), locateHtml));
descWeb.getSettings().setJavaScriptEnabled(true);
descWeb.setBackgroundColor(0);
descWeb.getBackground().setAlpha(0);
descWeb.getSettings().setDefaultTextEncodingName("UTF-8");
descWeb.loadDataWithBaseURL(Global.HOST, locateHtml, "text/html", "UTF-8", null);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (preview) {
} else {
inflater.inflate(R.menu.menu_task_description, menu);
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(TAG_HTTP_MD_PREVIEW)) {
if (code == 0) {
contentHtml = respanse.optString("data", "");
displayWebView();
} else {
showButtomToast("发生错误");
}
loading.setVisibility(View.INVISIBLE);
}
}
private void mdToHtml() {
loading.setVisibility(View.VISIBLE);
RequestParams params = new RequestParams();
params.put("content", contentMd);
String projectPath = ((TopicEditFragment.SaveData) getActivity()).getProjectPath();
String uri = ProjectObject.getMdPreview(projectPath);
postNetwork(uri, params, TAG_HTTP_MD_PREVIEW);
}
@OptionsItem
void action_edit() {
Fragment fragment = TaskDescripMdFragment_.builder().contentMd(contentMd).build();
FragmentManager manager = getActivity().getSupportFragmentManager();
manager.popBackStack();
manager.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack("name")
.commit();
}
}