Skip to content
Snippets Groups Projects
Commit fc066499 authored by Benjamin Dengler's avatar Benjamin Dengler
Browse files

Initial commit.

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 1854 additions and 0 deletions
package com.bd.gitlab.adapter;
import java.util.ArrayList;
import java.util.List;
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.bd.gitlab.R;
import com.bd.gitlab.model.TreeItem;
public class FilesAdapter extends BaseAdapter {
private ArrayList<TreeItem> treeItems;
private LayoutInflater inflater;
public FilesAdapter(Context context, List<TreeItem> treeItems) {
this.treeItems = new ArrayList<TreeItem>(treeItems);
if(context != null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}
@Override
public int getCount() {
return treeItems.size();
}
@Override
public TreeItem getItem(int position) {
return treeItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) convertView = inflater.inflate(R.layout.simple_list_item, parent, false);
final TextView text = (TextView) convertView.findViewById(R.id.text);
text.setText(treeItems.get(position).getName());
if(treeItems.get(position).getType().equals("tree"))
text.setCompoundDrawablesWithIntrinsicBounds(convertView.getResources().getDrawable(R.drawable.ic_folder), null, null, null);
else if(treeItems.get(position).getType().equals("submodule"))
text.setCompoundDrawablesWithIntrinsicBounds(convertView.getResources().getDrawable(R.drawable.ic_repo), null, null, null);
else
text.setCompoundDrawablesWithIntrinsicBounds(convertView.getResources().getDrawable(R.drawable.ic_doc), null, null, null);
return convertView;
}
}
package com.bd.gitlab.adapter;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.bd.gitlab.R;
import com.bd.gitlab.model.Issue;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.views.CompoundTextView;
import com.squareup.picasso.Picasso;
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
package com.bd.gitlab.adapter;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
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.bd.gitlab.R;
import com.bd.gitlab.model.Milestone;
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.twoline_list_item, 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;
}
}
package com.bd.gitlab.adapter;
import fr.tkeunebr.gravatar.Gravatar;
import in.uncod.android.bypass.Bypass;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.text.format.DateUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bd.gitlab.R;
import com.bd.gitlab.model.Note;
import com.bd.gitlab.tools.Repository;
import com.squareup.picasso.Picasso;
public class NoteAdapter extends BaseAdapter {
private ArrayList<Note> notes;
private LayoutInflater inflater;
public NoteAdapter(Context context, List<Note> notes) {
this.notes = new ArrayList<Note>(notes);
if(context != null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}
@Override
public int getCount() {
return notes.size();
}
@Override
public Note getItem(int position) {
return notes.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void addNote(Note note) {
if(note != null) {
notes.add(note);
notifyDataSetChanged();
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) convertView = inflater.inflate(R.layout.note_list_item, parent, false);
if(position >= notes.size() || notes.get(position) == null)
return convertView;
final TextView title = (TextView) convertView.findViewById(R.id.title);
final TextView custom = (TextView) convertView.findViewById(R.id.custom);
final TextView summary = (TextView) convertView.findViewById(R.id.summary);
final ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
if(notes.get(position).getCreatedAt() != null)
custom.setText(DateUtils.getRelativeTimeSpanString(notes.get(position).getCreatedAt().getTime()));
if(notes.get(position).getAuthor() != null)
title.setText(notes.get(position).getAuthor().getName());
String temp = "";
if(notes.get(position).getBody() != null)
temp = notes.get(position).getBody();
Bypass bypass = new Bypass();
summary.setText(bypass.markdownToSpannable(temp));
summary.setMovementMethod(LinkMovementMethod.getInstance());
float percent = Repository.displayWidth / 720f;
int size = (int) (96f * percent);
String url = "http://www.gravatar.com/avatar/00000000000000000000000000000000?s=" + size;
if(notes.get(position).getAuthor().getEmail() != null)
url = Gravatar.init().with(notes.get(position).getAuthor().getEmail()).size(size).build();
else if(notes.get(position).getAuthor().getAvatarUrl() != null)
url = notes.get(position).getAuthor().getAvatarUrl() + "&s=" + size;
Picasso.with(convertView.getContext()).load(url).into(icon);
return convertView;
}
}
package com.bd.gitlab.adapter;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bd.gitlab.R;
import com.bd.gitlab.model.User;
import com.bd.gitlab.tools.Repository;
import com.squareup.picasso.Picasso;
import fr.tkeunebr.gravatar.Gravatar;
public class UserAdapter extends BaseAdapter {
private ArrayList<User> users;
private LayoutInflater inflater;
public UserAdapter(Context context, List<User> users) {
this.users = new ArrayList<User>(users);
if(context != null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}
@Override
public int getCount() {
return users.size();
}
@Override
public User getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
if(users.get(position) == null)
return -1;
return users.get(position).getId();
}
public int getPosition(User user) {
return users.indexOf(user);
}
public void addUser(User user) {
users.add(user);
notifyDataSetChanged();
}
public void removeUser(long userId) {
for(User u : users) {
if(u.getId() == userId) {
users.remove(u);
break;
}
}
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) convertView = inflater.inflate(R.layout.user_list_item, parent, false);
final TextView title = (TextView) convertView.findViewById(R.id.title);
final TextView summary = (TextView) convertView.findViewById(R.id.summary);
final TextView custom = (TextView) convertView.findViewById(R.id.custom);
final ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
title.setText(users.get(position).getName());
if(users.get(position).getEmail() != null)
summary.setText(users.get(position).getEmail());
else
summary.setText(users.get(position).getUsername());
custom.setText(users.get(position).getAccessLevel(convertView.getResources().getStringArray(R.array.role_names)));
float percent = Repository.displayWidth / 720f;
int size = (int) (96f * percent);
String url = "http://www.gravatar.com/avatar/00000000000000000000000000000000?s=" + size;
if(users.get(position).getEmail() != null)
url = Gravatar.init().with(users.get(position).getEmail()).size(size).build();
else if(users.get(position).getAvatarUrl() != null)
url = users.get(position).getAvatarUrl() + "&s=" + size;
Picasso.with(convertView.getContext()).load(url).into(icon);
return convertView;
}
}
package com.bd.gitlab.fragments;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import butterknife.InjectView;
import butterknife.OnClick;
import com.bd.gitlab.IssueActivity;
import com.bd.gitlab.R;
import com.bd.gitlab.model.Issue;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class AddIssueDialogFragment extends DialogFragment {
@InjectView(R.id.title_input)
EditText titleInput;
@InjectView(R.id.description_input)
EditText descriptionInput;
private ProgressDialog pd;
/**
* Create a new instance of AddDialogFragment
**/
static AddIssueDialogFragment newInstance() {
return new AddIssueDialogFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_add_issue, container, false);
ButterKnife.inject(this, view);
getDialog().setTitle(getString(R.string.add_issue_dialog_title));
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@OnClick(R.id.save_button)
public void onSaveClick() {
if(titleInput.getText().toString().trim().length() > 0) {
pd = ProgressDialog.show(AddIssueDialogFragment.this.getActivity(), "", getResources().getString(R.string.progress_dialog), true);
Repository.getService().postIssue(Repository.selectedProject.getId(), titleInput.getText().toString().trim(), descriptionInput.getText().toString().trim(), issueCallback);
}
else
Crouton.makeText(AddIssueDialogFragment.this.getActivity(), R.string.input_error, Style.ALERT, (ViewGroup) getView()).show();
}
@OnClick(R.id.cancel_button)
public void onCancelClick() {
this.dismiss();
}
private Callback<Issue> issueCallback = new Callback<Issue>() {
@Override
public void success(Issue issue, Response resp) {
if(pd != null && pd.isShowing())
pd.cancel();
if(Repository.issueAdapter != null) {
Repository.issueAdapter.addIssue(issue);
Repository.issueAdapter.notifyDataSetChanged();
}
Repository.selectedIssue = issue;
startActivity(new Intent(getActivity(), IssueActivity.class));
AddIssueDialogFragment.this.dismiss();
}
@Override
public void failure(RetrofitError e) {
RetrofitHelper.printDebugInfo(getActivity(), e);
if(pd != null && pd.isShowing())
pd.cancel();
Crouton.makeText(AddIssueDialogFragment.this.getActivity(), R.string.connection_error, Style.ALERT).show();
}
};
}
package com.bd.gitlab.fragments;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import butterknife.InjectView;
import butterknife.OnClick;
import com.bd.gitlab.R;
import com.bd.gitlab.adapter.UserAdapter;
import com.bd.gitlab.model.User;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class AddUserDialogFragment extends DialogFragment {
@InjectView(R.id.user_spinner)
Spinner userSpinner;
@InjectView(R.id.role_spinner)
Spinner roleSpinner;
private ProgressDialog pd;
/**
* Create a new instance of AddDialogFragment
**/
static AddUserDialogFragment newInstance() {
return new AddUserDialogFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_add_user, container, false);
ButterKnife.inject(this, view);
getDialog().setTitle(getString(R.string.add_user_dialog_title));
UserAdapter adapter = new UserAdapter(this.getActivity(), Repository.users);
userSpinner.setAdapter(adapter);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this.getActivity(), R.array.role_names, android.R.layout.simple_spinner_dropdown_item);
roleSpinner.setAdapter(adapter2);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@OnClick(R.id.add_button)
public void onAddClick() {
if(Repository.selectedProject.getGroup() == null)
return;
pd = ProgressDialog.show(AddUserDialogFragment.this.getActivity(), "", getResources().getString(R.string.progress_dialog), true);
long userId = ((User) userSpinner.getSelectedItem()).getId();
String accessLevel = getActivity().getResources().getStringArray(R.array.role_values)[roleSpinner.getSelectedItemPosition()];
Repository.getService().addGroupMember(Repository.selectedProject.getGroup().getId(), userId, accessLevel, userCallback);
}
private Callback<User> userCallback = new Callback<User>() {
@Override
public void success(User user, Response resp) {
if(pd != null && pd.isShowing())
pd.cancel();
if(user.getId() != 0)
Repository.userAdapter.addUser(user);
else
Crouton.makeText(AddUserDialogFragment.this.getActivity(), R.string.user_error, Style.ALERT).show();
AddUserDialogFragment.this.dismiss();
}
@Override
public void failure(RetrofitError e) {
RetrofitHelper.printDebugInfo(getActivity(), e);
if(pd != null && pd.isShowing())
pd.cancel();
Crouton.makeText(AddUserDialogFragment.this.getActivity(), R.string.user_error, Style.ALERT).show();
AddUserDialogFragment.this.dismiss();
}
};
@OnClick(R.id.cancel_button)
public void onCancelClick() {
this.dismiss();
}
}
package com.bd.gitlab.fragments;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import com.bd.gitlab.DiffActivity;
import com.bd.gitlab.R;
import com.bd.gitlab.adapter.CommitsAdapter;
import com.bd.gitlab.model.DiffLine;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class CommitsFragment extends Fragment implements OnRefreshListener, OnItemClickListener {
@InjectView(R.id.fragmentList) ListView listView;
@InjectView(R.id.repo_url) EditText repoUrl;
@InjectView(R.id.ptr_layout) PullToRefreshLayout ptrLayout;
public CommitsFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_commits, container, false);
ButterKnife.inject(this, view);
listView.setOnItemClickListener(this);
ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable().listener(this).setup(ptrLayout);
if(Repository.selectedProject != null)
loadData();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@Override
public void onRefreshStarted(View view) {
loadData();
}
public void loadData() {
if(Repository.selectedProject == null)
return;
repoUrl.setText("git@" + Repository.getServerUrl().replaceAll("http://", "").replaceAll("https://", "") + ":" + Repository.selectedProject.getPathWithNamespace() + ".git");
if(Repository.selectedBranch == null) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
listView.setAdapter(null);
return;
}
if(ptrLayout != null && !ptrLayout.isRefreshing())
ptrLayout.setRefreshing(true);
Repository.getService().getCommits(Repository.selectedProject.getId(), Repository.selectedBranch.getName(), commitsCallback);
}
private Callback<List<DiffLine>> commitsCallback = new Callback<List<DiffLine>>() {
@Override
public void success(List<DiffLine> commits, Response resp) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
if(commits.size() > 0)
Repository.newestCommit = commits.get(0);
else
Repository.newestCommit = null;
CommitsAdapter commitsAdapter = new CommitsAdapter(getActivity(), commits);
listView.setAdapter(commitsAdapter);
}
@Override
public void failure(RetrofitError e) {
RetrofitHelper.printDebugInfo(getActivity(), e);
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
Crouton.makeText(getActivity(), R.string.connection_error_commits, Style.ALERT).show();
listView.setAdapter(null);
}
};
@OnClick(R.id.repo_url)
public void onRepoClick() {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", repoUrl.getText().toString());
clipboard.setPrimaryClip(clip);
Crouton.makeText(this.getActivity(), R.string.copy_notification, Style.CONFIRM).show();
}
public boolean onBackPressed() {
return false;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Repository.selectedCommit = ((CommitsAdapter) listView.getAdapter()).getItem(position);
startActivity(new Intent(getActivity(), DiffActivity.class));
}
}
\ No newline at end of file
package com.bd.gitlab.fragments;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
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 android.widget.TextView;
import com.bd.gitlab.FileActivity;
import com.bd.gitlab.R;
import com.bd.gitlab.adapter.FilesAdapter;
import com.bd.gitlab.model.TreeItem;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class FilesFragment extends Fragment implements OnItemClickListener, OnRefreshListener {
private ArrayList<String> path;
@InjectView(R.id.fragmentList) ListView listView;
@InjectView(R.id.error_text) TextView errorText;
@InjectView(R.id.ptr_layout) PullToRefreshLayout ptrLayout;
public FilesFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_files, container, false);
ButterKnife.inject(this, view);
listView.setOnItemClickListener(this);
ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable().listener(this).setup(ptrLayout);
path = new ArrayList<String>();
if(Repository.selectedProject != null)
loadData();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
public void loadData() {
path = new ArrayList<String>();
loadFiles();
}
@Override
public void onRefreshStarted(View view) {
loadFiles();
}
private void loadFiles() {
String branch = "master";
if(Repository.selectedBranch != null)
branch = Repository.selectedBranch.getName();
if(ptrLayout != null && !ptrLayout.isRefreshing())
ptrLayout.setRefreshing(true);
String currentPath = "";
for(String p : path) {
currentPath += p;
}
Repository.getService().getTree(Repository.selectedProject.getId(), branch, currentPath, filesCallback);
}
private Callback<List<TreeItem>> filesCallback = new Callback<List<TreeItem>>() {
@Override
public void success(List<TreeItem> files, Response resp) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
FilesAdapter filesAdapter = new FilesAdapter(getActivity(), files);
listView.setAdapter(filesAdapter);
}
@Override
public void failure(RetrofitError e) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
if(e.getResponse().getStatus() == 404) {
errorText.setVisibility(View.VISIBLE);
listView.setVisibility(View.GONE);
}
else {
if(path.size() > 0)
path.remove(path.size() - 1);
listView.setAdapter(null);
if(e.getResponse().getStatus() != 500) {
RetrofitHelper.printDebugInfo(getActivity(), e);
Crouton.makeText(getActivity(), R.string.connection_error_files, Style.ALERT).show();
}
}
}
};
public boolean onBackPressed() {
if(path.size() > 0) {
path.remove(path.size() - 1);
loadFiles();
return true;
}
return false;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Repository.selectedFile = ((FilesAdapter) listView.getAdapter()).getItem(position);
if(Repository.selectedFile.getType().equals("tree")) {
path.add(Repository.selectedFile.getName() + "/");
loadFiles();
}
else if(Repository.selectedFile.getType().equals("blob")) {
String pathExtra = "";
for(String p : path) {
pathExtra += p;
}
Intent i = new Intent(getActivity(), FileActivity.class);
i.putExtra("path", pathExtra);
startActivity(i);
}
}
}
\ No newline at end of file
package com.bd.gitlab.fragments;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import com.bd.gitlab.IssueActivity;
import com.bd.gitlab.R;
import com.bd.gitlab.adapter.IssuesAdapter;
import com.bd.gitlab.model.Issue;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class IssuesFragment extends Fragment implements OnItemClickListener, OnRefreshListener {
@InjectView(R.id.add_issue_button) Button addIssueButton;
@InjectView(R.id.fragmentList) ListView listView;
@InjectView(R.id.ptr_layout) PullToRefreshLayout ptrLayout;
public IssuesFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_issues, container, false);
ButterKnife.inject(this, view);
listView.setOnItemClickListener(this);
ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable().listener(this).setup(ptrLayout);
if(Repository.selectedProject != null)
loadData();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@Override
public void onRefreshStarted(View view) {
loadData();
}
public void loadData() {
if(ptrLayout != null && !ptrLayout.isRefreshing())
ptrLayout.setRefreshing(true);
Repository.getService().getIssues(Repository.selectedProject.getId(), issuesCallback);
}
private Callback<List<Issue>> issuesCallback = new Callback<List<Issue>>() {
@Override
public void success(List<Issue> issues, Response resp) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
IssuesAdapter issueAdapter = new IssuesAdapter(getActivity(), issues);
listView.setAdapter(issueAdapter);
Repository.issueAdapter = issueAdapter;
addIssueButton.setEnabled(true);
}
@Override
public void failure(RetrofitError e) {
RetrofitHelper.printDebugInfo(getActivity(), e);
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
Crouton.makeText(getActivity(), R.string.connection_error_issues, Style.ALERT).show();
listView.setAdapter(null);
}
};
public boolean onBackPressed() {
return false;
}
@OnClick(R.id.add_issue_button)
public void onAddIssueClick() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
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.bd.gitlab.fragments;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.bd.gitlab.R;
import com.bd.gitlab.model.DeleteResponse;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class RemoveUserDialogFragment extends DialogFragment {
private ProgressDialog pd;
/**
* Create a new instance of AddDialogFragment
**/
static RemoveUserDialogFragment newInstance() {
return new RemoveUserDialogFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_remove_user, container, false);
ButterKnife.inject(this, view);
getDialog().setTitle(getString(R.string.remove_user_dialog_title));
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@OnClick(R.id.remove_button)
public void onRemoveClick() {
if(Repository.selectedProject.getGroup() == null)
return;
pd = ProgressDialog.show(RemoveUserDialogFragment.this.getActivity(), "", getResources().getString(R.string.progress_dialog), true);
Repository.getService().removeGroupMember(Repository.selectedProject.getGroup().getId(), Repository.selectedUser.getId(), deleteCallback);
}
private Callback<DeleteResponse> deleteCallback = new Callback<DeleteResponse>() {
@Override
public void success(DeleteResponse response, Response resp) {
if(pd != null && pd.isShowing())
pd.cancel();
if(response.getUserId() != 0) {
Repository.userAdapter.removeUser(response.getUserId());
}
else
Crouton.makeText(RemoveUserDialogFragment.this.getActivity(), R.string.user_remove_error, Style.ALERT).show();
RemoveUserDialogFragment.this.dismiss();
}
@Override
public void failure(RetrofitError e) {
RetrofitHelper.printDebugInfo(getActivity(), e);
if(pd != null && pd.isShowing())
pd.cancel();
Crouton.makeText(RemoveUserDialogFragment.this.getActivity(), R.string.user_remove_error, Style.ALERT).show();
RemoveUserDialogFragment.this.dismiss();
}
};
@OnClick(R.id.cancel_button)
public void onCancelClick() {
this.dismiss();
}
}
package com.bd.gitlab.fragments;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import com.bd.gitlab.R;
import com.bd.gitlab.adapter.UserAdapter;
import com.bd.gitlab.model.User;
import com.bd.gitlab.tools.Repository;
import com.bd.gitlab.tools.RetrofitHelper;
import de.keyboardsurfer.android.widget.crouton.Crouton;
import de.keyboardsurfer.android.widget.crouton.Style;
public class UsersFragment extends Fragment implements OnItemClickListener, OnRefreshListener {
@InjectView(R.id.add_user_button) Button addUserButton;
@InjectView(R.id.fragmentList) ListView listView;
@InjectView(R.id.error_text) TextView errorText;
@InjectView(R.id.ptr_layout) PullToRefreshLayout ptrLayout;
public UsersFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_users, container, false);
ButterKnife.inject(this, view);
listView.setOnItemClickListener(this);
ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable().listener(this).setup(ptrLayout);
if(Repository.selectedProject != null)
loadData();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.reset(this);
}
@Override
public void onRefreshStarted(View view) {
loadData();
}
public void loadData() {
if(ptrLayout != null && !ptrLayout.isRefreshing())
ptrLayout.setRefreshing(true);
if(Repository.selectedProject.getGroup() == null) {
errorText.setVisibility(View.VISIBLE);
errorText.setText(R.string.not_in_group);
listView.setVisibility(View.GONE);
addUserButton.setVisibility(View.GONE);
return;
}
Repository.getService().getGroupMembers(Repository.selectedProject.getGroup().getId(), usersCallback);
}
public Callback<List<User>> usersCallback = new Callback<List<User>>() {
@Override
public void success(List<User> users, Response resp) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
errorText.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
addUserButton.setVisibility(View.VISIBLE);
Repository.userAdapter = new UserAdapter(getActivity(), users);
listView.setAdapter(Repository.userAdapter);
addUserButton.setEnabled(true);
}
@Override
public void failure(RetrofitError e) {
if(ptrLayout != null && ptrLayout.isRefreshing())
ptrLayout.setRefreshComplete();
if(e.getResponse() != null && e.getResponse().getStatus() == 404) {
errorText.setVisibility(View.VISIBLE);
errorText.setText(R.string.groups_not_supported);
listView.setVisibility(View.GONE);
addUserButton.setVisibility(View.GONE);
}
else {
errorText.setVisibility(View.GONE);
listView.setVisibility(View.VISIBLE);
addUserButton.setVisibility(View.VISIBLE);
RetrofitHelper.printDebugInfo(getActivity(), e);
Crouton.makeText(getActivity(), R.string.connection_error_users, Style.ALERT).show();
listView.setAdapter(null);
}
}
};
public boolean onBackPressed() {
return false;
}
@OnClick(R.id.add_user_button)
public void onAddUserClick() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = AddUserDialogFragment.newInstance();
newFragment.show(ft, "dialog");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Repository.selectedUser = Repository.userAdapter.getItem(position);
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = RemoveUserDialogFragment.newInstance();
newFragment.show(ft, "dialog");
}
}
\ No newline at end of file
package com.bd.gitlab.model;
public class Branch {
private String name;
private boolean protected_;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isProtected() {
return protected_;
}
public void setProtected(boolean protected_) {
this.protected_ = protected_;
}
public String toString() {
return name;
}
}
package com.bd.gitlab.model;
import java.util.Date;
public class DeleteResponse {
private long id;
private long group_id;
private long user_id;
private long group_access;
private long notification_level;
private Date created_at;
private Date updated_at;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getGroupId() {
return group_id;
}
public void setGroupId(long group_id) {
this.group_id = group_id;
}
public long getUserId() {
return user_id;
}
public void setUserId(long user_id) {
this.user_id = user_id;
}
public long getGroupAccess() {
return group_access;
}
public void setGroupAccess(long group_access) {
this.group_access = group_access;
}
public long getNotificationLevel() {
return notification_level;
}
public void setNotificationLevel(long notification_level) {
this.notification_level = notification_level;
}
public Date getCreatedAt() {
return created_at;
}
public void setCreatedAt(Date created_at) {
this.created_at = created_at;
}
public Date getUpdatedAt() {
return updated_at;
}
public void setUpdatedAt(Date updated_at) {
this.updated_at = updated_at;
}
}
\ No newline at end of file
package com.bd.gitlab.model;
import java.util.ArrayList;
import java.util.List;
public class Diff {
private String diff;
private String new_path;
private String old_path;
private int a_mode;
private int b_mode;
private boolean new_file;
private boolean renamed_file;
private boolean deleted_file;
public String getDiff() {
return diff;
}
public void setDiff(String diff) {
this.diff = diff;
}
public List<Line> getLines() {
ArrayList<Line> lines = new ArrayList<Line>();
int curOldLine = 0;
int curNewLine = 0;
String[] temp = diff.split("\\r?\\n");
for(String s : temp) {
if(s.startsWith("+++") || s.startsWith("---"))
continue;
if(s.startsWith("@@")) {
int index = s.indexOf(',');
if(index == -1 || index >= s.indexOf('+'))
index = s.indexOf('-') + 2;
curOldLine = Integer.parseInt(s.substring(s.indexOf('-') + 1, index));
index = s.indexOf(',', s.indexOf('+'));
if(index == -1)
index = s.indexOf('+') + 2;
curNewLine = Integer.parseInt(s.substring(s.indexOf('+') + 1, index));
Line line = new Line();
line.lineContent = s;
line.lineType = LineType.COMMENT;
line.oldLine = "...";
line.newLine = "...";
lines.add(line);
continue;
}
Line line = new Line();
line.lineContent = s;
if(s.length() < 1)
s = " ";
switch(s.charAt(0)) {
case ' ':
line.lineType = LineType.NORMAL;
break;
case '+':
line.lineType = LineType.ADDED;
break;
case '-':
line.lineType = LineType.REMOVED;
break;
}
line.oldLine = "";
line.newLine = "";
if(line.lineType != LineType.ADDED) {
line.oldLine = String.valueOf(curOldLine);
curOldLine++;
}
if(line.lineType != LineType.REMOVED) {
line.newLine = String.valueOf(curNewLine);
curNewLine++;
}
lines.add(line);
}
return lines;
}
public String getNewPath() {
return new_path;
}
public void setNewPath(String new_path) {
this.new_path = new_path;
}
public String getOldPath() {
return old_path;
}
public void setOldPath(String old_path) {
this.old_path = old_path;
}
public int getAMode() {
return a_mode;
}
public void setAMode(int a_mode) {
this.a_mode = a_mode;
}
public int getBMode() {
return b_mode;
}
public void setBMode(int b_mode) {
this.b_mode = b_mode;
}
public boolean isNewFile() {
return new_file;
}
public void setNewFile(boolean new_file) {
this.new_file = new_file;
}
public boolean isRenamedFile() {
return renamed_file;
}
public void setRenamedFile(boolean renamed_file) {
this.renamed_file = renamed_file;
}
public boolean isDeletedFile() {
return deleted_file;
}
public void setDeletedFile(boolean deleted_file) {
this.deleted_file = deleted_file;
}
public class Line {
public String oldLine;
public String newLine;
public String lineContent;
public LineType lineType;
}
public enum LineType {
NORMAL, ADDED, REMOVED, COMMENT
}
}
package com.bd.gitlab.model;
import java.util.Date;
public class DiffLine {
private String id;
private String short_id;
private String title;
private String author_name;
private String author_email;
private Date created_at;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getShortId() {
return short_id;
}
public void setShortId(String short_id) {
this.short_id = short_id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthorName() {
return author_name;
}
public void setAuthorName(String author_name) {
this.author_name = author_name;
}
public String getAuthorEmail() {
return author_email;
}
public void setAuthorEmail(String author_email) {
this.author_email = author_email;
}
public Date getCreatedAt() {
return created_at;
}
public void setCreatedAt(Date created_at) {
this.created_at = created_at;
}
}
package com.bd.gitlab.model;
public class Group {
private long id;
private String name;
private String path;
private long owner_id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public long getOwnerId() {
return owner_id;
}
public void setOwnerId(long owner_id) {
this.owner_id = owner_id;
}
}
package com.bd.gitlab.model;
import java.util.Date;
public class Issue {
private long id;
private long iid;
private long project_id;
private String title;
private String description;
private String[] labels;
private Milestone milestone;
private User assignee;
private User author;
private String state;
private Date updated_at;
private Date created_at;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getIid() {
return iid;
}
public void setIid(long iid) {
this.iid = iid;
}
public long getProjectId() {
return project_id;
}
public void setProjectId(long project_id) {
this.project_id = project_id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String[] getLabels() {
return labels;
}
public void setLabels(String[] labels) {
this.labels = labels;
}
public Milestone getMilestone() {
return milestone;
}
public void setMilestone(Milestone milestone) {
this.milestone = milestone;
}
public User getAssignee() {
return assignee;
}
public void setAssignee(User assignee) {
this.assignee = assignee;
}
public User getAuthor() {
return author;
}
public void setAuthor(User author) {
this.author = author;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Date getUpdatedAt() {
return updated_at;
}
public void setUpdatedAt(Date updated_at) {
this.updated_at = updated_at;
}
public Date getCreatedAt() {
return created_at;
}
public void setCreatedAt(Date created_at) {
this.created_at = created_at;
}
}
package com.bd.gitlab.model;
import java.util.Date;
public class Milestone {
private long id;
private String title;
private String description;
private Date due_date;
private boolean closed;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getDueDate() {
return due_date;
}
public void setDueDate(Date due_date) {
this.due_date = due_date;
}
public boolean isClosed() {
return closed;
}
public void setClosed(boolean closed) {
this.closed = closed;
}
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof Milestone))
return false;
Milestone rhs = (Milestone) obj;
return rhs.id == id;
}
}
package com.bd.gitlab.model;
import java.util.Date;
public class Note {
private long id;
private String body;
private User author;
private Date created_at;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public User getAuthor() {
return author;
}
public void setAuthor(User author) {
this.author = author;
}
public Date getCreatedAt() {
return created_at;
}
public void setCreatedAt(Date created_at) {
this.created_at = created_at;
}
}
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