Skip to content
Snippets Groups Projects
Commit f16b99cf authored by John Carlson's avatar John Carlson
Browse files

Merge branch 'develop'

parents 2995603f eb7397c0
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 818 additions and 540 deletions
package com.commit451.gitlab.api;
 
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
 
import java.io.IOException;
 
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import timber.log.Timber;
 
/**
Loading
Loading
package com.commit451.gitlab.api.exception;
import java.io.IOException;
import okhttp3.ResponseBody;
/**
* Represents an HTTP non 200 response from Retrofit
*/
public class HttpException extends Exception {
private int mCode;
private ResponseBody mErrorBody;
public HttpException(int code, ResponseBody errorBody) {
mCode = code;
mErrorBody = errorBody;
}
@Override
public String getMessage() {
try {
return mErrorBody.string();
} catch (IOException e) {
return e.toString();
}
}
public ResponseBody getResponseBody() {
return mErrorBody;
}
public int getCode() {
return mCode;
}
}
\ No newline at end of file
package com.commit451.gitlab.api.exception;
/**
* Represents that the body was null
*/
public class NullBodyException extends Exception{
@Override
public String getMessage() {
return "The Retrofit message was null";
}
}
Loading
Loading
@@ -11,7 +11,6 @@ import com.commit451.gitlab.R;
 
/**
* A fallback to open the url in the browser
* Created by John on 9/3/15.
*/
public class BrowserFallback implements CustomTabsActivityHelper.CustomTabFallback {
 
Loading
Loading
package com.commit451.gitlab.dialog;
 
import android.content.Context;
import android.support.v7.app.AppCompatDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Toast;
 
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.AccessAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.Member;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import java.util.Arrays;
import retrofit2.Callback;
import timber.log.Timber;
 
/**
* Change a users access level, either for a group or for a project
*/
public class AccessDialog extends AppCompatDialog {
@Bind(R.id.list) RecyclerView mRecyclerView;
AccessAdapter mAdapter;
@Bind(R.id.progress) View mProgress;
@Bind(R.id.content_root) View mContentRoot;
public class AccessDialog extends MaterialDialog {
 
@OnClick(R.id.apply)
void onApply() {
String accessLevel = mAdapter.getSelectedValue();
String accessLevel = mRoleNames[getSelectedIndex()];
if (accessLevel == null) {
Toast.makeText(getContext(), R.string.please_select_access_level, Toast.LENGTH_LONG)
.show();
Loading
Loading
@@ -42,7 +33,6 @@ public class AccessDialog extends AppCompatDialog {
}
}
 
@OnClick(R.id.cancel_button)
void onCancel() {
dismiss();
}
Loading
Loading
@@ -51,26 +41,21 @@ public class AccessDialog extends AppCompatDialog {
OnAccessAppliedListener mAccessAppliedListener;
 
String[] mRoleNames;
String[] mRoleValues;
long mProjectId = -1;
Group mGroup;
Member mMember;
 
private final Callback<Member> mEditUserCallback = new Callback<Member>() {
private final Callback<Member> mEditUserCallback = new EasyCallback<Member>() {
@Override
public void onResponse(Response<Member> response, Retrofit retrofit) {
if (!response.isSuccess()) {
onError();
return;
}
public void onResponse(@NonNull Member response) {
if (mAccessChangedListener != null) {
mAccessChangedListener.onAccessChanged(mMember, mAdapter.getSelectedValue());
mAccessChangedListener.onAccessChanged(mMember, mRoleNames[getSelectedIndex()]);
}
dismiss();
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
onError();
}
Loading
Loading
@@ -90,25 +75,39 @@ public class AccessDialog extends AppCompatDialog {
}
 
private AccessDialog(Context context, Member member, Group group, long projectId) {
super(context);
setContentView(R.layout.dialog_access);
ButterKnife.bind(this);
super(new MaterialDialog.Builder(context)
.items((group == null) ? R.array.project_role_names : R.array.group_role_names)
.itemsCallbackSingleChoice(-1, new ListCallbackSingleChoice() {
@Override
public boolean onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
return true;
}
})
.progress(true, 0) // So we can later show loading progress
.positiveText(R.string.action_apply)
.negativeText(R.string.md_cancel_label));
mRoleNames = getContext().getResources().getStringArray((group == null)
? R.array.project_role_names
: R.array.group_role_names);
getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onApply();
}
});
getActionButton(DialogAction.NEGATIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onCancel();
}
});
mMember = member;
if (group == null) {
mRoleValues = getContext().getResources().getStringArray(R.array.project_role_values);
mRoleNames = getContext().getResources().getStringArray(R.array.project_role_names);
} else {
mRoleValues = getContext().getResources().getStringArray(R.array.group_role_values);
mRoleNames = getContext().getResources().getStringArray(R.array.group_role_names);
}
mGroup = group;
mProjectId = projectId;
mAdapter = new AccessAdapter(getContext(), mRoleNames);
if (mMember != null) {
mAdapter.setSelectedAccess(Member.getAccessLevel(mMember.getAccessLevel()));
setSelectedIndex(Arrays.asList(mRoleNames).indexOf(
Member.getAccessLevel(mMember.getAccessLevel())));
}
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.setAdapter(mAdapter);
}
 
private void changeAccess(int accessLevel) {
Loading
Loading
@@ -127,8 +126,7 @@ public class AccessDialog extends AppCompatDialog {
}
 
public void showLoading() {
mContentRoot.animate().alpha(0.0f);
mProgress.setVisibility(View.VISIBLE);
getActionButton(DialogAction.POSITIVE).setEnabled(false);
}
 
private void onError() {
Loading
Loading
package com.commit451.gitlab.fragment;
 
import com.afollestad.appthemeengine.ATE;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.event.ReloadDataEvent;
import com.commit451.gitlab.util.AppThemeUtil;
import com.squareup.otto.Subscribe;
 
import android.os.Bundle;
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Loading
Loading
@@ -12,22 +13,21 @@ import android.widget.TextView;
 
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.DiffActivity;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.CommitsAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryCommit;
import com.commit451.gitlab.util.NavigationManager;
import com.squareup.otto.Subscribe;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class CommitsFragment extends BaseFragment {
Loading
Loading
@@ -61,82 +61,65 @@ public class CommitsFragment extends BaseFragment {
}
};
 
private final Callback<List<RepositoryCommit>> mCommitsCallback = new Callback<List<RepositoryCommit>>() {
private final EasyCallback<List<RepositoryCommit>> mCommitsCallback = new EasyCallback<List<RepositoryCommit>>() {
@Override
public void onResponse(Response<List<RepositoryCommit>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<RepositoryCommit> response) {
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Commits response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_commits);
mCommitsAdapter.setData(null);
mPage = 0;
return;
}
if (!response.body().isEmpty()) {
if (!response.isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mPage <= 0) {
Timber.d("No commits have been made");
} else {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_commits_found);
}
mCommitsAdapter.setData(response.body());
if (response.body().isEmpty()) {
mCommitsAdapter.setData(response);
if (response.isEmpty()) {
mPage = -1;
}
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_commits);
mCommitsAdapter.setData(null);
mPage = -1;
}
};
 
private final Callback<List<RepositoryCommit>> mMoreCommitsCallback = new Callback<List<RepositoryCommit>>() {
private final EasyCallback<List<RepositoryCommit>> mMoreCommitsCallback = new EasyCallback<List<RepositoryCommit>>() {
@Override
public void onResponse(Response<List<RepositoryCommit>> response, Retrofit retrofit) {
if (!response.isSuccess()) {
return;
}
public void onResponse(@NonNull List<RepositoryCommit> response) {
mLoading = false;
mCommitsAdapter.setLoading(false);
mPage++;
mCommitsAdapter.addData(response.body());
if (response.isEmpty()) {
mPage = -1;
return;
}
mCommitsAdapter.addData(response);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
mCommitsAdapter.setLoading(false);
mLoading = false;
}
};
 
private final CommitsAdapter.Listener mCommitsAdapterListener = new CommitsAdapter.Listener() {
@Override
public void onCommitClicked(RepositoryCommit commit) {
getActivity().startActivity(DiffActivity.newInstance(getActivity(), mProject, commit));
NavigationManager.navigateToDiffActivity(getActivity(), mProject, commit);
}
};
 
Loading
Loading
@@ -156,6 +139,7 @@ public class CommitsFragment extends BaseFragment {
mCommitsAdapter = new CommitsAdapter(mCommitsAdapterListener);
mCommitsLayoutManager = new LinearLayoutManager(getActivity());
mCommitsListView.setLayoutManager(mCommitsLayoutManager);
mCommitsListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mCommitsListView.setAdapter(mCommitsAdapter);
mCommitsListView.addOnScrollListener(mOnScrollListener);
 
Loading
Loading
@@ -221,7 +205,7 @@ public class CommitsFragment extends BaseFragment {
mLoading = true;
mCommitsAdapter.setLoading(true);
 
Timber.d("loadMore called for " + mPage);
Timber.d("loadMore called for %s", mPage);
GitLabClient.instance().getCommits(mProject.getId(), mBranchName, mPage).enqueue(mMoreCommitsCallback);
}
 
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Loading
Loading
@@ -12,7 +13,9 @@ import android.widget.TextView;
 
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.FeedAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.rss.Entry;
import com.commit451.gitlab.model.rss.Feed;
Loading
Loading
@@ -20,9 +23,6 @@ import com.commit451.gitlab.util.NavigationManager;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class FeedFragment extends BaseFragment {
Loading
Loading
@@ -38,54 +38,43 @@ public class FeedFragment extends BaseFragment {
return fragment;
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mEntryListView;
@Bind(R.id.message_text) TextView mMessageView;
@Bind(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
RecyclerView mEntryListView;
@Bind(R.id.message_text)
TextView mMessageView;
 
private Uri mFeedUrl;
private EventReceiver mEventReceiver;
private FeedAdapter mFeedAdapter;
 
private final Callback<Feed> mUserFeedCallback = new Callback<Feed>() {
private final EasyCallback<Feed> mUserFeedCallback = new EasyCallback<Feed>() {
@Override
public void onResponse(Response<Feed> response, Retrofit retrofit) {
public void onResponse(@NonNull Feed response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Feed response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_feed);
mFeedAdapter.setEntries(null);
return;
}
if (response.body().getEntries() != null && !response.body().getEntries().isEmpty()) {
if (response.getEntries() != null && !response.getEntries().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else {
Timber.d("No activity in the feed");
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_activity);
}
mFeedAdapter.setEntries(response.body().getEntries());
mFeedAdapter.setEntries(response.getEntries());
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_feed);
mFeedAdapter.setEntries(null);
}
};
Loading
Loading
@@ -118,6 +107,7 @@ public class FeedFragment extends BaseFragment {
 
mFeedAdapter = new FeedAdapter(mFeedAdapterListener);
mEntryListView.setLayoutManager(new LinearLayoutManager(getActivity()));
mEntryListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mEntryListView.setAdapter(mFeedAdapter);
 
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
Loading
Loading
@@ -142,14 +132,12 @@ public class FeedFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mFeedUrl == null) {
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
@@ -158,7 +146,6 @@ public class FeedFragment extends BaseFragment {
}
}
});
GitLabClient.rssInstance().getFeed(mFeedUrl.toString()).enqueue(mUserFeedCallback);
}
 
Loading
Loading
Loading
Loading
@@ -4,6 +4,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
Loading
Loading
@@ -18,7 +19,9 @@ import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.BreadcrumbAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.FilesAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.Project;
Loading
Loading
@@ -32,9 +35,6 @@ import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class FilesFragment extends BaseFragment {
Loading
Loading
@@ -56,7 +56,7 @@ public class FilesFragment extends BaseFragment {
private BreadcrumbAdapter mBreadcrumbAdapter;
private String mCurrentPath = "";
 
private class FilesCallback implements Callback<List<RepositoryTreeObject>> {
private class FilesCallback extends EasyCallback<List<RepositoryTreeObject>> {
private final String mNewPath;
 
public FilesCallback(String newPath) {
Loading
Loading
@@ -64,25 +64,12 @@ public class FilesFragment extends BaseFragment {
}
 
@Override
public void onResponse(Response<List<RepositoryTreeObject>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<RepositoryTreeObject> response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Files response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_files);
mFilesAdapter.setData(null);
mCurrentPath = mNewPath;
updateBreadcrumbs();
return;
}
if (!response.body().isEmpty()) {
if (!response.isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else {
Timber.d("No files found");
Loading
Loading
@@ -90,26 +77,22 @@ public class FilesFragment extends BaseFragment {
mMessageView.setText(R.string.no_files_found);
}
 
mFilesAdapter.setData(response.body());
mFilesAdapter.setData(response);
mFilesListView.scrollToPosition(0);
mCurrentPath = mNewPath;
updateBreadcrumbs();
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_files);
mFilesAdapter.setData(null);
mCurrentPath = mNewPath;
updateBreadcrumbs();
}
Loading
Loading
@@ -164,6 +147,7 @@ public class FilesFragment extends BaseFragment {
 
mFilesAdapter = new FilesAdapter(mFilesAdapterListener);
mFilesListView.setLayoutManager(new LinearLayoutManager(getActivity()));
mFilesListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mFilesListView.setAdapter(mFilesAdapter);
 
mBreadcrumbAdapter = new BreadcrumbAdapter();
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
Loading
Loading
@@ -13,6 +14,7 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupMembersAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.dialog.AccessDialog;
import com.commit451.gitlab.event.MemberAddedEvent;
Loading
Loading
@@ -29,9 +31,6 @@ import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class GroupMembersFragment extends BaseFragment {
Loading
Loading
@@ -58,93 +57,62 @@ public class GroupMembersFragment extends BaseFragment {
private GroupMembersAdapter mGroupMembersAdapter;
private Member mMember;
 
private final Callback<List<Member>> mGroupMembersCallback = new Callback<List<Member>>() {
private final AccessDialog.OnAccessChangedListener mOnAccessChangedListener = new AccessDialog.OnAccessChangedListener() {
@Override
public void onAccessChanged(Member member, String accessLevel) {
loadData();
}
};
private final EasyCallback<List<Member>> mGroupMembersCallback = new EasyCallback<List<Member>>() {
@Override
public void onResponse(Response<List<Member>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<Member> response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Group members response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_users);
mAddUserButton.setVisibility(View.GONE);
mGroupMembersAdapter.setData(null);
return;
}
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else {
Timber.d("No group members found");
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_project_members);
}
mAddUserButton.setVisibility(View.VISIBLE);
mGroupMembersAdapter.setData(response.body());
mGroupMembersAdapter.setData(response);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_users);
mAddUserButton.setVisibility(View.GONE);
mGroupMembersAdapter.setData(null);
}
};
 
private final Callback<Void> mRemoveMemberCallback = new Callback<Void>() {
private final EasyCallback<Void> mRemoveMemberCallback = new EasyCallback<Void>() {
@Override
public void onResponse(Response<Void> response, Retrofit retrofit) {
public void onResponse(@NonNull Void response) {
if (getView() == null) {
return;
}
if (!response.isSuccess()) {
Timber.e("Remove member response was not a success: %d", response.code());
Snackbar.make(mRoot, R.string.failed_to_remove_member, Snackbar.LENGTH_SHORT)
.show();
return;
}
mGroupMembersAdapter.removeMember(mMember);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
Snackbar.make(mRoot, R.string.connection_error, Snackbar.LENGTH_SHORT)
Snackbar.make(mRoot, R.string.failed_to_remove_member, Snackbar.LENGTH_SHORT)
.show();
}
};
 
private final AccessDialog.OnAccessChangedListener mOnAccessChangedListener = new AccessDialog.OnAccessChangedListener() {
@Override
public void onAccessChanged(Member member, String accessLevel) {
loadData();
}
};
private final GroupMembersAdapter.Listener mListener = new GroupMembersAdapter.Listener() {
@Override
public void onUserClicked(Member member, ProjectMemberViewHolder holder) {
Loading
Loading
@@ -214,12 +182,11 @@ public class GroupMembersFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mGroup == null) {
mSwipeRefreshLayout.setRefreshing(false);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
@@ -228,7 +195,6 @@ public class GroupMembersFragment extends BaseFragment {
}
}
});
GitLabClient.instance().getGroupMembers(mGroup.getId()).enqueue(mGroupMembersCallback);
}
 
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
Loading
Loading
@@ -17,7 +18,9 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.IssuesAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.IssueChangedEvent;
import com.commit451.gitlab.event.IssueCreatedEvent;
Loading
Loading
@@ -34,9 +37,6 @@ import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class IssuesFragment extends BaseFragment {
Loading
Loading
@@ -45,10 +45,16 @@ public class IssuesFragment extends BaseFragment {
return new IssuesFragment();
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mIssueListView;
@Bind(R.id.message_text) TextView mMessageView;
@Bind(R.id.issue_spinner) Spinner mSpinner;
@Bind(R.id.root)
ViewGroup mRoot;
@Bind(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
RecyclerView mIssueListView;
@Bind(R.id.message_text)
TextView mMessageView;
@Bind(R.id.issue_spinner)
Spinner mSpinner;
 
private Project mProject;
private IssuesAdapter mIssuesAdapter;
Loading
Loading
@@ -73,99 +79,79 @@ public class IssuesFragment extends BaseFragment {
}
};
 
private final Callback<List<Issue>> mIssuesCallback = new Callback<List<Issue>>() {
private final IssuesAdapter.Listener mIssuesAdapterListener = new IssuesAdapter.Listener() {
@Override
public void onResponse(Response<List<Issue>> response, Retrofit retrofit) {
mLoading = false;
if (getView() == null) {
return;
public void onIssueClicked(Issue issue) {
if (mProject != null) {
NavigationManager.navigateToIssue(getActivity(), mProject, issue);
} else {
Snackbar.make(mRoot, getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
.show();
}
}
};
 
mSwipeRefreshLayout.setRefreshing(false);
private final AdapterView.OnItemSelectedListener mSpinnerItemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mState = mStates[position];
loadData();
}
 
if (!response.isSuccess()) {
Timber.e("Issues response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_issues);
mIssuesAdapter.setIssues(null);
mNextPageUrl = null;
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
private final EasyCallback<List<Issue>> mIssuesCallback = new EasyCallback<List<Issue>>() {
@Override
public void onResponse(@NonNull List<Issue> response) {
mLoading = false;
if (getView() == null) {
return;
}
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mNextPageUrl == null) {
Timber.d("No issues found");
mSwipeRefreshLayout.setRefreshing(false);
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_issues);
}
mIssuesAdapter.setIssues(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mIssuesAdapter.setIssues(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_issues);
mIssuesAdapter.setIssues(null);
mNextPageUrl = null;
}
};
 
private final Callback<List<Issue>> mMoreIssuesCallback = new Callback<List<Issue>>() {
private final EasyCallback<List<Issue>> mMoreIssuesCallback = new EasyCallback<List<Issue>>() {
@Override
public void onResponse(Response<List<Issue>> response, Retrofit retrofit) {
if (!response.isSuccess()) {
return;
}
public void onResponse(@NonNull List<Issue> response) {
mLoading = false;
mIssuesAdapter.setLoading(false);
mNextPageUrl = PaginationUtil.parse(response).getNext();
mIssuesAdapter.addIssues(response.body());
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mIssuesAdapter.addIssues(response);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mIssuesAdapter.setLoading(false);
mLoading = false;
mIssuesAdapter.setLoading(false);
}
};
 
private final IssuesAdapter.Listener mIssuesAdapterListener = new IssuesAdapter.Listener() {
@Override
public void onIssueClicked(Issue issue) {
if (mProject != null) {
NavigationManager.navigateToIssue(getActivity(), mProject, issue);
} else {
Snackbar.make(getActivity().getWindow().getDecorView(), getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
.show();
}
}
};
private final AdapterView.OnItemSelectedListener mSpinnerItemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mState = mStates[position];
loadData();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Loading
Loading
@@ -189,6 +175,7 @@ public class IssuesFragment extends BaseFragment {
mIssuesAdapter = new IssuesAdapter(mIssuesAdapterListener);
mIssuesLayoutManager = new LinearLayoutManager(getActivity());
mIssueListView.setLayoutManager(mIssuesLayoutManager);
mIssueListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mIssueListView.setAdapter(mIssuesAdapter);
mIssueListView.addOnScrollListener(mOnScrollListener);
 
Loading
Loading
@@ -222,7 +209,7 @@ public class IssuesFragment extends BaseFragment {
if (mProject != null) {
NavigationManager.navigateToAddIssue(getActivity(), fab, mProject);
} else {
Snackbar.make(getActivity().getWindow().getDecorView(), getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
Snackbar.make(mRoot, getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
.show();
}
}
Loading
Loading
@@ -232,12 +219,11 @@ public class IssuesFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mProject == null) {
mSwipeRefreshLayout.setRefreshing(false);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
@@ -246,10 +232,8 @@ public class IssuesFragment extends BaseFragment {
}
}
});
mNextPageUrl = null;
mLoading = true;
GitLabClient.instance().getIssues(mProject.getId(), mState).enqueue(mIssuesCallback);
}
 
Loading
Loading
package com.commit451.gitlab.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.CommitsAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryCommit;
import com.commit451.gitlab.util.NavigationManager;
import org.parceler.Parcels;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import timber.log.Timber;
/**
* Like {@link CommitsFragment} but showing commits for a merge request
*/
public class MergeRequestCommitsFragment extends BaseFragment {
private static final String KEY_PROJECT = "project";
private static final String KEY_MERGE_REQUEST = "merge_request";
public static MergeRequestCommitsFragment newInstance(Project project, MergeRequest mergeRequest) {
MergeRequestCommitsFragment fragment = new MergeRequestCommitsFragment();
Bundle args = new Bundle();
args.putParcelable(KEY_PROJECT, Parcels.wrap(project));
args.putParcelable(KEY_MERGE_REQUEST, Parcels.wrap(mergeRequest));
fragment.setArguments(args);
return fragment;
}
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mCommitsListView;
@Bind(R.id.message_text) TextView mMessageView;
private Project mProject;
private MergeRequest mMergeRequest;
private LinearLayoutManager mCommitsLayoutManager;
private CommitsAdapter mCommitsAdapter;
private int mPage = -1;
private boolean mLoading = false;
private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = mCommitsLayoutManager.getChildCount();
int totalItemCount = mCommitsLayoutManager.getItemCount();
int firstVisibleItem = mCommitsLayoutManager.findFirstVisibleItemPosition();
if (firstVisibleItem + visibleItemCount >= totalItemCount && !mLoading && mPage >= 0) {
loadMore();
}
}
};
private final EasyCallback<List<RepositoryCommit>> mCommitsCallback = new EasyCallback<List<RepositoryCommit>>() {
@Override
public void onResponse(@NonNull List<RepositoryCommit> response) {
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_commits_found);
}
mCommitsAdapter.setData(response);
if (response.isEmpty()) {
mPage = -1;
}
}
@Override
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_commits);
mCommitsAdapter.setData(null);
mPage = -1;
}
};
private final EasyCallback<List<RepositoryCommit>> mMoreCommitsCallback = new EasyCallback<List<RepositoryCommit>>() {
@Override
public void onResponse(@NonNull List<RepositoryCommit> response) {
mLoading = false;
mCommitsAdapter.setLoading(false);
if (response.isEmpty()) {
mPage = -1;
return;
}
mCommitsAdapter.addData(response);
}
@Override
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
mCommitsAdapter.setLoading(false);
}
};
private final CommitsAdapter.Listener mCommitsAdapterListener = new CommitsAdapter.Listener() {
@Override
public void onCommitClicked(RepositoryCommit commit) {
NavigationManager.navigateToDiffActivity(getActivity(), mProject, commit);
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProject = Parcels.unwrap(getArguments().getParcelable(KEY_PROJECT));
mMergeRequest = Parcels.unwrap(getArguments().getParcelable(KEY_MERGE_REQUEST));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_merge_request_commits, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
mCommitsAdapter = new CommitsAdapter(mCommitsAdapterListener);
mCommitsLayoutManager = new LinearLayoutManager(getActivity());
mCommitsListView.setLayoutManager(mCommitsLayoutManager);
mCommitsListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mCommitsListView.setAdapter(mCommitsAdapter);
mCommitsListView.addOnScrollListener(mOnScrollListener);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData();
}
});
loadData();
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
@Override
protected void loadData() {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
});
mPage = 0;
mLoading = true;
GitLabClient.instance().getMergeRequestCommits(mProject.getId(), mMergeRequest.getId()).enqueue(mCommitsCallback);
}
private void loadMore() {
if (getView() == null) {
return;
}
mPage++;
mLoading = true;
//mCommitsAdapter.setLoading(true);
Timber.d("loadMore called for %s", mPage);
//TODO is this even a thing?
}
}
\ No newline at end of file
package com.commit451.gitlab.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.MergeRequestDetailAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.util.KeyboardUtil;
import com.commit451.gitlab.util.PaginationUtil;
import org.parceler.Parcels;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import timber.log.Timber;
/**
* Shows the discussion of a merge request
*/
public class MergeRequestDiscussionFragment extends BaseFragment {
private static final String KEY_PROJECT = "project";
private static final String KEY_MERGE_REQUEST = "merge_request";
public static MergeRequestDiscussionFragment newInstance(Project project, MergeRequest mergeRequest) {
MergeRequestDiscussionFragment fragment = new MergeRequestDiscussionFragment();
Bundle args = new Bundle();
args.putParcelable(KEY_PROJECT, Parcels.wrap(project));
args.putParcelable(KEY_MERGE_REQUEST, Parcels.wrap(mergeRequest));
fragment.setArguments(args);
return fragment;
}
@Bind(R.id.root)
ViewGroup mRoot;
@Bind(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
RecyclerView mNotesRecyclerView;
@Bind(R.id.new_note_edit)
EditText mNewNoteEdit;
@Bind(R.id.progress)
View mProgress;
MergeRequestDetailAdapter mMergeRequestDetailAdapter;
LinearLayoutManager mNotesLinearLayoutManager;
Project mProject;
MergeRequest mMergeRequest;
Uri mNextPageUrl;
boolean mLoading;
@OnClick(R.id.new_note_button)
public void onNewNoteClick() {
postNote();
}
private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = mNotesLinearLayoutManager.getChildCount();
int totalItemCount = mNotesLinearLayoutManager.getItemCount();
int firstVisibleItem = mNotesLinearLayoutManager.findFirstVisibleItemPosition();
if (firstVisibleItem + visibleItemCount >= totalItemCount && !mLoading && mNextPageUrl != null) {
loadMoreNotes();
}
}
};
private EasyCallback<List<Note>> mNotesCallback = new EasyCallback<List<Note>>() {
@Override
public void onResponse(@NonNull List<Note> response) {
mSwipeRefreshLayout.setRefreshing(false);
mLoading = false;
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mMergeRequestDetailAdapter.setNotes(response);
}
@Override
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
mSwipeRefreshLayout.setRefreshing(false);
Snackbar.make(mRoot, getString(R.string.connection_error), Snackbar.LENGTH_SHORT)
.show();
}
};
private EasyCallback<List<Note>> mMoreNotesCallback = new EasyCallback<List<Note>>() {
@Override
public void onResponse(@NonNull List<Note> response) {
mMergeRequestDetailAdapter.setLoading(false);
mLoading = false;
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mMergeRequestDetailAdapter.addNotes(response);
}
@Override
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
mMergeRequestDetailAdapter.setLoading(false);
Snackbar.make(mRoot, getString(R.string.connection_error), Snackbar.LENGTH_SHORT)
.show();
}
};
private EasyCallback<Note> mPostNoteCallback = new EasyCallback<Note>() {
@Override
public void onResponse(@NonNull Note response) {
mProgress.setVisibility(View.GONE);
mMergeRequestDetailAdapter.addNote(response);
mNotesRecyclerView.smoothScrollToPosition(MergeRequestDetailAdapter.getHeaderCount());
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, getString(R.string.connection_error), Snackbar.LENGTH_SHORT)
.show();
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProject = Parcels.unwrap(getArguments().getParcelable(KEY_PROJECT));
mMergeRequest = Parcels.unwrap(getArguments().getParcelable(KEY_MERGE_REQUEST));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_merge_request_discussion, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
mMergeRequestDetailAdapter = new MergeRequestDetailAdapter(getActivity(), mMergeRequest);
mNotesLinearLayoutManager = new LinearLayoutManager(getActivity());
mNotesRecyclerView.setLayoutManager(mNotesLinearLayoutManager);
mNotesRecyclerView.setAdapter(mMergeRequestDetailAdapter);
mNotesRecyclerView.addOnScrollListener(mOnScrollListener);
mNewNoteEdit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
postNote();
return true;
}
});
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadNotes();
}
});
loadNotes();
}
private void loadNotes() {
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
});
GitLabClient.instance().getMergeRequestNotes(mProject.getId(), mMergeRequest.getId()).enqueue(mNotesCallback);
}
private void loadMoreNotes() {
mMergeRequestDetailAdapter.setLoading(true);
GitLabClient.instance().getMergeRequestNotes(mNextPageUrl.toString()).enqueue(mMoreNotesCallback);
}
private void postNote() {
String body = mNewNoteEdit.getText().toString();
if (body.length() < 1) {
return;
}
mProgress.setVisibility(View.VISIBLE);
mProgress.setAlpha(0.0f);
mProgress.animate().alpha(1.0f);
// Clear text & collapse keyboard
KeyboardUtil.hideKeyboard(getActivity());
mNewNoteEdit.setText("");
GitLabClient.instance().addMergeRequestNote(mProject.getId(), mMergeRequest.getId(), body).enqueue(mPostNoteCallback);
}
}
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Loading
Loading
@@ -16,7 +17,9 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.MergeRequestAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.MergeRequest;
Loading
Loading
@@ -29,9 +32,6 @@ import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class MergeRequestsFragment extends BaseFragment {
Loading
Loading
@@ -86,70 +86,49 @@ public class MergeRequestsFragment extends BaseFragment {
}
};
 
private final Callback<List<MergeRequest>> mCallback = new Callback<List<MergeRequest>>() {
private final EasyCallback<List<MergeRequest>> mCallback = new EasyCallback<List<MergeRequest>>() {
@Override
public void onResponse(Response<List<MergeRequest>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<MergeRequest> response) {
mLoading = false;
if (getView() == null) {
return;
}
if (!response.isSuccess()) {
Timber.e("Merge requests response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_merge_requests);
mMergeRequestAdapter.setData(null);
mNextPageUrl = null;
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mNextPageUrl == null) {
Timber.d("No merge requests found");
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_merge_requests);
}
mMergeRequestAdapter.setData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mMergeRequestAdapter.setData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_merge_requests);
mMergeRequestAdapter.setData(null);
mNextPageUrl = null;
}
};
 
private final Callback<List<MergeRequest>> mMoreIssuesCallback = new Callback<List<MergeRequest>>() {
private final EasyCallback<List<MergeRequest>> mMoreIssuesCallback = new EasyCallback<List<MergeRequest>>() {
@Override
public void onResponse(Response<List<MergeRequest>> response, Retrofit retrofit) {
if (!response.isSuccess()) {
return;
}
public void onResponse(@NonNull List<MergeRequest> response) {
mLoading = false;
mMergeRequestAdapter.setLoading(false);
mNextPageUrl = PaginationUtil.parse(response).getNext();
mMergeRequestAdapter.addData(response.body());
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mMergeRequestAdapter.addData(response);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mMergeRequestAdapter.setLoading(false);
mLoading = false;
Loading
Loading
@@ -179,6 +158,7 @@ public class MergeRequestsFragment extends BaseFragment {
mMergeRequestAdapter = new MergeRequestAdapter(mMergeRequestAdapterListener);
mMergeLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mMergeLayoutManager);
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity()));
mRecyclerView.setAdapter(mMergeRequestAdapter);
mRecyclerView.addOnScrollListener(mOnScrollListener);
 
Loading
Loading
@@ -212,12 +192,11 @@ public class MergeRequestsFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mProject == null) {
mSwipeRefreshLayout.setRefreshing(false);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
@@ -226,10 +205,8 @@ public class MergeRequestsFragment extends BaseFragment {
}
}
});
mNextPageUrl = null;
mLoading = true;
GitLabClient.instance().getMergeRequests(mProject.getId(), mState).enqueue(mCallback);
}
 
Loading
Loading
@@ -237,14 +214,11 @@ public class MergeRequestsFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mNextPageUrl == null) {
return;
}
mMergeRequestAdapter.setLoading(true);
mLoading = true;
Timber.d("loadMore called for " + mNextPageUrl);
GitLabClient.instance().getMergeRequests(mNextPageUrl.toString(), mState).enqueue(mMoreIssuesCallback);
}
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
Loading
Loading
@@ -17,7 +18,9 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.MilestoneAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.MilestoneChangedEvent;
import com.commit451.gitlab.event.MilestoneCreatedEvent;
Loading
Loading
@@ -33,9 +36,6 @@ import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class MilestonesFragment extends BaseFragment {
Loading
Loading
@@ -44,10 +44,16 @@ public class MilestonesFragment extends BaseFragment {
return new MilestonesFragment();
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mRecyclerView;
@Bind(R.id.message_text) TextView mMessageView;
@Bind(R.id.state_spinner) Spinner mSpinner;
@Bind(R.id.root)
ViewGroup mRoot;
@Bind(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
RecyclerView mRecyclerView;
@Bind(R.id.message_text)
TextView mMessageView;
@Bind(R.id.state_spinner)
Spinner mSpinner;
 
private Project mProject;
private EventReceiver mEventReceiver;
Loading
Loading
@@ -64,7 +70,7 @@ public class MilestonesFragment extends BaseFragment {
if (mProject != null) {
NavigationManager.navigateToAddMilestone(getActivity(), fab, mProject);
} else {
Snackbar.make(getActivity().getWindow().getDecorView(), getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
Snackbar.make(mRoot, getString(R.string.wait_for_project_to_load), Snackbar.LENGTH_SHORT)
.show();
}
}
Loading
Loading
@@ -77,7 +83,8 @@ public class MilestonesFragment extends BaseFragment {
}
 
@Override
public void onNothingSelected(AdapterView<?> parent) {}
public void onNothingSelected(AdapterView<?> parent) {
}
};
 
private final MilestoneAdapter.Listener mMilestoneListener = new MilestoneAdapter.Listener() {
Loading
Loading
@@ -100,71 +107,49 @@ public class MilestonesFragment extends BaseFragment {
}
};
 
private final Callback<List<Milestone>> mCallback = new Callback<List<Milestone>>() {
private final EasyCallback<List<Milestone>> mCallback = new EasyCallback<List<Milestone>>() {
@Override
public void onResponse(Response<List<Milestone>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<Milestone> response) {
mLoading = false;
if (getView() == null) {
return;
}
if (!response.isSuccess()) {
Timber.e("Milestones requests response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_milestones);
mMilestoneAdapter.setData(null);
mNextPageUrl = null;
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mNextPageUrl == null) {
Timber.d("No milestones requests found");
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_milestones);
}
mMilestoneAdapter.setData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mMilestoneAdapter.setData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_milestones);
mMilestoneAdapter.setData(null);
mNextPageUrl = null;
}
};
 
private final Callback<List<Milestone>> mMoreMilestonesCallback = new Callback<List<Milestone>>() {
private final EasyCallback<List<Milestone>> mMoreMilestonesCallback = new EasyCallback<List<Milestone>>() {
@Override
public void onResponse(Response<List<Milestone>> response, Retrofit retrofit) {
if (!response.isSuccess()) {
return;
}
public void onResponse(@NonNull List<Milestone> response) {
mLoading = false;
mMilestoneAdapter.setLoading(false);
mNextPageUrl = PaginationUtil.parse(response).getNext();
mMilestoneAdapter.addData(response.body());
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mMilestoneAdapter.addData(response);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mMilestoneAdapter.setLoading(false);
mLoading = false;
Loading
Loading
@@ -194,6 +179,7 @@ public class MilestonesFragment extends BaseFragment {
mMilestoneAdapter = new MilestoneAdapter(mMilestoneListener);
mMilestoneLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mMilestoneLayoutManager);
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity()));
mRecyclerView.setAdapter(mMilestoneAdapter);
mRecyclerView.addOnScrollListener(mOnScrollListener);
 
Loading
Loading
@@ -227,12 +213,11 @@ public class MilestonesFragment extends BaseFragment {
if (getView() == null) {
return;
}
if (mProject == null) {
mSwipeRefreshLayout.setRefreshing(false);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
@@ -241,10 +226,8 @@ public class MilestonesFragment extends BaseFragment {
}
}
});
mNextPageUrl = null;
mLoading = true;
GitLabClient.instance().getMilestones(mProject.getId()).enqueue(mCallback);
}
 
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.TextUtils;
Loading
Loading
@@ -14,6 +15,7 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.Project;
Loading
Loading
@@ -30,9 +32,6 @@ import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import in.uncod.android.bypass.Bypass;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class OverviewFragment extends BaseFragment {
Loading
Loading
@@ -63,77 +62,53 @@ public class OverviewFragment extends BaseFragment {
}
}
 
private final Callback<List<RepositoryTreeObject>> mFilesCallback = new Callback<List<RepositoryTreeObject>>() {
private final EasyCallback<List<RepositoryTreeObject>> mFilesCallback = new EasyCallback<List<RepositoryTreeObject>>() {
@Override
public void onResponse(Response<List<RepositoryTreeObject>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<RepositoryTreeObject> response) {
if (getView() == null) {
return;
}
if (!response.isSuccess()) {
Timber.e("Files response was not a success: %d", response.code());
mSwipeRefreshLayout.setRefreshing(false);
mOverviewVew.setText(R.string.connection_error_readme);
return;
}
for (RepositoryTreeObject treeItem : response.body()) {
for (RepositoryTreeObject treeItem : response) {
if (treeItem.getName().equalsIgnoreCase("README.md")) {
GitLabClient.instance().getFile(mProject.getId(), treeItem.getName(), mBranchName).enqueue(mFileCallback);
return;
}
}
mSwipeRefreshLayout.setRefreshing(false);
mOverviewVew.setText(R.string.no_readme_found);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mOverviewVew.setText(R.string.connection_error);
mOverviewVew.setText(R.string.connection_error_readme);
}
};
 
private Callback<RepositoryFile> mFileCallback = new Callback<RepositoryFile>() {
private EasyCallback<RepositoryFile> mFileCallback = new EasyCallback<RepositoryFile>() {
@Override
public void onResponse(Response<RepositoryFile> response, Retrofit retrofit) {
public void onResponse(@NonNull RepositoryFile response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("File response was not a success: %d", response.code());
mOverviewVew.setText(R.string.connection_error_readme);
return;
}
String text = new String(Base64.decode(response.body().getContent(), Base64.DEFAULT), Charset.forName("UTF-8"));
String text = new String(Base64.decode(response.getContent(), Base64.DEFAULT), Charset.forName("UTF-8"));
mOverviewVew.setText(mBypass.markdownToSpannable(text,
new PicassoImageGetter(mOverviewVew, GitLabClient.getPicasso())));
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mOverviewVew.setText(R.string.connection_error);
mOverviewVew.setText(R.string.connection_error_readme);
}
};
 
Loading
Loading
@@ -207,6 +182,10 @@ public class OverviewFragment extends BaseFragment {
}
 
private void bindProject(Project project) {
if (project == null) {
return;
}
if (project.belongsToGroup()) {
mCreatorView.setText(String.format(getString(R.string.created_by), project.getNamespace().getName()));
} else {
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
Loading
Loading
@@ -16,6 +17,7 @@ import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.MemberAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.dialog.AccessDialog;
import com.commit451.gitlab.event.MemberAddedEvent;
Loading
Loading
@@ -32,9 +34,6 @@ import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class ProjectMembersFragment extends BaseFragment {
Loading
Loading
@@ -70,27 +69,47 @@ public class ProjectMembersFragment extends BaseFragment {
}
};
 
private final Callback<List<Member>> mProjectMembersCallback = new Callback<List<Member>>() {
private final AccessDialog.OnAccessChangedListener mOnAccessChangedListener = new AccessDialog.OnAccessChangedListener() {
@Override
public void onAccessChanged(Member member, String accessLevel) {
loadData();
}
};
private final MemberAdapter.Listener mMemberAdapterListener = new MemberAdapter.Listener() {
@Override
public void onProjectMemberClicked(Member member, ProjectMemberViewHolder memberGroupViewHolder) {
NavigationManager.navigateToUser(getActivity(), memberGroupViewHolder.mImageView, member);
}
@Override
public void onRemoveMember(Member member) {
mMember = member;
GitLabClient.instance().removeProjectMember(mProject.getId(), member.getId()).enqueue(mRemoveMemberCallback);
}
@Override
public void onChangeAccess(Member member) {
AccessDialog accessDialog = new AccessDialog(getActivity(), member, mProject.getId());
accessDialog.setOnAccessChangedListener(mOnAccessChangedListener);
accessDialog.show();
}
@Override
public void onSeeGroupClicked() {
NavigationManager.navigateToGroup(getActivity(), mProject.getNamespace().getId());
}
};
private final EasyCallback<List<Member>> mProjectMembersCallback = new EasyCallback<List<Member>>() {
@Override
public void onResponse(Response<List<Member>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<Member> response) {
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Project members response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_users);
mAddUserButton.setVisibility(View.GONE);
mAdapter.setProjectMembers(null);
mNextPageUrl = null;
return;
}
if (!response.body().isEmpty()) {
if (!response.isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mNextPageUrl == null) {
Timber.d("No project members found");
Loading
Loading
@@ -101,96 +120,51 @@ public class ProjectMembersFragment extends BaseFragment {
mAddUserButton.setVisibility(View.VISIBLE);
 
if (mNextPageUrl == null) {
mAdapter.setProjectMembers(response.body());
mAdapter.setProjectMembers(response);
} else {
mAdapter.addProjectMembers(response.body());
mAdapter.addProjectMembers(response);
}
 
mNextPageUrl = PaginationUtil.parse(response).getNext();
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_users);
mAddUserButton.setVisibility(View.GONE);
mAdapter.setProjectMembers(null);
mNextPageUrl = null;
}
};
 
private final Callback<Void> mRemoveMemberCallback = new Callback<Void>() {
private final EasyCallback<Void> mRemoveMemberCallback = new EasyCallback<Void>() {
@Override
public void onResponse(Response<Void> response, Retrofit retrofit) {
public void onResponse(@NonNull Void response) {
if (getView() == null) {
return;
}
if (!response.isSuccess()) {
Timber.e("Remove member response was not a success: %d", response.code());
Snackbar.make(mRoot, R.string.failed_to_remove_member, Snackbar.LENGTH_SHORT)
.show();
return;
}
mAdapter.removeMember(mMember);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
Snackbar.make(mRoot, R.string.connection_error, Snackbar.LENGTH_SHORT)
Snackbar.make(mRoot, R.string.failed_to_remove_member, Snackbar.LENGTH_SHORT)
.show();
}
};
 
private final AccessDialog.OnAccessChangedListener mOnAccessChangedListener = new AccessDialog.OnAccessChangedListener() {
@Override
public void onAccessChanged(Member member, String accessLevel) {
loadData();
}
};
private final MemberAdapter.Listener mMemberAdapterListener = new MemberAdapter.Listener() {
@Override
public void onProjectMemberClicked(Member member, ProjectMemberViewHolder memberGroupViewHolder) {
NavigationManager.navigateToUser(getActivity(), memberGroupViewHolder.mImageView, member);
}
@Override
public void onRemoveMember(Member member) {
mMember = member;
GitLabClient.instance().removeProjectMember(mProject.getId(), member.getId()).enqueue(mRemoveMemberCallback);
}
@Override
public void onChangeAccess(Member member) {
AccessDialog accessDialog = new AccessDialog(getActivity(), member, mProject.getId());
accessDialog.setOnAccessChangedListener(mOnAccessChangedListener);
accessDialog.show();
}
@Override
public void onSeeGroupClicked() {
NavigationManager.navigateToGroup(getActivity(), mProject.getNamespace().getId());
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_members, container, false);
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Loading
Loading
@@ -11,7 +12,9 @@ import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.adapter.ProjectsAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.Project;
Loading
Loading
@@ -24,9 +27,6 @@ import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class ProjectsFragment extends BaseFragment {
Loading
Loading
@@ -93,51 +93,31 @@ public class ProjectsFragment extends BaseFragment {
}
};
 
private final Callback<List<Project>> mProjectsCallback = new Callback<List<Project>>() {
private final EasyCallback<List<Project>> mProjectsCallback = new EasyCallback<List<Project>>() {
@Override
public void onResponse(Response<List<Project>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<Project> response) {
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (!response.isSuccess()) {
Timber.e("Projects response was not a success: %d", response.code());
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error_projects);
mProjectsAdapter.setData(null);
mNextPageUrl = null;
return;
}
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else if (mNextPageUrl == null) {
Timber.d("No projects found");
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_projects);
}
mProjectsAdapter.setData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mProjectsAdapter.setData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.connection_error);
mProjectsAdapter.setData(null);
Loading
Loading
@@ -145,27 +125,21 @@ public class ProjectsFragment extends BaseFragment {
}
};
 
private final Callback<List<Project>> mMoreProjectsCallback = new Callback<List<Project>>() {
private final EasyCallback<List<Project>> mMoreProjectsCallback = new EasyCallback<List<Project>>() {
@Override
public void onResponse(Response<List<Project>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<Project> response) {
mLoading = false;
if (getView() == null) {
return;
}
mProjectsAdapter.setLoading(false);
if (!response.isSuccess()) {
return;
}
mProjectsAdapter.addData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mProjectsAdapter.addData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url " + mNextPageUrl);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
 
Loading
Loading
@@ -203,6 +177,7 @@ public class ProjectsFragment extends BaseFragment {
mProjectsAdapter = new ProjectsAdapter(getActivity(), mProjectsListener);
mLayoutManager = new LinearLayoutManager(getActivity());
mProjectsListView.setLayoutManager(mLayoutManager);
mProjectsListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mProjectsListView.setAdapter(mProjectsAdapter);
mProjectsListView.addOnScrollListener(mOnScrollListener);
 
Loading
Loading
@@ -227,6 +202,7 @@ public class ProjectsFragment extends BaseFragment {
if (getView() == null) {
return;
}
mMessageView.setVisibility(View.GONE);
 
mNextPageUrl = null;
 
Loading
Loading
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.fragment;
 
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
Loading
Loading
@@ -15,6 +16,7 @@ import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.UsersAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.UserBasic;
import com.commit451.gitlab.util.NavigationManager;
Loading
Loading
@@ -25,9 +27,6 @@ import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
 
public class UsersFragment extends BaseFragment {
Loading
Loading
@@ -51,9 +50,12 @@ public class UsersFragment extends BaseFragment {
return fragment;
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mUsersListView;
@Bind(R.id.message_text) TextView mMessageView;
@Bind(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
RecyclerView mUsersListView;
@Bind(R.id.message_text)
TextView mMessageView;
private GridLayoutManager mUserLinearLayoutManager;
 
private String mQuery;
Loading
Loading
@@ -82,68 +84,55 @@ public class UsersFragment extends BaseFragment {
}
};
 
public Callback<List<UserBasic>> mSearchCallback = new Callback<List<UserBasic>>() {
public EasyCallback<List<UserBasic>> mSearchCallback = new EasyCallback<List<UserBasic>>() {
@Override
public void onResponse(Response<List<UserBasic>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<UserBasic> response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mLoading = false;
if (!response.isSuccess()) {
Timber.e("Users response was not a success: %d", response.code());
mMessageView.setText(R.string.connection_error_users);
mMessageView.setVisibility(View.VISIBLE);
mUsersAdapter.setData(null);
return;
}
if (!response.body().isEmpty()) {
mMessageView.setVisibility(View.GONE);
} else {
Timber.d("No users found");
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_users_found);
}
mUsersAdapter.setData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mUsersAdapter.setData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setText(R.string.connection_error);
mMessageView.setText(R.string.connection_error_users);
mMessageView.setVisibility(View.VISIBLE);
mUsersAdapter.setData(null);
}
};
 
public Callback<List<UserBasic>> mMoreUsersCallback = new Callback<List<UserBasic>>() {
public EasyCallback<List<UserBasic>> mMoreUsersCallback = new EasyCallback<List<UserBasic>>() {
@Override
public void onResponse(Response<List<UserBasic>> response, Retrofit retrofit) {
public void onResponse(@NonNull List<UserBasic> response) {
mLoading = false;
if (getView() == null || !response.isSuccess()) {
if (getView() == null) {
return;
}
mUsersAdapter.addData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mUsersAdapter.addData(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mUsersAdapter.setLoading(false);
}
 
@Override
public void onFailure(Throwable t) {
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mLoading = false;
if (getView() == null) {
return;
}
mUsersAdapter.setLoading(false);
}
};
Loading
Loading
@@ -204,6 +193,7 @@ public class UsersFragment extends BaseFragment {
return;
}
 
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
Loading
Loading
Loading
Loading
@@ -35,6 +35,10 @@ public class Account implements Comparable<Account>{
String mPrivateToken;
@SerializedName("trusted_certificate")
String mTrustedCertificate;
@SerializedName("trusted_hostname")
String mTrustedHostname;
@SerializedName("private_key_alias")
String mPrivateKeyAlias;
@SerializedName("user")
UserFull mUser;
@SerializedName("last_used")
Loading
Loading
@@ -74,6 +78,22 @@ public class Account implements Comparable<Account>{
mTrustedCertificate = trustedCertificate;
}
 
public String getTrustedHostname() {
return mTrustedHostname;
}
public void setTrustedHostname(String trustedHostname) {
mTrustedHostname = trustedHostname;
}
public String getPrivateKeyAlias() {
return mPrivateKeyAlias;
}
public void setPrivateKeyAlias(String privateKeyAlias) {
mPrivateKeyAlias = privateKeyAlias;
}
public UserFull getUser() {
return mUser;
}
Loading
Loading
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