package net.coding.program.project; import android.content.DialogInterface; import android.view.View; import android.widget.TextView; import com.loopj.android.http.RequestParams; import com.readystatesoftware.viewbadger.BadgeView; import net.coding.program.R; import net.coding.program.common.Global; import net.coding.program.common.RedPointTip; import net.coding.program.common.umeng.UmengEvent; import net.coding.program.model.DynamicObject; import net.coding.program.model.ProjectObject; import net.coding.program.project.detail.ProjectActivity; import net.coding.program.project.detail.ProjectActivity_; import net.coding.program.project.git.ForksListActivity_; import net.coding.program.user.UsersListActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ViewById; import org.json.JSONException; import org.json.JSONObject; @EFragment(R.layout.fragment_public_project_home) //@OptionsMenu(R.menu.menu_fragment_project_home_public) public class PublicProjectHomeFragment extends BaseProjectHomeFragment { @ViewById View buttonStar, buttonWatch, buttonFork; ProjectMarkButton mButtonStar; ProjectMarkButton mButtonWatch; ProjectMarkButton mButtonFork; String mUrlStar; String mUrlUnstar; String mUrlWatch; String mUrlUnwatch; private String httpProjectObject; private String forkUrl; @AfterViews final void init() { mUrlStar = mProjectObject.getHttpStar(true); mUrlUnstar = mProjectObject.getHttpStar(false); mUrlWatch = mProjectObject.getHttpWatch(true); mUrlUnwatch = mProjectObject.getHttpWatch(false); View mRoot = getView(); initHead2(); initHead3(mRoot); httpProjectObject = mProjectObject.getHttpProjectObject(); getNetwork(httpProjectObject); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(httpProjectObject)) { if (code == 0) { mProjectObject = new ProjectObject(respanse.getJSONObject("data")); initHead2(); } else { showErrorMsg(code, respanse); } } else if (tag.equals(mUrlStar) || tag.equals(mUrlUnstar)) { umengEvent(UmengEvent.PROJECT, "收藏项目"); if (tag.equals(mUrlStar)) { umengEvent(UmengEvent.CODE, "收藏"); } else { umengEvent(UmengEvent.CODE, "取消收藏"); } if (code != 0) { mButtonStar.changeState(); showErrorMsg(code, respanse); } } else if (tag.equals(mUrlWatch) || tag.equals(mUrlUnwatch)) { umengEvent(UmengEvent.PROJECT, "关注项目"); if (tag.equals(mUrlWatch)) { umengEvent(UmengEvent.CODE, "关注"); } else { umengEvent(UmengEvent.CODE, "取消关注"); } if (code != 0) { mButtonWatch.changeState(); showErrorMsg(code, respanse); } } else if (tag.equals(forkUrl)) { showProgressBar(false); if (code == 0) { umengEvent(UmengEvent.PROJECT, "Fork"); umengEvent(UmengEvent.CODE, "Fork"); JSONObject jsonData = respanse.getJSONObject("data"); String projectName = jsonData.optString("name"); DynamicObject.Owner owner = new DynamicObject.Owner(jsonData.optJSONObject("owner")); ProjectActivity.ProjectJumpParam param = new ProjectActivity.ProjectJumpParam(owner.global_key, projectName); ProjectHomeActivity_ .intent(this) .mJumpParam(param) .start(); mButtonFork.changeState(); } else { showErrorMsg(code, respanse); } } } private void initHead2() { String[][] titles = new String[][]{ new String[]{"收藏", "已收藏"}, new String[]{"关注", "已关注"}, new String[]{"Fork", "Fork"}, }; int[][] titlesColors = new int[][]{ new int[]{0xff222222, 0xffffffff}, new int[]{0xff222222, 0xffffffff}, new int[]{0xff222222, 0xff222222}, }; int[][] icons = new int[][]{ new int[]{R.drawable.project_home_button_public_star, R.drawable.project_home_button_public_ok}, new int[]{R.drawable.project_home_button_public_watch, R.drawable.project_home_button_public_ok}, new int[]{R.drawable.project_home_button_public_fork, R.drawable.project_home_button_public_fork}, }; int[][] backgroundLeft = new int[][]{ new int[]{R.drawable.public_star_button_bg_left0, R.drawable.public_star_button_bg_left1}, new int[]{R.drawable.public_star_button_bg_left0, R.drawable.public_star_button_bg_left1}, new int[]{R.drawable.public_star_button_bg_left0, R.drawable.public_star_button_bg_left0}, }; int[][] backgroundRight = new int[][]{ new int[]{R.drawable.public_star_button_bg_right0, R.drawable.public_star_button_bg_right1}, new int[]{R.drawable.public_star_button_bg_right0, R.drawable.public_star_button_bg_right1}, new int[]{R.drawable.public_star_button_bg_right0, R.drawable.public_star_button_bg_right0}, }; mButtonStar = new ProjectMarkButton(buttonStar, titles[0], titlesColors[0], icons[0], backgroundLeft[0], backgroundRight[0], mProjectObject.stared, mProjectObject.star_count, onClickStatCount); mButtonWatch = new ProjectMarkButton(buttonWatch, titles[1], titlesColors[1], icons[1], backgroundLeft[1], backgroundRight[1], mProjectObject.watched, mProjectObject.watch_count, onClickFollowCount); mButtonFork = new ProjectMarkButton(buttonFork, titles[2], titlesColors[2], icons[2], backgroundLeft[2], backgroundRight[2], mProjectObject.forked, mProjectObject.fork_count, onClickForkCount); } View.OnClickListener onClickStatCount = new View.OnClickListener() { @Override public void onClick(View v) { String title = String.format("收藏了 %s 的人", mProjectObject.name); String url = mProjectObject.getHttptStargazers(); startUserList(title, url); } }; View.OnClickListener onClickFollowCount = new View.OnClickListener() { @Override public void onClick(View v) { String title = String.format("关注了 %s 的人", mProjectObject.name); String url = mProjectObject.getHttptwatchers(); startUserList(title, url); } }; private void startUserList(String title, String url) { UsersListActivity_.intent(PublicProjectHomeFragment.this) .titleName(title) .statUrl(url) .start(); } View.OnClickListener onClickForkCount = new View.OnClickListener() { @Override public void onClick(View v) { ForksListActivity_.intent(PublicProjectHomeFragment.this) .mProjectObject(mProjectObject) .start(); } }; private void initHead3(View root) { final int[] buttons = new int[]{ R.id.itemDynamic, R.id.itemTopic, R.id.itemCode, R.id.itemMember, R.id.itemReadme, R.id.itemMerge }; final int[] buttonBackgrounds = new int[]{ R.drawable.project_button_icon_dynamic, R.drawable.project_button_icon_topic, R.drawable.project_button_icon_code, R.drawable.project_button_icon_member, R.drawable.project_button_icon_readme, R.drawable.project_button_icon_merge }; final String[] titles = new String[]{ "动态", "讨论", "代码", "成员", "Readme", "Pull Request" }; for (int i = 0; i < buttons.length; ++i) { View item = root.findViewById(buttons[i]); item.findViewById(R.id.icon).setBackgroundResource(buttonBackgrounds[i]); ((TextView) item.findViewById(R.id.title)).setText(titles[i]); final int pos = i; item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { switch (buttons[pos]) { case R.id.itemDynamic: updateDynamic(); break; case R.id.itemCode: break; case R.id.itemReadme: break; case R.id.itemMerge: markUsed(RedPointTip.Type.Merge320); break; } ProjectActivity_.intent(PublicProjectHomeFragment.this) .mProjectObject(mProjectObject) .mJumpType(ProjectActivity.PUBLIC_JUMP_TYPES[pos]) .start(); } }); if (titles[i].equals("动态")) { dynamicBadge = (BadgeView) item.findViewById(R.id.badge); Global.setBadgeView(dynamicBadge, mProjectObject.un_read_activities_count); } else { Global.setBadgeView((BadgeView) item.findViewById(R.id.badge), 0); } } updateRedPoinitStyle(); } void updateRedPoinitStyle() { final int[] buttons = new int[]{ R.id.itemMerge }; final RedPointTip.Type[] types = new RedPointTip.Type[]{ RedPointTip.Type.Merge320 }; for (int i = 0; i < buttons.length; ++i) { setRedPointStyle(buttons[i], types[i]); } } protected void postNetwork(String url) { postNetwork(url, new RequestParams(), url); } public void getNetwork(String url) { getNetwork(url, url); } @Click protected final void buttonStar(View v) { mButtonStar.changeState(); if (mButtonStar.isChecked()) { postNetwork(mUrlStar); } else { postNetwork(mUrlUnstar); } } @Click protected final void buttonWatch(View v) { mButtonWatch.changeState(); if (mButtonWatch.isChecked()) { postNetwork(mUrlWatch); } else { postNetwork(mUrlUnwatch); } } @Click protected final void buttonFork(View v) { if (mProjectObject.isMy()) { showButtomToast("不能fork自己的项目"); } else { forkUrl = Global.HOST_API + mProjectObject.backend_project_path + "/git/fork"; showDialog("fork", "fork将会将此项目复制到您的个人空间,确定要fork吗?", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { postNetwork(forkUrl); showProgressBar(true, "正在fork项目"); } }); } } class ProjectMarkButton { // 普通和选中 String[] title; int[] titleColor; int[] icon; int[] leftBackground; int[] rightBackground; boolean mCheck = false; int mCount = 0; View mButton; ProjectMarkButton(View button, String[] title, int[] titleColor, int[] icon, int[] leftBackground, int[] rightBackground, final boolean mCheck, int mCount, View.OnClickListener onClickListener) { this.title = title; this.titleColor = titleColor; this.icon = icon; this.leftBackground = leftBackground; this.mCheck = mCheck; this.mCount = mCount; this.mButton = button; this.rightBackground = rightBackground; button.findViewById(R.id.count).setOnClickListener(onClickListener); updateControl(); } public void changeState() { checkButton(!mCheck); } public void checkButton(boolean check) { if (mCheck == check) { return; } mCheck = check; if (mCheck) { ++mCount; } else { --mCount; } updateControl(); } private void updateControl() { mButton.setTag(mCheck); TextView countView = (TextView) mButton.findViewById(R.id.count); countView.setText(String.valueOf(mCount)); countView.setTextColor(!mCheck ? titleColor[0] : titleColor[1]); countView.setBackgroundResource(!mCheck ? rightBackground[0] : rightBackground[1]); mButton.findViewById(R.id.icon).setBackgroundResource(!mCheck ? icon[0] : icon[1]); TextView title = (TextView) mButton.findViewById(R.id.title); title.setText(!mCheck ? this.title[0] : this.title[1]); title.setTextColor(!mCheck ? titleColor[0] : titleColor[1]); mButton.findViewById(R.id.leftBg).setBackgroundResource(!mCheck ? leftBackground[0] : leftBackground[1]); } public boolean isChecked() { return mCheck; } } }