package net.coding.program.project.detail.readme;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.TextView;
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.Depot;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.detail.merge.ReadmeEditActivity;
import net.coding.program.project.detail.merge.ReadmeEditActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.ViewById;
import org.json.JSONException;
import org.json.JSONObject;
@EFragment(R.layout.fragment_readme)
public class ReadmeFragment extends BaseFragment {
private static final int RESULT_EDIT = 1;
@FragmentArg
ProjectObject mProjectObject;
@ViewById
WebView webView;
@ViewById
View needReadme;
@ViewById
TextView readme;
private String hostGitTree;
private String hostProjectGit;
private ReadmeEditActivity.PostParam mPostParam;
private MenuItem mMenuItem;
private Depot mDepot;
@AfterViews
protected void init() {
hostProjectGit = mProjectObject.getProjectGit();
getNetwork(hostProjectGit);
setHasOptionsMenu(true);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(hostGitTree)) {
if (code == 0) {
JSONObject jsonData = respanse.optJSONObject("data");
JSONObject readmeJson = jsonData.optJSONObject("readme");
if (readmeJson == null) {
showEmptyReadme();
} else {
String readmeHtml = readmeJson.optString("preview", "");
if (readmeHtml.isEmpty()) {
updateMenu(false);
showEmptyReadme();
} else {
mPostParam = new ReadmeEditActivity.PostParam(jsonData, mDepot.getDefault_branch());
updateMenu(true);
String readmeName = readmeJson.optString("name", "");
readme.setText(readmeName);
needReadme.setVisibility(View.GONE);
webView.setVisibility(View.VISIBLE);
Global.initWebView(webView);
String bubble = "${webview_content}";
try {
bubble = Global.readTextFile(getResources().getAssets().open("markdown.html"));
} catch (Exception e) {
Global.errorLog(e);
}
webView.loadDataWithBaseURL(null, bubble.replace("${webview_content}", readmeHtml), "text/html", "UTF-8", null);
webView.setWebViewClient(new MaopaoDetailActivity.CustomWebViewClient(getActivity(), readmeHtml));
}
}
} else if (code == 1209) {
showEmptyReadme();
} else {
showErrorMsg(code, respanse);
}
} else if (tag.equals(hostProjectGit)) {
if (code == 0) {
JSONObject jsonObject = respanse.getJSONObject("data").getJSONObject("depot");
mDepot = new Depot(jsonObject);
hostGitTree = mProjectObject.getHttpGitTree(mDepot.getDefault_branch());
getNetwork(hostGitTree, hostGitTree);
} else {
showProgressBar(false);
showErrorMsg(code, respanse);
}
}
}
private void showEmptyReadme() {
readme.setText("README.md");
needReadme.setVisibility(View.VISIBLE);
webView.setVisibility(View.GONE);
}
@OptionsItem
void action_modify() {
ReadmeEditActivity_.intent(this)
.mProjectObject(mProjectObject)
.mPostParam(mPostParam)
.startForResult(RESULT_EDIT);
}
@OnActivityResult(RESULT_EDIT)
void onResultEdit(int resultCode) {
if (resultCode == Activity.RESULT_OK) {
init();
}
}
private void updateMenu(boolean hasReadme) {
mMenuItem.setVisible(hasReadme);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.readme_fragment, menu);
mMenuItem = menu.findItem(R.id.action_modify);
mMenuItem.setVisible(false);
super.onCreateOptionsMenu(menu, inflater);
}
}