Skip to content
Snippets Groups Projects
Commit 38c2d95b authored by Michi302's avatar Michi302
Browse files

Merge branch 'master' into fdroid

# Conflicts:
#	.gitlab-ci.yml
#	.magnum.yml
#	app/build.gradle
#	app/src/main/AndroidManifest.xml
#	app/src/main/java/com/commit451/gitlab/GitLabApp.java
parents 0216e5f3 d79d79f5
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 1002 additions and 303 deletions
Loading
Loading
@@ -7,8 +7,8 @@ import android.view.ViewGroup;
import android.widget.PopupMenu;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.TreeItem;
import com.commit451.gitlab.viewHolders.FileViewHolder;
import com.commit451.gitlab.model.api.RepositoryTreeObject;
import com.commit451.gitlab.viewHolder.FileViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
Loading
Loading
@@ -20,25 +20,24 @@ import java.util.Collection;
public class FilesAdapter extends RecyclerView.Adapter<FileViewHolder> {
 
public interface Listener {
void onFolderClicked(TreeItem treeItem);
void onFileClicked(TreeItem treeItem);
void onCopyClicked(TreeItem treeItem);
void onShareClicked(TreeItem treeItem);
void onOpenInBrowserClicked(TreeItem treeItem);
void onFolderClicked(RepositoryTreeObject treeItem);
void onFileClicked(RepositoryTreeObject treeItem);
void onCopyClicked(RepositoryTreeObject treeItem);
void onShareClicked(RepositoryTreeObject treeItem);
void onOpenInBrowserClicked(RepositoryTreeObject treeItem);
}
private Listener mListener;
private ArrayList<TreeItem> mValues;
private ArrayList<RepositoryTreeObject> mValues;
 
private final View.OnClickListener onProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
TreeItem treeItem = getValueAt(position);
RepositoryTreeObject treeItem = getValueAt(position);
 
if(treeItem.getType().equals("tree")) {
if (treeItem.getType() == RepositoryTreeObject.Type.FOLDER) {
mListener.onFolderClicked(treeItem);
}
else if(treeItem.getType().equals("blob")) {
} else if (treeItem.getType() == RepositoryTreeObject.Type.FILE) {
mListener.onFileClicked(treeItem);
}
}
Loading
Loading
@@ -51,14 +50,14 @@ public class FilesAdapter extends RecyclerView.Adapter<FileViewHolder> {
 
@Override
public FileViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
FileViewHolder holder = FileViewHolder.newInstance(parent);
FileViewHolder holder = FileViewHolder.inflate(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
}
 
@Override
public void onBindViewHolder(final FileViewHolder holder, int position) {
final TreeItem treeItem = getValueAt(position);
final RepositoryTreeObject treeItem = getValueAt(position);
holder.bind(treeItem);
holder.itemView.setTag(R.id.list_position, position);
holder.popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
Loading
Loading
@@ -85,7 +84,7 @@ public class FilesAdapter extends RecyclerView.Adapter<FileViewHolder> {
return mValues.size();
}
 
public void setData(Collection<TreeItem> values) {
public void setData(Collection<RepositoryTreeObject> values) {
mValues.clear();
if (values != null) {
mValues.addAll(values);
Loading
Loading
@@ -98,7 +97,7 @@ public class FilesAdapter extends RecyclerView.Adapter<FileViewHolder> {
notifyDataSetChanged();
}
 
public TreeItem getValueAt(int position) {
public RepositoryTreeObject getValueAt(int position) {
return mValues.get(position);
}
}
Loading
Loading
@@ -5,8 +5,8 @@ import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Group;
import com.commit451.gitlab.viewHolders.GroupViewHolder;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.viewHolder.GroupViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
Loading
Loading
@@ -38,17 +38,21 @@ public class GroupAdapter extends RecyclerView.Adapter<GroupViewHolder> {
}
};
 
public void setGroups(Collection<Group> entries) {
public void setGroups(Collection<Group> groups) {
mValues.clear();
if (entries != null) {
mValues.addAll(entries);
addGroups(groups);
}
public void addGroups(Collection<Group> groups) {
if (groups != null) {
mValues.addAll(groups);
}
notifyDataSetChanged();
}
 
@Override
public GroupViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
GroupViewHolder holder = GroupViewHolder.newInstance(parent);
GroupViewHolder holder = GroupViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mOnItemClickListener);
return holder;
}
Loading
Loading
package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Member;
import com.commit451.gitlab.viewHolder.ProjectMemberViewHolder;
import java.util.ArrayList;
import java.util.Collection;
/**
* Adapter for a list of users
* Created by John on 9/28/15.
*/
public class GroupMembersAdapter extends RecyclerView.Adapter<ProjectMemberViewHolder> {
public interface Listener {
void onUserClicked(Member member, ProjectMemberViewHolder userViewHolder);
void onUserRemoveClicked(Member member);
void onUserChangeAccessClicked(Member member);
}
private Listener mListener;
private ArrayList<Member> mData;
private final View.OnClickListener mItemClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
ProjectMemberViewHolder holder = (ProjectMemberViewHolder) v.getTag(R.id.list_view_holder);
mListener.onUserClicked(getMember(position), holder);
}
};
public GroupMembersAdapter(Listener listener) {
mListener = listener;
mData = new ArrayList<>();
}
@Override
public ProjectMemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ProjectMemberViewHolder holder = ProjectMemberViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mItemClickListener);
return holder;
}
@Override
public void onBindViewHolder(ProjectMemberViewHolder holder, int position) {
final Member member = mData.get(position);
holder.bind(member);
holder.mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_change_access:
mListener.onUserChangeAccessClicked(member);
return true;
case R.id.action_remove:
mListener.onUserRemoveClicked(member);
return true;
}
return false;
}
});
holder.itemView.setTag(R.id.list_position, position);
holder.itemView.setTag(R.id.list_view_holder, holder);
}
@Override
public int getItemCount() {
return mData.size();
}
private Member getMember(int position) {
return mData.get(position);
}
public void setData(Collection<Member> users) {
mData.clear();
if (users != null) {
mData.addAll(users);
}
notifyDataSetChanged();
}
public void addMember(Member member) {
mData.add(0, member);
notifyItemInserted(0);
}
public void removeMember(Member member) {
int index = mData.indexOf(member);
mData.remove(index);
notifyItemRemoved(index);
}
}
package com.commit451.gitlab.adapter;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.commit451.gitlab.R;
import com.commit451.gitlab.fragment.FeedFragment;
import com.commit451.gitlab.fragment.GroupMembersFragment;
import com.commit451.gitlab.fragment.ProjectsFragment;
import com.commit451.gitlab.model.api.Group;
import java.util.HashSet;
import java.util.Set;
/**
* Group pager adapter
* Created by Jawn on 9/21/2015.
*/
public class GroupPagerAdapter extends FragmentPagerAdapter {
private static final int SECTION_COUNT = 3;
private static final int ACTIVITY_POS = 0;
private static final int PROJECTS_POS = 1;
private static final int MEMBERS_POS = 2;
private final Group mGroup;
private final String[] mTitles;
private final Set<Integer> mDisabledSections = new HashSet<>();
public GroupPagerAdapter(Context context, FragmentManager fm, Group group) {
super(fm);
mGroup = group;
mTitles = context.getResources().getStringArray(R.array.group_tabs);
}
@Override
public int getCount() {
return SECTION_COUNT - mDisabledSections.size();
}
@Override
public CharSequence getPageTitle(int position) {
position = getCorrectPosition(position);
return mTitles[position];
}
@Override
public Fragment getItem(int position) {
position = getCorrectPosition(position);
switch (position) {
case ACTIVITY_POS:
return FeedFragment.newInstance(mGroup.getFeedUrl().toString());
case PROJECTS_POS:
return ProjectsFragment.newInstance(mGroup);
case MEMBERS_POS:
return GroupMembersFragment.newInstance(mGroup);
}
throw new IllegalStateException("Position exceeded on view pager");
}
private int getCorrectPosition(int position) {
for (int i = 0; i <= position; i++) {
if (mDisabledSections.contains(i)) {
position++;
}
}
return position;
}
}
Loading
Loading
@@ -3,12 +3,11 @@ package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
 
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.model.Milestone;
import com.commit451.gitlab.model.Note;
import com.commit451.gitlab.model.User;
import com.commit451.gitlab.viewHolders.IssueHeaderViewHolder;
import com.commit451.gitlab.viewHolders.NoteViewHolder;
import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.viewHolder.IssueHeaderViewHolder;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.NoteViewHolder;
 
import java.util.ArrayList;
import java.util.List;
Loading
Loading
@@ -21,28 +20,29 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
 
private static final int TYPE_HEADER = 0;
private static final int TYPE_COMMENT = 1;
private static final int TYPE_FOOTER = 2;
 
private static final int HEADER_COUNT = 1;
private static final int FOOTER_COUNT = 1;
 
private ArrayList<Note> mNotes;
private ArrayList<User> mUsers;
private ArrayList<Milestone> mMilestones;
private Issue mIssue;
private boolean mLoading = false;
 
public IssueDetailsAdapter(Issue issue) {
mIssue = issue;
mNotes = new ArrayList<>();
mUsers = new ArrayList<>();
mMilestones = new ArrayList<>();
}
 
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEADER) {
return IssueHeaderViewHolder.newInstance(parent);
return IssueHeaderViewHolder.inflate(parent);
} else if (viewType == TYPE_COMMENT) {
RecyclerView.ViewHolder holder = NoteViewHolder.newInstance(parent);
RecyclerView.ViewHolder holder = NoteViewHolder.inflate(parent);
return holder;
} else if (viewType == TYPE_FOOTER) {
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalArgumentException("No view type matches");
}
Loading
Loading
@@ -54,18 +54,22 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
} else if (holder instanceof NoteViewHolder) {
Note note = getNoteAt(position);
((NoteViewHolder) holder).bind(note);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
 
@Override
public int getItemCount() {
return mNotes.size() + HEADER_COUNT;
return mNotes.size() + HEADER_COUNT + FOOTER_COUNT;
}
 
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position)) {
return TYPE_HEADER;
} else if (position == HEADER_COUNT + mNotes.size()) {
return TYPE_FOOTER;
} else {
return TYPE_COMMENT;
}
Loading
Loading
@@ -79,9 +83,13 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
return mNotes.get(position-1);
}
 
public void setNotes(List<Note> notes) {
mNotes.clear();
addNotes(notes);
}
public void addNotes(List<Note> notes) {
if (!notes.isEmpty()) {
mNotes.clear();
mNotes.addAll(notes);
}
notifyDataSetChanged();
Loading
Loading
@@ -89,27 +97,20 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
 
public void addNote(Note note) {
mNotes.add(note);
notifyItemInserted(mNotes.size() + HEADER_COUNT);
notifyItemInserted(HEADER_COUNT);
}
 
public void addUsers(List<User> users) {
if (!users.isEmpty()) {
users.clear();
mUsers.addAll(users);
}
notifyDataSetChanged();
public void updateIssue(Issue issue) {
mIssue = issue;
notifyItemChanged(0);
}
 
public void addMilestones(List<Milestone> milestones) {
if (!milestones.isEmpty()) {
milestones.clear();
mMilestones.addAll(milestones);
}
notifyDataSetChanged();
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mNotes.size() + HEADER_COUNT);
}
 
public void updateIssue(Issue issue) {
mIssue = issue;
notifyItemChanged(0);
public static int getHeaderCount() {
return HEADER_COUNT;
}
}
Loading
Loading
@@ -5,8 +5,9 @@ import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.viewHolders.IssueViewHolder;
import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.viewHolder.IssueViewHolder;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
Loading
Loading
@@ -15,17 +16,19 @@ import java.util.Collection;
* Issues adapter
* Created by Jawn on 7/28/2015.
*/
public class IssuesAdapter extends RecyclerView.Adapter<IssueViewHolder> {
public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int FOOTER_COUNT = 1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
 
public interface Listener {
void onIssueClicked(Issue issue);
}
private Listener mListener;
private ArrayList<Issue> mValues;
public Issue getValueAt(int position) {
return mValues.get(position);
}
private boolean mLoading = false;
 
public IssuesAdapter(Listener listener) {
mListener = listener;
Loading
Loading
@@ -41,26 +44,51 @@ public class IssuesAdapter extends RecyclerView.Adapter<IssueViewHolder> {
};
 
@Override
public IssueViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
IssueViewHolder holder = IssueViewHolder.create(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_ITEM:
IssueViewHolder holder = IssueViewHolder.inflate(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
case TYPE_FOOTER:
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalStateException("No holder for view type " + viewType);
}
 
@Override
public void onBindViewHolder(final IssueViewHolder holder, int position) {
Issue issue = getValueAt(position);
holder.bind(issue);
holder.itemView.setTag(R.id.list_position, position);
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof IssueViewHolder) {
Issue issue = getValueAt(position);
((IssueViewHolder) holder).bind(issue);
holder.itemView.setTag(R.id.list_position, position);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
} else {
throw new IllegalStateException("What is this holder?");
}
}
 
@Override
public int getItemCount() {
return mValues.size();
return mValues.size() + FOOTER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mValues.size()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
 
public void setIssues(Collection<Issue> issues) {
mValues.clear();
addIssues(issues);
}
public void addIssues(Collection<Issue> issues) {
if (issues != null) {
mValues.addAll(issues);
}
Loading
Loading
@@ -86,4 +114,13 @@ public class IssuesAdapter extends RecyclerView.Adapter<IssueViewHolder> {
}
notifyItemChanged(indexToDelete);
}
public Issue getValueAt(int position) {
return mValues.get(position);
}
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mValues.size());
}
}
package com.commit451.gitlab.adapter;
 
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.User;
import com.commit451.gitlab.viewHolders.MemberViewHolder;
import com.commit451.gitlab.model.api.Member;
import com.commit451.gitlab.model.api.ProjectNamespace;
import com.commit451.gitlab.viewHolder.ProjectMemberFooterViewHolder;
import com.commit451.gitlab.viewHolder.ProjectMemberViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
 
/**
* Shows a projects members and a groups members
* Created by Jawn on 7/28/2015.
*/
public class MemberAdapter extends RecyclerView.Adapter<MemberViewHolder> {
public class MemberAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_MEMBER = 0;
private static final int TYPE_FOOTER = 1;
private static final int FOOTER_COUNT = 1;
 
public interface Listener {
void onUserClicked(User user, MemberViewHolder memberViewHolder);
void onProjectMemberClicked(Member member, ProjectMemberViewHolder memberGroupViewHolder);
void onRemoveMember(Member member);
void onChangeAccess(Member member);
void onSeeGroupClicked();
}
 
private Listener mListener;
 
private ArrayList<User> mValues;
private ArrayList<Member> mProjectMembers;
private ProjectNamespace mNamespace;
 
private final View.OnClickListener mItemClickListener = new View.OnClickListener() {
private final View.OnClickListener mProjectMemberClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
MemberViewHolder memberViewHolder = (MemberViewHolder) v.getTag(R.id.list_view_holder);
mListener.onUserClicked(getValueAt(position), memberViewHolder);
ProjectMemberViewHolder memberGroupViewHolder = (ProjectMemberViewHolder) v.getTag(R.id.list_view_holder);
mListener.onProjectMemberClicked(getProjectMember(position), memberGroupViewHolder);
}
};
private final View.OnClickListener mFooterClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onSeeGroupClicked();
}
};
 
public User getValueAt(int position) {
return mValues.get(position);
private final GridLayoutManager.SpanSizeLookup mSpanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int viewType = getItemViewType(position);
if (viewType == TYPE_FOOTER) {
return 2;
} else {
return 1;
}
}
};
public Member getProjectMember(int position) {
return mProjectMembers.get(position);
}
 
public MemberAdapter(Listener listener) {
mListener = listener;
mValues = new ArrayList<>();
mProjectMembers = new ArrayList<>();
}
public void setProjectMembers(Collection<Member> data) {
mProjectMembers.clear();
addProjectMembers(data);
}
 
public void setData(Collection<User> data) {
mValues.clear();
public void addProjectMembers(Collection<Member> data) {
if (data != null) {
mValues.addAll(data);
mProjectMembers.addAll(data);
}
notifyDataSetChanged();
}
 
public void setNamespace(ProjectNamespace namespace) {
mNamespace = namespace;
notifyDataSetChanged();
}
@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MemberViewHolder holder = MemberViewHolder.create(parent);
holder.itemView.setOnClickListener(mItemClickListener);
return holder;
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_MEMBER:
ProjectMemberViewHolder projectViewHolder = ProjectMemberViewHolder.inflate(parent);
projectViewHolder.itemView.setOnClickListener(mProjectMemberClickListener);
return projectViewHolder;
case TYPE_FOOTER:
ProjectMemberFooterViewHolder footerHolder = ProjectMemberFooterViewHolder.inflate(parent);
footerHolder.itemView.setOnClickListener(mFooterClickListener);
return footerHolder;
}
throw new IllegalStateException("No idea what to inflate with view type of " + viewType);
}
 
@Override
public void onBindViewHolder(final MemberViewHolder holder, int position) {
User user = getValueAt(position);
holder.bind(user);
holder.itemView.setTag(R.id.list_position, position);
holder.itemView.setTag(R.id.list_view_holder, holder);
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ProjectMemberFooterViewHolder) {
if (mNamespace == null) {
holder.itemView.setVisibility(View.GONE);
} else {
holder.itemView.setVisibility(View.VISIBLE);
((ProjectMemberFooterViewHolder) holder).bind(mNamespace);
}
} else if (holder instanceof ProjectMemberViewHolder) {
final Member member = getProjectMember(position);
((ProjectMemberViewHolder) holder).bind(member);
holder.itemView.setTag(R.id.list_position, position);
holder.itemView.setTag(R.id.list_view_holder, holder);
((ProjectMemberViewHolder) holder).mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_change_access:
mListener.onChangeAccess(member);
return true;
case R.id.action_remove:
mListener.onRemoveMember(member);
return true;
}
return false;
}
});
}
}
 
@Override
public int getItemCount() {
return mValues.size();
return mProjectMembers.size() + FOOTER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mProjectMembers.size()) {
return TYPE_FOOTER;
} else {
return TYPE_MEMBER;
}
}
 
public void addUser(User user) {
mValues.add(0, user);
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup() {
return mSpanSizeLookup;
}
public void addMember(Member member) {
mProjectMembers.add(0, member);
notifyItemInserted(0);
}
 
public void removeUser(long userId) {
for(User u : mValues) {
if(u.getId() == userId) {
int index = mValues.indexOf(u);
mValues.remove(u);
notifyItemRemoved(index);
break;
}
}
public void removeMember(Member member) {
int position = mProjectMembers.indexOf(member);
mProjectMembers.remove(member);
notifyItemRemoved(position);
}
}
Loading
Loading
@@ -5,8 +5,9 @@ import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.MergeRequest;
import com.commit451.gitlab.viewHolders.MergeRequestViewHolder;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.MergeRequestViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
Loading
Loading
@@ -17,11 +18,18 @@ import java.util.List;
* Created by Jawn on 9/20/2015.
*/
public class MergeRequestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private static final int FOOTER_COUNT = 1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
public interface Listener {
void onMergeRequestClicked(MergeRequest mergeRequest);
}
private Listener mListener;
private List<MergeRequest> mValues;
private boolean mLoading;
 
private final View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
@Override
Loading
Loading
@@ -36,19 +44,17 @@ public class MergeRequestAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
mValues = new ArrayList<>();
}
 
public void setData(Collection<MergeRequest> mergeRequests) {
mValues.clear();
if (mergeRequests != null) {
mValues.addAll(mergeRequests);
}
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MergeRequestViewHolder holder = MergeRequestViewHolder.newInstance(parent);
holder.itemView.setOnClickListener(mOnItemClickListener);
return holder;
switch (viewType) {
case TYPE_ITEM:
MergeRequestViewHolder holder = MergeRequestViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mOnItemClickListener);
return holder;
case TYPE_FOOTER:
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalStateException("No holder for type " + viewType);
}
 
@Override
Loading
Loading
@@ -57,15 +63,43 @@ public class MergeRequestAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
MergeRequest mergeRequest = getValueAt(position);
((MergeRequestViewHolder) holder).bind(mergeRequest);
holder.itemView.setTag(R.id.list_position, position);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
 
@Override
public int getItemCount() {
return mValues.size();
return mValues.size() + FOOTER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mValues.size()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
 
public MergeRequest getValueAt(int position) {
return mValues.get(position);
}
public void setData(Collection<MergeRequest> mergeRequests) {
mValues.clear();
addData(mergeRequests);
}
public void addData(Collection<MergeRequest> mergeRequests) {
if (mergeRequests != null) {
mValues.addAll(mergeRequests);
}
notifyDataSetChanged();
}
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mValues.size());
}
}
Loading
Loading
@@ -3,10 +3,11 @@ package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
 
import com.commit451.gitlab.model.MergeRequest;
import com.commit451.gitlab.model.MergeRequestComment;
import com.commit451.gitlab.viewHolders.MergeRequestCommentViewHolder;
import com.commit451.gitlab.viewHolders.MergeRequestHeaderViewHolder;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.MergeRequestHeaderViewHolder;
import com.commit451.gitlab.viewHolder.NoteViewHolder;
 
import java.util.ArrayList;
import java.util.List;
Loading
Loading
@@ -19,11 +20,14 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
 
private static final int TYPE_HEADER = 0;
private static final int TYPE_COMMENT = 1;
private static final int TYPE_FOOTER = 2;
 
private static final int HEADER_COUNT = 1;
private static final int FOOTER_COUNT = 1;
 
private ArrayList<MergeRequestComment> mNotes;
private ArrayList<Note> mNotes;
private MergeRequest mMergeRequest;
private boolean mLoading = false;
 
public MergeRequestDetailAdapter(MergeRequest mergeRequest) {
mMergeRequest = mergeRequest;
Loading
Loading
@@ -33,10 +37,12 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_HEADER) {
return MergeRequestHeaderViewHolder.newInstance(parent);
return MergeRequestHeaderViewHolder.inflate(parent);
} else if (viewType == TYPE_COMMENT) {
RecyclerView.ViewHolder holder = MergeRequestCommentViewHolder.newInstance(parent);
RecyclerView.ViewHolder holder = NoteViewHolder.inflate(parent);
return holder;
} else if (viewType == TYPE_FOOTER) {
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalArgumentException("No view type matches");
}
Loading
Loading
@@ -45,21 +51,25 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MergeRequestHeaderViewHolder) {
((MergeRequestHeaderViewHolder) holder).bind(mMergeRequest);
} else if (holder instanceof MergeRequestCommentViewHolder) {
MergeRequestComment note = getNoteAt(position);
((MergeRequestCommentViewHolder) holder).bind(note);
} else if (holder instanceof NoteViewHolder) {
Note note = getNoteAt(position);
((NoteViewHolder) holder).bind(note);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
 
@Override
public int getItemCount() {
return mNotes.size() + HEADER_COUNT;
return mNotes.size() + HEADER_COUNT + FOOTER_COUNT;
}
 
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position)) {
return TYPE_HEADER;
} else if (position == HEADER_COUNT + mNotes.size()) {
return TYPE_FOOTER;
} else {
return TYPE_COMMENT;
}
Loading
Loading
@@ -69,25 +79,29 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
return position == 0;
}
 
public MergeRequestComment getNoteAt(int position) {
public Note getNoteAt(int position) {
return mNotes.get(position-1);
}
 
public void addNote(MergeRequestComment note) {
public void addNote(Note note) {
mNotes.add(note);
notifyItemInserted(mNotes.size() + HEADER_COUNT);
}
 
public void addNotes(List<MergeRequestComment> notes) {
public void setNotes(List<Note> notes) {
mNotes.clear();
addNotes(notes);
}
public void addNotes(List<Note> notes) {
if (!notes.isEmpty()) {
mNotes.clear();
mNotes.addAll(notes);
}
notifyDataSetChanged();
}
 
public void updateMergeRequest(MergeRequest mergeRequest) {
mMergeRequest = mergeRequest;
notifyItemChanged(0);
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mNotes.size() + HEADER_COUNT);
}
}
package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Milestone;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.MilestoneViewHolder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class MilestoneAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private static final int FOOTER_COUNT = 1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
public interface Listener {
void onMilestoneClicked(Milestone milestone);
}
private Listener mListener;
private List<Milestone> mValues;
private boolean mLoading;
private final View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
mListener.onMilestoneClicked(getValueAt(position));
}
};
public MilestoneAdapter(Listener listener) {
mListener = listener;
mValues = new ArrayList<>();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_ITEM:
MilestoneViewHolder holder = MilestoneViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mOnItemClickListener);
return holder;
case TYPE_FOOTER:
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalStateException("No holder for viewType " + viewType);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MilestoneViewHolder) {
Milestone milestone = getValueAt(position);
((MilestoneViewHolder) holder).bind(milestone);
holder.itemView.setTag(R.id.list_position, position);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
@Override
public int getItemCount() {
return mValues.size() + FOOTER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mValues.size()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
public Milestone getValueAt(int position) {
return mValues.get(position);
}
public void setData(Collection<Milestone> milestones) {
mValues.clear();
addData(milestones);
}
public void addData(Collection<Milestone> milestones) {
if (milestones != null) {
mValues.addAll(milestones);
}
notifyDataSetChanged();
}
public void addMilestone(Milestone milestone) {
mValues.add(0, milestone);
notifyItemInserted(0);
}
public void updateIssue(Milestone milestone) {
int indexToDelete = -1;
for (int i=0; i<mValues.size(); i++) {
if (mValues.get(i).getId() == milestone.getId()) {
indexToDelete = i;
break;
}
}
if (indexToDelete != -1) {
mValues.remove(indexToDelete);
mValues.add(indexToDelete, milestone);
}
notifyItemChanged(indexToDelete);
}
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mValues.size());
}
}
\ No newline at end of file
package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.model.api.Milestone;
import com.commit451.gitlab.viewHolder.IssueViewHolder;
import com.commit451.gitlab.viewHolder.MilestoneHeaderViewHolder;
import java.util.ArrayList;
import java.util.Collection;
/**
* Shows the issues associated with a {@link com.commit451.gitlab.model.api.Milestone}
*/
public class MilestoneIssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_MILESTONE = 1;
private static final int HEADER_COUNT = 1;
public interface Listener {
void onIssueClicked(Issue issue);
}
private Listener mListener;
private ArrayList<Issue> mValues;
private Milestone mMilestone;
public Issue getValueAt(int position) {
return mValues.get(position - HEADER_COUNT);
}
public MilestoneIssuesAdapter(Listener listener) {
mListener = listener;
mValues = new ArrayList<>();
}
private final View.OnClickListener mOnProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
mListener.onIssueClicked(getValueAt(position));
}
};
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_HEADER:
return MilestoneHeaderViewHolder.inflate(parent);
case TYPE_MILESTONE:
IssueViewHolder issueViewHolder = IssueViewHolder.inflate(parent);
issueViewHolder.itemView.setOnClickListener(mOnProjectClickListener);
return issueViewHolder;
}
throw new IllegalStateException("No holder for viewType " + viewType);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MilestoneHeaderViewHolder) {
((MilestoneHeaderViewHolder) holder).bind(mMilestone);
}
if (holder instanceof IssueViewHolder) {
Issue issue = getValueAt(position);
((IssueViewHolder) holder).bind(issue);
holder.itemView.setTag(R.id.list_position, position);
}
}
@Override
public int getItemCount() {
return mValues.size() + HEADER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
} else {
return TYPE_MILESTONE;
}
}
public void setIssues(Collection<Issue> issues) {
mValues.clear();
addIssues(issues);
}
public void addIssues(Collection<Issue> issues) {
if (issues != null) {
mValues.addAll(issues);
}
notifyDataSetChanged();
}
public void setMilestone(Milestone milestone) {
mMilestone = milestone;
notifyItemChanged(0);
}
public void addIssue(Issue issue) {
mValues.add(0, issue);
notifyItemInserted(0);
}
public void updateIssue(Issue issue) {
int indexToDelete = -1;
for (int i=0; i<mValues.size(); i++) {
if (mValues.get(i).getId() == issue.getId()) {
indexToDelete = i;
break;
}
}
if (indexToDelete != -1) {
mValues.remove(indexToDelete);
mValues.add(indexToDelete, issue);
}
notifyItemChanged(indexToDelete);
}
}
package com.commit451.gitlab.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Milestone;
import com.commit451.gitlab.viewHolder.MilestoneSpinnerViewHolder;
import java.util.List;
/**
* Adapter to show assignees in a spinner
*/
public class MilestoneSpinnerAdapter extends ArrayAdapter<Milestone> {
public MilestoneSpinnerAdapter(Context context, List<Milestone> milestones) {
super(context, 0, milestones);
milestones.add(0, null);
notifyDataSetChanged();
}
public int getSelectedItemPosition(Milestone currentMilestone) {
if (currentMilestone == null) {
return 0;
}
for (int i=0; i<getCount(); i++) {
Milestone milestone = getItem(i);
if (milestone != null && currentMilestone.getId() == milestone.getId()) {
return i;
}
}
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getTheView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getTheView(position, convertView, parent);
}
private View getTheView(int position, View convertView, ViewGroup parent) {
Milestone milestone = getItem(position);
MilestoneSpinnerViewHolder milestoneSpinnerViewHolder;
if (convertView == null) {
milestoneSpinnerViewHolder = MilestoneSpinnerViewHolder.inflate(parent);
milestoneSpinnerViewHolder.itemView.setTag(R.id.list_view_holder, milestoneSpinnerViewHolder);
} else {
milestoneSpinnerViewHolder = (MilestoneSpinnerViewHolder) convertView.getTag(R.id.list_view_holder);
}
milestoneSpinnerViewHolder.bind(milestone);
return milestoneSpinnerViewHolder.itemView;
}
}
\ No newline at end of file
package com.commit451.gitlab.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Milestone;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
public class MilestonesAdapter extends BaseAdapter {
private ArrayList<Milestone> milestones;
private LayoutInflater inflater;
public MilestonesAdapter(Context context, List<Milestone> milestones) {
this.milestones = new ArrayList<Milestone>(milestones);
if(context != null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}
@Override
public int getCount() {
return milestones.size();
}
@Override
public Milestone getItem(int position) {
return milestones.get(position);
}
@Override
public long getItemId(int position) {
return milestones.get(position).getId();
}
public int getPosition(Milestone milestone) {
return milestones.indexOf(milestone);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) convertView = inflater.inflate(R.layout.item_milestone, parent, false);
final TextView title = (TextView) convertView.findViewById(R.id.title);
final TextView summary = (TextView) convertView.findViewById(R.id.summary);
title.setText(milestones.get(position).getTitle());
DateFormat formatter = android.text.format.DateFormat.getDateFormat(convertView.getContext());
if(milestones.get(position).getDueDate() != null)
summary.setText(formatter.format(milestones.get(position).getDueDate()));
else
summary.setText("");
return convertView;
}
}
Loading
Loading
@@ -6,18 +6,24 @@ import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Project;
import com.commit451.gitlab.viewHolders.ProjectViewHolder;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.ProjectViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
 
/**
* Created by Jawn on 7/28/2015.
* Shows a list of projects
*/
public class ProjectsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
private static final int FOOTER_COUNT = 1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
public interface Listener {
void onProjectClicked(Project project);
}
Loading
Loading
@@ -25,10 +31,15 @@ public class ProjectsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
private Listener mListener;
private List<Project> mValues;
private int[] mColors;
private boolean mLoading;
 
public Project getValueAt(int position) {
return mValues.get(position);
}
private final View.OnClickListener onProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
mListener.onProjectClicked(getValueAt(position));
}
};
 
public ProjectsAdapter(Context context, Listener listener) {
mListener = listener;
Loading
Loading
@@ -36,6 +47,48 @@ public class ProjectsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
mColors = context.getResources().getIntArray(R.array.cool_colors);
}
 
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_ITEM:
ProjectViewHolder holder = ProjectViewHolder.inflate(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
case TYPE_FOOTER:
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalStateException("No idea what to create for view type " + viewType);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ProjectViewHolder) {
Project project = getValueAt(position);
((ProjectViewHolder) holder).bind(project, mColors[position % mColors.length]);
holder.itemView.setTag(R.id.list_position, position);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
@Override
public int getItemCount() {
return mValues.size() + FOOTER_COUNT;
}
@Override
public int getItemViewType(int position) {
if (position == mValues.size()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
public Project getValueAt(int position) {
return mValues.get(position);
}
public void clearData() {
mValues.clear();
notifyDataSetChanged();
Loading
Loading
@@ -54,32 +107,8 @@ public class ProjectsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
notifyDataSetChanged();
}
 
private final View.OnClickListener onProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
mListener.onProjectClicked(getValueAt(position));
}
};
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ProjectViewHolder holder = ProjectViewHolder.create(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ProjectViewHolder) {
Project project = getValueAt(position);
((ProjectViewHolder) holder).bind(project, mColors[position % mColors.length]);
holder.itemView.setTag(R.id.list_position, position);
}
}
@Override
public int getItemCount() {
return mValues.size();
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mValues.size());
}
}
Loading
Loading
@@ -6,14 +6,14 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.fragments.ProjectsFragment;
import com.commit451.gitlab.fragment.ProjectsFragment;
 
/**
* Projects Pager Adapter
* Created by Jawn on 9/21/2015.
*/
public class ProjectsPagerAdapter extends FragmentPagerAdapter {
private static final int SECTION_COUNT = 2;
private static final int SECTION_COUNT = 3;
 
private String[] mTitles;
 
Loading
Loading
@@ -30,6 +30,8 @@ public class ProjectsPagerAdapter extends FragmentPagerAdapter {
return ProjectsFragment.newInstance(ProjectsFragment.MODE_ALL);
case 1:
return ProjectsFragment.newInstance(ProjectsFragment.MODE_MINE);
case 2:
return ProjectsFragment.newInstance(ProjectsFragment.MODE_STARRED);
}
 
throw new IllegalStateException("Position exceeded on view pager");
Loading
Loading
Loading
Loading
@@ -6,8 +6,8 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.fragments.ProjectsFragment;
import com.commit451.gitlab.fragments.UsersFragment;
import com.commit451.gitlab.fragment.ProjectsFragment;
import com.commit451.gitlab.fragment.UsersFragment;
 
/**
* The pager that controls the fragments when on the search activity
Loading
Loading
@@ -19,7 +19,7 @@ public class SearchPagerAdapter extends FragmentPagerAdapter {
 
private String[] mTitles;
private ProjectsFragment mProjectsFragment;
//TODO change this to users
private UsersFragment mUsersFragment;
 
public SearchPagerAdapter(Context context, FragmentManager fm) {
Loading
Loading
package com.commit451.gitlab.adapter;
 
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.fragments.CommitsFragment;
import com.commit451.gitlab.fragments.FilesFragment;
import com.commit451.gitlab.fragments.IssuesFragment;
import com.commit451.gitlab.fragments.MembersFragment;
import com.commit451.gitlab.fragments.MergeRequestsFragment;
import com.commit451.gitlab.fragments.OverviewFragment;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.fragment.CommitsFragment;
import com.commit451.gitlab.fragment.FeedFragment;
import com.commit451.gitlab.fragment.FilesFragment;
import com.commit451.gitlab.fragment.IssuesFragment;
import com.commit451.gitlab.fragment.MilestonesFragment;
import com.commit451.gitlab.fragment.ProjectMembersFragment;
import com.commit451.gitlab.fragment.MergeRequestsFragment;
import com.commit451.gitlab.fragment.OverviewFragment;
import com.commit451.gitlab.model.api.Project;
import java.util.HashSet;
import java.util.Set;
 
/**
* Controls the sections that should be shown in a {@link com.commit451.gitlab.activities.ProjectActivity}
* Controls the sections that should be shown in a {@link com.commit451.gitlab.activity.ProjectActivity}
* Created by Jawn on 9/20/2015.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
 
private static final int SECTION_COUNT = 6;
private static final int SECTION_COUNT = 8;
private static final int OVERVIEW_POS = 0;
private static final int ACTIVITY_POS = 1;
private static final int FILES_POS = 2;
private static final int COMMITS_POS = 3;
private static final int MILESTONES_POS = 4;
private static final int ISSUES_POS = 5;
private static final int MERGE_REQUESTS_POS = 6;
private static final int PROJECT_MEMBERS_POS = 7;
 
private String[] mTitles;
private final Project mProject;
private final String[] mTitles;
private final Set<Integer> mDisabledSections = new HashSet<>();
 
public SectionsPagerAdapter(Context context, FragmentManager fm) {
public SectionsPagerAdapter(ProjectActivity context, FragmentManager fm) {
super(fm);
mProject = context.getProject();
mTitles = context.getResources().getStringArray(R.array.main_tabs);
Project project = context.getProject();
if (!project.isIssuesEnabled()) {
mDisabledSections.add(ISSUES_POS);
}
if (!project.isMergeRequestsEnabled()) {
mDisabledSections.add(MERGE_REQUESTS_POS);
}
if (!project.isIssuesEnabled() && !project.isMergeRequestsEnabled()) {
mDisabledSections.add(MILESTONES_POS);
}
}
@Override
public int getCount() {
return SECTION_COUNT - mDisabledSections.size();
}
@Override
public CharSequence getPageTitle(int position) {
position = getCorrectPosition(position);
return mTitles[position];
}
 
@Override
public Fragment getItem(int position) {
position = getCorrectPosition(position);
 
switch(position) {
case 0:
switch (position) {
case OVERVIEW_POS:
return OverviewFragment.newInstance();
case 1:
case ACTIVITY_POS:
return FeedFragment.newInstance(mProject.getFeedUrl().toString());
case FILES_POS:
return FilesFragment.newInstance();
case COMMITS_POS:
return CommitsFragment.newInstance();
case 2:
case MILESTONES_POS:
return MilestonesFragment.newInstance();
case ISSUES_POS:
return IssuesFragment.newInstance();
case 3:
return FilesFragment.newInstance();
case 4:
case MERGE_REQUESTS_POS:
return MergeRequestsFragment.newInstance();
case 5:
return MembersFragment.newInstance();
case PROJECT_MEMBERS_POS:
return ProjectMembersFragment.newInstance();
}
 
throw new IllegalStateException("Position exceeded on view pager");
}
 
@Override
public int getCount() {
return SECTION_COUNT;
}
private int getCorrectPosition(int position) {
for (int i = 0; i <= position; i++) {
if (mDisabledSections.contains(i)) {
position++;
}
}
 
@Override
public CharSequence getPageTitle(int position) {
return mTitles[position];
return position;
}
}
Loading
Loading
@@ -5,8 +5,8 @@ import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.User;
import com.commit451.gitlab.viewHolders.UserViewHolder;
import com.commit451.gitlab.model.api.UserBasic;
import com.commit451.gitlab.viewHolder.UserViewHolder;
 
import java.util.ArrayList;
import java.util.Collection;
Loading
Loading
@@ -18,10 +18,10 @@ import java.util.Collection;
public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
 
public interface Listener {
void onUserClicked(User user, UserViewHolder userViewHolder);
void onUserClicked(UserBasic user, UserViewHolder userViewHolder);
}
private Listener mListener;
private ArrayList<User> mData;
private ArrayList<UserBasic> mData;
 
private final View.OnClickListener mItemClickListener = new View.OnClickListener() {
@Override
Loading
Loading
@@ -39,7 +39,7 @@ public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
 
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
UserViewHolder holder = UserViewHolder.newInstance(parent);
UserViewHolder holder = UserViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mItemClickListener);
return holder;
}
Loading
Loading
@@ -56,12 +56,16 @@ public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
return mData.size();
}
 
private User getUser(int position) {
private UserBasic getUser(int position) {
return mData.get(position);
}
 
public void setData(Collection<User> users) {
public void setData(Collection<UserBasic> users) {
mData.clear();
addData(users);
}
public void addData(Collection<UserBasic> users) {
if (users != null) {
mData.addAll(users);
}
Loading
Loading
package com.commit451.gitlab.api;
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.data.Prefs;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Response;
import java.io.IOException;
/**
* Adds the private token to all requests
* Created by Jawn on 9/15/2015.
*/
public class ApiKeyRequestInterceptor implements Interceptor {
private static final String KEY_PRIVATE_TOKEN = "PRIVATE-TOKEN";
//TODO change this to where it does not read from prefs every time (inefficient)
@Override
public Response intercept(Chain chain) throws IOException {
String privateToken = Prefs.getPrivateToken(GitLabApp.instance());
if (privateToken == null) {
throw new IllegalStateException("The private token was null");
}
return chain.proceed(chain.request().newBuilder()
.header(KEY_PRIVATE_TOKEN, Prefs.getPrivateToken(GitLabApp.instance()))
.build());
}
}
package com.commit451.gitlab.api;
import com.commit451.gitlab.model.Account;
import com.squareup.okhttp.HttpUrl;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
import timber.log.Timber;
/**
* Adds the private token to all requests
* Created by Jawn on 9/15/2015.
*/
public class AuthenticationRequestInterceptor implements Interceptor {
private static final String AUTHORIZATION_HEADER_FIELD = "Authorization";
private static final String PRIVATE_TOKEN_HEADER_FIELD = "PRIVATE-TOKEN";
private static final String PRIVATE_TOKEN_GET_PARAMETER = "private_token";
private Account mAccount;
public AuthenticationRequestInterceptor(Account account) {
mAccount = account;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
HttpUrl url = request.httpUrl();
if (url.toString().startsWith(mAccount.getServerUrl().toString())) {
String authorizationHeader = mAccount.getAuthorizationHeader();
if (authorizationHeader != null) {
request = request.newBuilder()
.header(AUTHORIZATION_HEADER_FIELD, authorizationHeader)
.build();
}
String privateToken = mAccount.getPrivateToken();
if (privateToken == null) {
Timber.e("The private token was null");
} else {
url = url.newBuilder()
.addQueryParameter(PRIVATE_TOKEN_GET_PARAMETER, privateToken)
.build();
request = request.newBuilder()
.header(PRIVATE_TOKEN_HEADER_FIELD, privateToken)
.url(url)
.build();
}
}
return chain.proceed(request);
}
}
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