package net.coding.program.project;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.readystatesoftware.viewbadger.BadgeView;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ImageLoadTool;
import net.coding.program.common.network.RefreshBaseFragment;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.detail.ProjectActivity;
import net.coding.program.project.init.InitProUtils;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
import org.androidannotations.annotations.ItemClick;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import se.emilsjolander.stickylistheaders.ExpandableStickyListHeadersListView;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
/**
* Created by Vernon on 15/11/15.
*/
@EFragment(R.layout.project_list_fragment)
public class ProjectOtherFragment extends RefreshBaseFragment implements ProjectListFragment.UpdateData, View.OnClickListener {
final String hostWatched = Global.HOST_API + "/projects?page=1&pageSize=20&type=watched";
final String hostStared = Global.HOST_API + "/projects?page=1&pageSize=20&type=stared";
final String[] host = {hostWatched, hostStared};
boolean requestOk = true;
boolean needRefresh = true;
private int postion = 0;
@FragmentArg
ArrayList<ProjectObject> mData = new ArrayList<>();
@FragmentArg
ProjectFragment.Type type = ProjectFragment.Type.Main;
@ViewById
ExpandableStickyListHeadersListView listView;
@ViewById
View blankLayout;
@ViewById
RelativeLayout project_create_layout;
@ViewById
TextView tv_msg_tip;
@ViewById
Button btn_action;
boolean mRequestOk;
private String title;
private MyAdapter adapter;
public void setTitleAndPostion(String title, int postion) {
this.title = title;
this.postion = postion;
}
@AfterViews
protected void init() {
hideProgressDialog();
// mData = AccountInfo.loadProjects(getActivity());
setHasOptionsMenu(true);
initRefreshLayout();
setRefreshing(true);
btn_action.setOnClickListener(this);
}
@ItemClick
public void listView(ProjectObject item) {
// 在搜索界面不是嵌套的,getParentFragment会返回null
Fragment fragment = getParentFragment();
if (fragment == null) {
fragment = this;
}
if (type == ProjectFragment.Type.Main) {
item.getOwner().global_key = item.project_path.substring(0, item.project_path.indexOf("/p/")).replace("/u/", "");
ProjectActivity.ProjectJumpParam param = new ProjectActivity.ProjectJumpParam(item.getOwner().global_key,
item.name);
ProjectHomeActivity_.intent(fragment).mJumpParam(param).startForResult(InitProUtils.REQUEST_PRO_UPDATE);
} else {
Intent intent = new Intent();
intent.putExtra("data", item);
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
}
@Override
public void onResume() {
super.onResume();
if (needRefresh) {
needRefresh = false;
onRefresh();
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(host[postion])) {
setRefreshing(false);
if (code == 0) {
requestOk = true;
mData.clear();
JSONArray array = respanse.getJSONObject("data").getJSONArray("list");
int pinCount = 0;
for (int i = 0; i < array.length(); ++i) {
JSONObject item = array.getJSONObject(i);
ProjectObject oneData = new ProjectObject(item);
if (oneData.isPin()) {
mData.add(pinCount++, oneData);
} else {
mData.add(oneData);
}
}
// AccountInfo.saveProjects(getActivity(), mData);
if (adapter == null) {
adapter = new MyAdapter();
listView.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
}
if (!(mData.size() > 0)) {
tv_msg_tip.setText(getTitle());
project_create_layout.setVisibility(View.VISIBLE);
if (tag.equals(hostStared)) {
btn_action.setText("+ 去收藏");
} else if (tag.equals(hostWatched)) {
btn_action.setText("+ 去关注");
}
} else {
project_create_layout.setVisibility(View.GONE);
}
} else {
requestOk = false;
showErrorMsg(code, respanse);
// adapter.notifyDataSetChanged();
}
}
}
@Override
public void onRefresh() {
getNetwork(host[postion], host[postion]);
}
// private View.OnClickListener mOnClickRetry = new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// onRefresh();
// }
// };
@Override
public void updateRead(int id) {
}
@Override
public void updatePin(int id, boolean pin) {
}
public String getTitle() {
return title;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_action:
ProjectSquareActivity_.intent(this).start();
break;
}
}
static class HeaderViewHolder {
TextView mHead;
}
private static class ViewHolder {
TextView name2;
TextView tv_star_count;
TextView tv_follow_count;
TextView tv_fork_count;
LinearLayout ll_bottom_menu;
ImageView image;
TextView desc;
TextView content;
BadgeView badge;
View privateIcon;
}
class MyAdapter extends BaseAdapter implements StickyListHeadersAdapter {
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder holder;
if (convertView == null) {
view = mInflater.inflate(R.layout.project_all_list_item, parent, false);
holder = new ViewHolder();
holder.name2 = (TextView) view.findViewById(R.id.name2);
holder.image = (ImageView) view.findViewById(R.id.icon);
holder.content = (TextView) view.findViewById(R.id.comment);
holder.badge = (BadgeView) view.findViewById(R.id.badge);
holder.privateIcon = view.findViewById(R.id.privateIcon);
holder.tv_follow_count = (TextView) view.findViewById(R.id.tv_follow_count);
holder.tv_fork_count = (TextView) view.findViewById(R.id.tv_fork_count);
holder.tv_star_count = (TextView) view.findViewById(R.id.tv_start_count);
holder.ll_bottom_menu = (LinearLayout) view.findViewById(R.id.ll_bottom_menu);
holder.desc = (TextView) view.findViewById(R.id.txtDesc);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
ProjectObject item = (ProjectObject) getItem(position);
holder.name2.setText(item.name);
holder.name2.setVisibility(View.VISIBLE);
holder.privateIcon.setVisibility(item.isPublic() ? View.INVISIBLE : View.VISIBLE);
String ownerName = item.isPublic() ? item.owner_user_name : (" " + item.owner_user_name);
holder.content.setText(ownerName);
holder.desc.setText(item.getDescription());
holder.tv_follow_count.setText(item.getWatch_count() + "");
holder.tv_star_count.setText(item.getStar_count() + "");
holder.tv_fork_count.setText(item.getFork_count() + "");
if (type == ProjectFragment.Type.Pick) {
holder.badge.setVisibility(View.INVISIBLE);
} else {
int count = item.un_read_activities_count;
BadgeView badge = holder.badge;
Global.setBadgeView(badge, count);
}
if (postion == 0 || postion == 2) {
holder.content.setVisibility(View.GONE);
holder.ll_bottom_menu.setVisibility(View.VISIBLE);
} else {
holder.content.setVisibility(View.VISIBLE);
holder.ll_bottom_menu.setVisibility(View.GONE);
}
iconfromNetwork(holder.image, item.icon, ImageLoadTool.optionsRounded2);
return view;
}
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
HeaderViewHolder holder;
if (convertView == null) {
holder = new HeaderViewHolder();
convertView = mInflater.inflate(R.layout.fragment_project_list_head, parent, false);
holder.mHead = (TextView) convertView.findViewById(R.id.head);
convertView.setTag(holder);
} else {
holder = (HeaderViewHolder) convertView.getTag();
}
// int type = getSectionForPosition(position);
// String title =titles[type];
holder.mHead.setText(getTitle());
return convertView;
}
@Override
public long getHeaderId(int i) {
return 1;
}
}
}