package net.coding.program.search; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; 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.ProjectHomeActivity_; 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.ItemClick; import org.androidannotations.annotations.ViewById; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; /** * Created by Vernon on 15/11/21. */ @EFragment(R.layout.fragment_search_list) public class SearchResultListFragment extends RefreshBaseFragment { private static final String TAG = SearchResultListFragment.class.getSimpleName(); final String url = Global.HOST_API + "/esearch/all?q=%s"; final String tmp = "&types=%s&pageSize=10"; ArrayList<ProjectObject> mData = new ArrayList<>(); String page = "&page=%s"; int pos = 1; private String keyword = ""; private String tabPrams; private boolean hasMore = true; private boolean isLoading = true; @ViewById ListView listView; @ViewById(R.id.emptyView) LinearLayout emptyView; MyAdapter adapter; @AfterViews protected void init() { initRefreshLayout(); setRefreshing(true); mFootUpdate.init(listView, mInflater, this); adapter = new MyAdapter(); listView.setAdapter(adapter); listView.setOnScrollListener(mOnScrollListener); loadMore(); } AbsListView.OnScrollListener mOnScrollListener = new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem + visibleItemCount == totalItemCount) { if (hasMore && !isLoading) { pos++; isLoading = true; loadMore(); } } } }; public String getKeyword() { return keyword; } public String getTabPrams() { return tabPrams; } public void setTabPrams(String tabPrams) { this.tabPrams = tabPrams; } public void setKeyword(String keyword) { this.keyword = keyword; } private String getUrl(int pos) { String tag = ""; tag = String.format(url, getKeyword()) + String.format(tmp, getTabPrams()) + String.format(page, pos + ""); return tag; } @ItemClick final void listView(ProjectObject itemData) { itemData.is_public = itemData.getType() == 1 ? true : false; itemData.description = itemData.description.replace("<em>", "").replace("</em>", ""); itemData.name = itemData.name.replace("<em>", "").replace("</em>", ""); itemData.getOwner().global_key = itemData.project_path.substring(0, itemData.project_path.indexOf("/p/")).replace("/u/", ""); ProjectActivity.ProjectJumpParam param = new ProjectActivity.ProjectJumpParam(itemData.getOwner().global_key, itemData.name); ProjectHomeActivity_.intent(this).mJumpParam(param).startForResult(InitProUtils.REQUEST_PRO_UPDATE); } @Override public void loadMore() { getNetwork(getUrl(pos), keyword); } @Override public void onRefresh() { pos = 1; loadMore(); } private static class ViewHolder { TextView name2; TextView name; 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 { @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.name = (TextView) view.findViewById(R.id.name); 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.privateIcon.setVisibility(item.getType() == 1 ? View.INVISIBLE : View.VISIBLE); String name = item.project_path.substring(0, item.project_path.indexOf("/p/")).replace("/u/", ""); holder.content.setText(name); HoloUtils.setHoloText(holder.desc, keyword, 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() + ""); holder.badge.setVisibility(View.INVISIBLE); if (item.getType() == 1) { holder.name2.setVisibility(View.VISIBLE); HoloUtils.setHoloText(holder.name2, keyword, item.name); holder.name.setVisibility(View.INVISIBLE); holder.content.setVisibility(View.GONE); } else { holder.name.setVisibility(View.VISIBLE); HoloUtils.setHoloText(holder.name, keyword, item.name); holder.name2.setVisibility(View.INVISIBLE); holder.content.setVisibility(View.VISIBLE); } holder.ll_bottom_menu.setVisibility(item.getType() == 1 ? View.VISIBLE : View.GONE); iconfromNetwork(holder.image, item.icon, ImageLoadTool.optionsRounded2); return view; } } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(keyword)) { setRefreshing(false); if (code == 0) { if (pos == 1) { mData.clear(); } JSONArray array = respanse.getJSONObject("data").getJSONObject("projects").getJSONArray("list"); for (int i = 0; i < array.length(); ++i) { JSONObject item = array.getJSONObject(i); ProjectObject oneData = new ProjectObject(item); mData.add(oneData); } emptyView.setVisibility(mData.size() == 0 ? View.VISIBLE : View.GONE); if (array.length() > 0) { hasMore = true; mFootUpdate.updateState(code, false, mData.size()); } else { hasMore = false; mFootUpdate.updateState(code, true, mData.size()); } adapter.notifyDataSetChanged(); isLoading = false; } else { showErrorMsg(code, respanse); hasMore = false; } } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == InitProUtils.REQUEST_PRO_UPDATE) { if (resultCode == Activity.RESULT_OK) { String action = data.getStringExtra("action"); if (action.equals(InitProUtils.FLAG_REFRESH)) { onRefresh(); } } } super.onActivityResult(requestCode, resultCode, data); } }