package net.oschina.gitapp.ui.fragments;
import java.io.UnsupportedEncodingException;
import static net.oschina.gitapp.common.Contanst.CHARSET_UTF8;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.TextView;
import net.oschina.gitapp.AppException;
import net.oschina.gitapp.R;
import net.oschina.gitapp.api.HTTPRequestor;
import net.oschina.gitapp.bean.CodeFile;
import net.oschina.gitapp.bean.Project;
import net.oschina.gitapp.common.Contanst;
import net.oschina.gitapp.common.UIHelper;
import net.oschina.gitapp.ui.basefragment.BaseFragment;
import net.oschina.gitapp.util.EncodingUtils;
/**
* 项目介绍readmeFragment
* @created 2014-06-24
* @author 火蚁(http://my.oschina.net/LittleDY)
*
* 最后更新
* 更新者
*/
public class ProjectReadMeFragment extends BaseFragment {
private Project mProject;
private View mLoading;
private WebView mWebView;
public static ProjectReadMeFragment newInstance(Project project) {
ProjectReadMeFragment fragment = new ProjectReadMeFragment();
Bundle args = new Bundle();
args.putSerializable(Contanst.PROJECT, project);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
Bundle args = getArguments();
if (args != null) {
mProject = (Project) args.getSerializable(Contanst.PROJECT);
}
super.onCreate(savedInstanceState);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
loadData();
}
private void initView(View view) {
mLoading = view.findViewById(R.id.project_readme_loading);
mWebView = (WebView) view.findViewById(R.id.project_readme_webview);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.project_readme_fragment, null);
}
private void loadData() {
new AsyncTask<Void, Void, Message>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Message doInBackground(Void... params) {
Message msg = new Message();
try {
CodeFile codeFile = getGitApplication().getCodeFile(mProject.getId(), "README.md", "master");
msg.what = 1;
msg.obj = codeFile;
} catch (Exception e) {
msg.what = -1;
msg.obj = e;
e.printStackTrace();
}
return msg;
}
@Override
protected void onPostExecute(Message msg) {
if (getActivity().isFinishing()) {
return;
}
mLoading.setVisibility(View.GONE);
if (msg.what == 1) {
CodeFile codeFile = (CodeFile) msg.obj;
mWebView.setVisibility(View.VISIBLE);
mWebView.loadDataWithBaseURL(null,
UIHelper.WEB_STYLE + getCodeContent(codeFile), "text/html", HTTPRequestor.UTF_8, null);
} else {
if (msg.obj instanceof AppException) {
AppException e = (AppException)msg.obj;
if (e.getCode() == 404) {
getActivity().findViewById(R.id.project_readme_empty).setVisibility(View.VISIBLE);
} else {
((AppException)msg.obj).makeToast(getGitApplication());
}
}
}
}
}.execute();
}
private String getCodeContent(CodeFile codeFile) {
String res = null;
try {
res = new String(EncodingUtils.fromBase64(codeFile.getContent()), CHARSET_UTF8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}
}