Skip to content
Snippets Groups Projects
Commit 3c02cf6e authored by Jawn's avatar Jawn
Browse files

Change issues adapter to recyclerview

parent 497a314c
No related branches found
No related tags found
No related merge requests found
package com.commit451.gitlab.adapter;
 
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
import com.commit451.gitlab.IssueActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.tools.Repository;
import com.commit451.gitlab.views.CompoundTextView;
import com.squareup.picasso.Picasso;
import com.commit451.gitlab.viewHolders.IssueViewHolder;
 
import java.util.ArrayList;
import java.util.List;
 
import fr.tkeunebr.gravatar.Gravatar;
public class IssuesAdapter extends BaseAdapter {
private ArrayList<Issue> issues;
private LayoutInflater inflater;
public IssuesAdapter(Context context, List<Issue> issues) {
this.issues = new ArrayList<Issue>(issues);
if(context != null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}
@Override
public int getCount() {
return issues.size();
}
@Override
public Issue getItem(int position) {
return issues.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void addIssue(Issue issue) {
issues.add(0, issue);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) convertView = inflater.inflate(R.layout.list_item, parent, false);
final TextView title = (TextView) convertView.findViewById(R.id.title);
final CompoundTextView summary = (CompoundTextView) convertView.findViewById(R.id.summary);
final TextView custom = (TextView) convertView.findViewById(R.id.custom);
long tempId = issues.get(position).getIid();
if(tempId < 1)
tempId = issues.get(position).getId();
title.setText("#" + tempId + ": " + issues.get(position).getTitle());
String state = issues.get(position).getState();
custom.setText(state);
if(state != null && (state.equals("opened") || state.equals("reopened"))) {
custom.setTextColor(Color.parseColor("#30C830"));
}
else if(state != null && (state.equals("closed"))) {
custom.setTextColor(Color.parseColor("#FF0000"));
}
float percent = Repository.displayWidth / 720f;
int size = (int) (40f * percent);
String assigneeName = "Unassigned";
String assigneeAvatarUrl = "http://www.gravatar.com/avatar/00000000000000000000000000000000?s=" + size;
if(issues.get(position).getAssignee() != null) {
assigneeName = issues.get(position).getAssignee().getName();
if(issues.get(position).getAssignee().getEmail() != null)
assigneeAvatarUrl = Gravatar.init().with(issues.get(position).getAssignee().getEmail()).size(size).build();
else if(issues.get(position).getAssignee().getAvatarUrl() != null)
assigneeAvatarUrl = issues.get(position).getAssignee().getAvatarUrl() + "&s=" + size;
}
summary.setText(assigneeName);
Picasso.with(convertView.getContext()).load(assigneeAvatarUrl).into(summary);
return convertView;
}
}
\ No newline at end of file
/**
* Created by Jawn on 7/28/2015.
*/
public class IssuesAdapter extends RecyclerView.Adapter<IssueViewHolder> {
private List<Issue> mValues;
public Issue getValueAt(int position) {
return mValues.get(position);
}
public IssuesAdapter(List<Issue> items) {
mValues = items;
}
private final View.OnClickListener onProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
Repository.selectedIssue = getValueAt(position);
v.getContext().startActivity(new Intent(v.getContext(), IssueActivity.class));
}
};
@Override
public IssueViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
IssueViewHolder holder = IssueViewHolder.create(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
}
@Override
public void onBindViewHolder(final IssueViewHolder holder, int position) {
Issue issue = getValueAt(position);
holder.bind(issue);
holder.itemView.setTag(R.id.list_position, position);
}
@Override
public int getItemCount() {
return mValues.size();
}
public void addIssue(Issue issue) {
mValues.add(0, issue);
notifyItemInserted(0);
}
}
package com.commit451.gitlab.fragments;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
 
import com.commit451.gitlab.IssueActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.IssuesAdapter;
import com.commit451.gitlab.model.Issue;
Loading
Loading
@@ -30,10 +27,10 @@ import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
 
public class IssuesFragment extends Fragment implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
public class IssuesFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
 
@Bind(R.id.add_issue_button) View addIssueButton;
@Bind(R.id.fragmentList) ListView listView;
@Bind(R.id.list) RecyclerView listView;
@Bind(R.id.swipe_layout) SwipeRefreshLayout swipeLayout;
public IssuesFragment() {}
Loading
Loading
@@ -42,9 +39,8 @@ public class IssuesFragment extends Fragment implements OnItemClickListener, Swi
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_issues, container, false);
ButterKnife.bind(this, view);
listView.setOnItemClickListener(this);
 
listView.setLayoutManager(new LinearLayoutManager(getActivity()));
swipeLayout.setOnRefreshListener(this);
 
if(Repository.selectedProject != null)
Loading
Loading
@@ -65,8 +61,9 @@ public class IssuesFragment extends Fragment implements OnItemClickListener, Swi
}
public void loadData() {
if(swipeLayout != null && !swipeLayout.isRefreshing())
swipeLayout.setRefreshing(true);
if(swipeLayout != null && !swipeLayout.isRefreshing()) {
swipeLayout.setRefreshing(true);
}
Repository.getService().getIssues(Repository.selectedProject.getId(), issuesCallback);
}
Loading
Loading
@@ -77,9 +74,9 @@ public class IssuesFragment extends Fragment implements OnItemClickListener, Swi
public void success(List<Issue> issues, Response resp) {
if(swipeLayout != null && swipeLayout.isRefreshing())
swipeLayout.setRefreshing(false);
IssuesAdapter issueAdapter = new IssuesAdapter(getActivity(), issues);
listView.setAdapter(issueAdapter);
IssuesAdapter issueAdapter = new IssuesAdapter(issues);
listView.setAdapter(new IssuesAdapter(issues));
Repository.issueAdapter = issueAdapter;
 
Loading
Loading
@@ -108,10 +105,4 @@ public class IssuesFragment extends Fragment implements OnItemClickListener, Swi
DialogFragment newFragment = AddIssueDialogFragment.newInstance();
newFragment.show(ft, "dialog");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Repository.selectedIssue = ((IssuesAdapter) listView.getAdapter()).getItem(position);
startActivity(new Intent(getActivity(), IssueActivity.class));
}
}
\ No newline at end of file
package com.commit451.gitlab.viewHolders;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.tools.Repository;
import com.commit451.gitlab.views.CompoundTextView;
import com.squareup.picasso.Picasso;
import butterknife.Bind;
import butterknife.ButterKnife;
import fr.tkeunebr.gravatar.Gravatar;
/**
* Files, yay!
* Created by Jawn on 6/11/2015.
*/
public class IssueViewHolder extends RecyclerView.ViewHolder {
public static IssueViewHolder create(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_issue, parent, false);
return new IssueViewHolder(view);
}
@Bind(R.id.title) TextView title;
@Bind(R.id.summary) CompoundTextView summary;
@Bind(R.id.custom) TextView custom;
public IssueViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
public void bind(Issue issue) {
long tempId = issue.getIid();
if(tempId < 1) {
tempId = issue.getId();
}
title.setText("#" + tempId + ": " + issue.getTitle());
String state = issue.getState();
custom.setText(state);
if(state != null && (state.equals("opened") || state.equals("reopened"))) {
custom.setTextColor(Color.parseColor("#30C830"));
}
else if(state != null && (state.equals("closed"))) {
custom.setTextColor(Color.parseColor("#FF0000"));
}
float percent = Repository.displayWidth / 720f;
int size = (int) (40f * percent);
String assigneeName = "Unassigned";
String assigneeAvatarUrl = "http://www.gravatar.com/avatar/00000000000000000000000000000000?s=" + size;
if(issue.getAssignee() != null) {
assigneeName = issue.getAssignee().getName();
if(issue.getAssignee().getEmail() != null)
assigneeAvatarUrl = Gravatar.init().with(issue.getAssignee().getEmail()).size(size).build();
else if(issue.getAssignee().getAvatarUrl() != null)
assigneeAvatarUrl = issue.getAssignee().getAvatarUrl() + "&s=" + size;
}
summary.setText(assigneeName);
Picasso.with(itemView.getContext()).load(assigneeAvatarUrl).into(summary);
}
}
Loading
Loading
@@ -9,12 +9,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent" >
 
<ListView
android:id="@+id/fragmentList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
 
</com.commit451.gitlab.views.GitLabSwipeRefreshLayout>
 
Loading
Loading
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingRight="?android:attr/scrollbarSize"
android:paddingLeft="8dp" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
<com.commit451.gitlab.views.CompoundTextView
android:id="@+id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_below="@+id/title"
android:orientation="horizontal"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:drawablePadding="4dp" />
<TextView
android:id="@+id/custom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/summary"
android:layout_alignParentRight="true"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary" />
</RelativeLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment