package net.oschina.gitapp.ui.fragments; 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.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import net.oschina.gitapp.AppContext; import net.oschina.gitapp.AppException; import net.oschina.gitapp.R; import net.oschina.gitapp.adapter.CommitDiffListAdapter; import net.oschina.gitapp.bean.Commit; import net.oschina.gitapp.bean.CommitDiff; import net.oschina.gitapp.bean.CommonList; import net.oschina.gitapp.bean.Project; import net.oschina.gitapp.bean.URLs; import net.oschina.gitapp.common.Contanst; import net.oschina.gitapp.common.StringUtils; import net.oschina.gitapp.common.UIHelper; import net.oschina.gitapp.interfaces.OnStatusListener; import net.oschina.gitapp.ui.basefragment.BaseFragment; /** * 发现页面 * * @author 火蚁(http://my.oschina.net/LittleDY) * @created 2014-04-29 */ public class CommitFileDetailFragment extends BaseFragment implements OnStatusListener { private AppContext mAppContext; private Commit mCommit; private Project mProject; private ImageView mCommitAuthorFace; private TextView mCommitAuthorName; private TextView mCommitDate; private TextView mCmmitMessage; private View mLoading; private TextView mCommitFileSum; private LinearLayout mCommitDiffll; private CommonList<CommitDiff> mCommitDiffList = new CommonList<CommitDiff>(); private CommitDiffListAdapter adapter; public static CommitFileDetailFragment newInstance(Project project, Commit commit) { CommitFileDetailFragment fragment = new CommitFileDetailFragment(); Bundle args = new Bundle(); args.putSerializable(Contanst.PROJECT, project); args.putSerializable(Contanst.COMMIT, commit); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mAppContext = getGitApplication(); return inflater.inflate(R.layout.commit_detail_file_fragment, null); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(view); initData(); } private void initView(View view) { mCommitAuthorFace = (ImageView) view.findViewById(R.id.commit_author_face); mCommitAuthorName = (TextView) view.findViewById(R.id.commit_author_name); mCommitDate = (TextView) view.findViewById(R.id.commit_date); mCmmitMessage = (TextView) view.findViewById(R.id.commit_message); mLoading = view.findViewById(R.id.commit_diff_ll_loading); mCommitFileSum = (TextView) view.findViewById(R.id.commit_diff_changefile_sum); mCommitDiffll = (LinearLayout) view.findViewById(R.id.commit_diff_file_list); } private void initData() { Bundle args = getArguments(); if (args != null) { mProject = (Project) args.getSerializable(Contanst.PROJECT); mCommit = (Commit) args.getSerializable(Contanst.COMMIT); } mCommitDate.setText("提交于" + StringUtils.friendly_time(mCommit.getCreatedAt())); mCommitAuthorName.setText(mCommit.getAuthor_name()); mCmmitMessage.setText(mCommit.getTitle()); loadAuthorFace(); loadDatasCode(false); } @Override public void onStatus(int status) { } // 加载提交用户头像 private void loadAuthorFace() { String portrait = mCommit.getAuthor() == null ? null : mCommit.getAuthor().getPortrait(); if (portrait == null || portrait.endsWith(".gif")) { mCommitAuthorFace.setBackgroundResource(R.drawable.mini_avatar); } else { String faceurl = URLs.GITIMG + portrait; UIHelper.showUserFace(mCommitAuthorFace, faceurl); } } private void loadDatasCode(final boolean isRefresh) { onStatus(STATUS_LOADING); new AsyncTask<Void, Void, Message>() { @Override protected Message doInBackground(Void... params) { Message msg = new Message(); try { AppContext ac = getGitApplication(); CommonList<CommitDiff> commitDiffList = ac.getCommitDiffList(mProject.getId(), mCommit.getId(), isRefresh); msg.what = 1; msg.obj = commitDiffList; } catch (Exception e) { msg.what = -1; msg.obj = e; } return msg; } @Override protected void onPreExecute() { } @SuppressWarnings("unchecked") @Override protected void onPostExecute(Message msg) { if (msg.what == 1 && msg.obj != null) { mLoading.setVisibility(View.GONE); onStatus(STATUS_LOADED); mCommitDiffList = (CommonList<CommitDiff>) msg.obj; mCommitFileSum.setText(mCommitDiffList.getCount() + " 个文件发生了变化"); adapter = new CommitDiffListAdapter(mAppContext, mCommitDiffList.getList(), R.layout.commit_diff_listitem, mCommitDiffll); adapter.setData(mProject, mCommit); mCommitDiffll.setVisibility(View.VISIBLE); adapter.notifyDataSetChanged(); } else { mLoading.setVisibility(View.GONE); ((AppException)msg.obj).makeToast(getActivity()); onStatus(STATUS_NONE); } } }.execute(); } }