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

Merge branch 'master' into fdroid

# Conflicts:
#	.magnum.yml
#	.travis.yml
#	README.md
#	app/build.gradle
#	app/src/main/AndroidManifest.xml
#	app/src/main/java/com/commit451/gitlab/LabCoatApp.java
#	build.gradle
parents 1b90c181 16caa78a
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 732 additions and 63 deletions
package com.commit451.gitlab.customtabs;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
/**
* Empty service used by the custom tab to bind to, raising the application's importance.
*/
public class KeepAliveService extends Service {
private static final Binder sBinder = new Binder();
@Override
public IBinder onBind(Intent intent) {
return sBinder;
}
}
\ No newline at end of file
Loading
Loading
@@ -3,6 +3,7 @@ package com.commit451.gitlab.data;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.IntDef;
import android.text.TextUtils;
 
import com.commit451.gitlab.BuildConfig;
Loading
Loading
@@ -10,6 +11,8 @@ import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.provider.GsonProvider;
import com.google.gson.reflect.TypeToken;
 
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
 
Loading
Loading
@@ -20,6 +23,15 @@ public class Prefs {
 
private static final String KEY_ACCOUNTS = "accounts";
private static final String KEY_VERSION = "current_version";
private static final String KEY_STARTING_VIEW = "starting_view";
public static final int STARTING_VIEW_PROJECTS = 0;
public static final int STARTING_VIEW_GROUPS = 1;
public static final int STARTING_VIEW_ACTIVITY = 2;
@Retention(RetentionPolicy.SOURCE)
@IntDef({STARTING_VIEW_PROJECTS, STARTING_VIEW_GROUPS, STARTING_VIEW_ACTIVITY})
public @interface StartingView {}
 
private static SharedPreferences getSharedPrefs(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
Loading
Loading
@@ -70,4 +82,15 @@ public class Prefs {
.putInt(KEY_VERSION, BuildConfig.VERSION_CODE)
.commit();
}
public static int getStartingView(Context context) {
return getSharedPrefs(context).getInt(KEY_STARTING_VIEW, STARTING_VIEW_PROJECTS);
}
public static void setStartingView(Context context, int startingView) {
getSharedPrefs(context)
.edit()
.putInt(KEY_STARTING_VIEW, startingView)
.commit();
}
}
package com.commit451.gitlab.dialog;
 
import com.commit451.gitlab.R;
import android.content.Context;
import android.support.v7.app.AppCompatDialog;
import android.view.View;
Loading
Loading
@@ -9,16 +7,18 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import butterknife.Bind;
import com.commit451.gitlab.R;
import butterknife.BindView;
import butterknife.ButterKnife;
 
public class HttpLoginDialog extends AppCompatDialog {
 
@Bind(R.id.message_text) TextView mMessageTextView;
@Bind(R.id.login_username) EditText mUsernameView;
@Bind(R.id.login_password) EditText mPasswordView;
@Bind(R.id.ok_button) Button mOkButton;
@Bind(R.id.cancel_button) Button mCancelButton;
@BindView(R.id.message_text) TextView mMessageTextView;
@BindView(R.id.login_username) EditText mUsernameView;
@BindView(R.id.login_password) EditText mPasswordView;
@BindView(R.id.ok_button) Button mOkButton;
@BindView(R.id.cancel_button) Button mCancelButton;
 
public HttpLoginDialog(Context context, String realm, final LoginListener loginListener) {
super(context);
Loading
Loading
package com.commit451.gitlab.event;
import com.commit451.gitlab.model.api.Build;
/**
* A build changed
*/
public class BuildChangedEvent {
public final Build build;
public BuildChangedEvent(Build build) {
this.build = build;
}
}
Loading
Loading
@@ -2,7 +2,6 @@ package com.commit451.gitlab.event;
 
/**
* Close the drawer!
* Created by Jawn on 7/28/2015.
*/
public class CloseDrawerEvent {
}
Loading
Loading
@@ -4,7 +4,6 @@ import com.commit451.gitlab.model.api.Issue;
 
/**
* Event indicating that an issue has changed
* Created by Jawnnypoo on 10/19/2015.
*/
public class IssueChangedEvent {
public final Issue mIssue;
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import com.commit451.gitlab.model.api.Issue;
 
/**
* Oh no! An Issue!
* Created by Jawn on 7/31/2015.
*/
public class IssueCreatedEvent {
public final Issue mIssue;
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import com.commit451.gitlab.model.Account;
 
/**
* Called when a user logs in
* Created by John on 12/23/15.
*/
public class LoginEvent {
public Account account;
Loading
Loading
package com.commit451.gitlab.event;
/**
* Created by Jawn on 8/21/2015.
*/
public class LogoutEvent {
}
Loading
Loading
@@ -4,7 +4,6 @@ import com.commit451.gitlab.model.api.Member;
 
/**
* Indicates that a user was added
* Created by Jawn on 9/17/2015.
*/
public class MemberAddedEvent {
public final Member mMember;
Loading
Loading
package com.commit451.gitlab.event;
import com.commit451.gitlab.model.api.MergeRequest;
/**
* The merge request changed
*/
public class MergeRequestChangedEvent {
public final MergeRequest mergeRequest;
public MergeRequestChangedEvent(MergeRequest mergeRequest) {
this.mergeRequest = mergeRequest;
}
}
Loading
Loading
@@ -4,7 +4,6 @@ import com.commit451.gitlab.model.api.Project;
 
/**
* Signifies that either a project or its branch has changed and there needs to be a reload
* Created by Jawn on 9/22/2015.
*/
public class ProjectReloadEvent {
public final Project mProject;
Loading
Loading
Loading
Loading
@@ -2,7 +2,6 @@ package com.commit451.gitlab.event;
 
/**
* Signifies that the fragments should reload their data
* Created by Jawn on 9/1/2015.
*/
public class ReloadDataEvent {
}
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;
import android.support.v4.app.Fragment;
import android.view.View;
 
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.event.ReloadDataEvent;
import com.squareup.otto.Subscribe;
public class BaseFragment extends Fragment{
 
private EventReceiver mBaseEventReceiever;
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.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.BuildArtifactsAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.model.api.Artifact;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
import com.squareup.otto.Subscribe;
import org.parceler.Parcels;
import java.util.List;
import butterknife.BindView;
import timber.log.Timber;
/**
* Shows the build artifacts
*/
public class BuildArtifactsFragment extends ButterKnifeFragment {
private static final String KEY_PROJECT = "project";
private static final String KEY_BUILD = "build";
public static BuildArtifactsFragment newInstance(Project project, Build build) {
BuildArtifactsFragment fragment = new BuildArtifactsFragment();
Bundle args = new Bundle();
args.putParcelable(KEY_PROJECT, Parcels.wrap(project));
args.putParcelable(KEY_BUILD, Parcels.wrap(build));
fragment.setArguments(args);
return fragment;
}
@BindView(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list) RecyclerView mCommitsListView;
@BindView(R.id.message_text) TextView mMessageView;
private Project mProject;
private Build mBuild;
private BuildArtifactsAdapter mArtifactsAdapter;
EventReceiver mEventReceiver;
private final EasyCallback<List<Artifact>> mCommitsCallback = new EasyCallback<List<Artifact>>() {
@Override
public void onResponse(@NonNull List<Artifact> response) {
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);
}
mArtifactsAdapter.setData(response);
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_build_artifacts_found);
mArtifactsAdapter.setData(null);
}
};
private final BuildArtifactsAdapter.Listener mAdapterListener = new BuildArtifactsAdapter.Listener() {
@Override
public void onFolderClicked(Artifact treeItem) {
}
@Override
public void onFileClicked(Artifact treeItem) {
}
@Override
public void onCopyClicked(Artifact treeItem) {
}
@Override
public void onShareClicked(Artifact treeItem) {
}
@Override
public void onOpenInBrowserClicked(Artifact treeItem) {
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProject = Parcels.unwrap(getArguments().getParcelable(KEY_PROJECT));
mBuild = Parcels.unwrap(getArguments().getParcelable(KEY_BUILD));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_build_artifacts, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mArtifactsAdapter = new BuildArtifactsAdapter(mAdapterListener);
mCommitsListView.setLayoutManager(new LinearLayoutManager(getActivity()));
mCommitsListView.addItemDecoration(new DividerItemDecoration(getActivity()));
mCommitsListView.setAdapter(mArtifactsAdapter);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData();
}
});
loadData();
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
}
@Override
public void onDestroyView() {
super.onDestroyView();
LabCoatApp.bus().unregister(mEventReceiver);
}
@Override
protected void loadData() {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
});
GitLabClient.instance().getBuildArtifacts(mProject.getId(), mBuild.getId()).enqueue(mCommitsCallback);
}
private class EventReceiver {
@Subscribe
public void onBuildChanged(BuildChangedEvent event) {
if (mBuild.getId() == event.build.getId()) {
mBuild = event.build;
loadData();
}
}
}
}
\ No newline at end of file
package com.commit451.gitlab.fragment;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryCommit;
import com.commit451.gitlab.model.api.Runner;
import com.commit451.gitlab.util.DateUtils;
import com.squareup.otto.Subscribe;
import org.parceler.Parcels;
import java.util.Date;
import butterknife.BindView;
import timber.log.Timber;
/**
* Shows the details of a build
*/
public class BuildDescriptionFragment extends ButterKnifeFragment {
private static final String KEY_PROJECT = "project";
private static final String KEY_BUILD = "build";
public static BuildDescriptionFragment newInstance(Project project, Build build) {
BuildDescriptionFragment fragment = new BuildDescriptionFragment();
Bundle args = new Bundle();
args.putParcelable(KEY_PROJECT, Parcels.wrap(project));
args.putParcelable(KEY_BUILD, Parcels.wrap(build));
fragment.setArguments(args);
return fragment;
}
@BindView(R.id.root)
ViewGroup mRoot;
@BindView(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.text_duration)
TextView mTextDuration;
@BindView(R.id.text_created)
TextView mTextCreated;
@BindView(R.id.text_finished)
TextView mTextFinished;
@BindView(R.id.text_runner)
TextView mTextRunner;
@BindView(R.id.text_author)
TextView mTextAuthor;
@BindView(R.id.text_message)
TextView mTextMessage;
Project mProject;
Build mBuild;
EventReceiver mEventReceiver;
private final EasyCallback<Build> mLoadBuildCallback = new EasyCallback<Build>() {
@Override
public void onResponse(@NonNull Build response) {
mSwipeRefreshLayout.setRefreshing(false);
mBuild = response;
bindBuild(response);
LabCoatApp.bus().post(new BuildChangedEvent(response));
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
Snackbar.make(mRoot, R.string.unable_to_load_build, Snackbar.LENGTH_LONG)
.show();
}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProject = Parcels.unwrap(getArguments().getParcelable(KEY_PROJECT));
mBuild = Parcels.unwrap(getArguments().getParcelable(KEY_BUILD));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_build_description, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
load();
}
});
bindBuild(mBuild);
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
}
private void load() {
GitLabClient.instance().getBuild(mProject.getId(), mBuild.getId()).enqueue(mLoadBuildCallback);
}
private void bindBuild(Build build) {
Date finishedTime = build.getFinishedAt();
if (finishedTime == null) {
finishedTime = new Date();
}
String timeTaken = DateUtils.getTimeTaken(build.getStartedAt(), finishedTime);
String duration = String.format(getString(R.string.build_duration), timeTaken);
mTextDuration.setText(duration);
String created = String.format(getString(R.string.build_created), DateUtils.getRelativeTimeSpanString(getActivity(), build.getCreatedAt()));
mTextCreated.setText(created);
if (build.getFinishedAt() != null) {
String finished = String.format(getString(R.string.build_finished), DateUtils.getRelativeTimeSpanString(getActivity(), build.getFinishedAt()));
mTextFinished.setText(finished);
mTextFinished.setVisibility(View.VISIBLE);
} else {
mTextFinished.setVisibility(View.GONE);
}
bindRunner(build.getRunner());
bindCommit(build.getCommit());
}
private void bindRunner(Runner runner) {
String runnerNum = String.format(getString(R.string.runner_number), String.valueOf(runner.getId()));
mTextRunner.setText(runnerNum);
}
private void bindCommit(RepositoryCommit commit) {
String authorText = String.format(getString(R.string.build_commit_author), commit.getAuthorName());
mTextAuthor.setText(authorText);
String messageText = String.format(getString(R.string.build_commit_message), commit.getMessage());
mTextMessage.setText(messageText);
}
@Override
public void onDestroyView() {
super.onDestroyView();
LabCoatApp.bus().unregister(mEventReceiver);
}
private class EventReceiver {
@Subscribe
public void onBuildChangedEvent(BuildChangedEvent event) {
if (mBuild.getId() == event.build.getId()) {
mBuild = event.build;
bindBuild(mBuild);
}
}
}
}
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;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
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.BuildsAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.util.PaginationUtil;
import com.squareup.otto.Subscribe;
import java.util.List;
import butterknife.BindView;
import timber.log.Timber;
/**
* Shows the builds of a project
*/
public class BuildsFragment extends ButterKnifeFragment {
public static BuildsFragment newInstance() {
return new BuildsFragment();
}
@BindView(R.id.root)
ViewGroup mRoot;
@BindView(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list)
RecyclerView mListBuilds;
@BindView(R.id.message_text)
TextView mMessageView;
@BindView(R.id.issue_spinner)
Spinner mSpinner;
private Project mProject;
private BuildsAdapter mBuildsAdapter;
private LinearLayoutManager mLayoutManagerBuilds;
private EventReceiver mEventReceiver;
String mScope;
private String[] mScopes;
private Uri mNextPageUrl;
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 = mLayoutManagerBuilds.getChildCount();
int totalItemCount = mLayoutManagerBuilds.getItemCount();
int firstVisibleItem = mLayoutManagerBuilds.findFirstVisibleItemPosition();
if (firstVisibleItem + visibleItemCount >= totalItemCount && !mLoading && mNextPageUrl != null) {
loadMore();
}
}
};
private final BuildsAdapter.Listener mAdapterListener = new BuildsAdapter.Listener() {
@Override
public void onBuildClicked(Build build) {
if (mProject != null) {
NavigationManager.navigateToBuild(getActivity(), mProject, build);
} else {
Snackbar.make(mRoot, 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) {
mScope = mScopes[position];
loadData();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
private final EasyCallback<List<Build>> mLoadCallback = new EasyCallback<List<Build>>() {
@Override
public void onResponse(@NonNull List<Build> response) {
mLoading = false;
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
if (response.isEmpty()) {
mMessageView.setVisibility(View.VISIBLE);
mMessageView.setText(R.string.no_builds);
}
mBuildsAdapter.setValues(response);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
Timber.d("Next page url %s", mNextPageUrl);
}
@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_issues);
mBuildsAdapter.setValues(null);
mNextPageUrl = null;
}
};
private final EasyCallback<List<Build>> mMoreCallback = new EasyCallback<List<Build>>() {
@Override
public void onResponse(@NonNull List<Build> response) {
mLoading = false;
mBuildsAdapter.setLoading(false);
mNextPageUrl = PaginationUtil.parse(getResponse()).getNext();
mBuildsAdapter.addValues(response);
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mLoading = false;
mBuildsAdapter.setLoading(false);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mScopes = getResources().getStringArray(R.array.build_scope_values);
mScope = mScopes[0];
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_builds, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
mBuildsAdapter = new BuildsAdapter(mAdapterListener);
mLayoutManagerBuilds = new LinearLayoutManager(getActivity());
mListBuilds.setLayoutManager(mLayoutManagerBuilds);
mListBuilds.addItemDecoration(new DividerItemDecoration(getActivity()));
mListBuilds.setAdapter(mBuildsAdapter);
mListBuilds.addOnScrollListener(mOnScrollListener);
mSpinner.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1,
android.R.id.text1, getResources().getStringArray(R.array.build_scope_names)));
mSpinner.setOnItemSelectedListener(mSpinnerItemSelectedListener);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData();
}
});
if (getActivity() instanceof ProjectActivity) {
mProject = ((ProjectActivity) getActivity()).getProject();
loadData();
} else {
throw new IllegalStateException("Incorrect parent activity");
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
LabCoatApp.bus().unregister(mEventReceiver);
}
@Override
protected void loadData() {
if (getView() == null) {
return;
}
if (mProject == null) {
mSwipeRefreshLayout.setRefreshing(false);
return;
}
mMessageView.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
});
mNextPageUrl = null;
mLoading = true;
GitLabClient.instance().getBuilds(mProject.getId(), mScope).enqueue(mLoadCallback);
}
private void loadMore() {
if (getView() == null) {
return;
}
if (mNextPageUrl == null) {
return;
}
mBuildsAdapter.setLoading(true);
mLoading = true;
Timber.d("loadMore called for %s", mNextPageUrl);
GitLabClient.instance().getBuilds(mNextPageUrl.toString(), mScope).enqueue(mMoreCallback);
}
private class EventReceiver {
@Subscribe
public void onProjectReload(ProjectReloadEvent event) {
mProject = event.mProject;
loadData();
}
@Subscribe
public void onBuildChangedEvent(BuildChangedEvent event) {
mBuildsAdapter.updateBuild(event.build);
}
}
}
\ No newline at end of file
package com.commit451.gitlab.fragment;
import android.os.Bundle;
import android.view.View;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Takes care of binding and unbinding
*/
public class ButterKnifeFragment extends BaseFragment {
private Unbinder mUnbinder;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mUnbinder = ButterKnife.bind(this, view);
}
@Override
public void onDestroyView() {
mUnbinder.unbind();
super.onDestroyView();
}
}
Loading
Loading
@@ -21,24 +21,23 @@ 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.commit451.gitlab.navigation.NavigationManager;
import com.squareup.otto.Subscribe;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.BindView;
import timber.log.Timber;
 
public class CommitsFragment extends BaseFragment {
public class CommitsFragment extends ButterKnifeFragment {
 
public static CommitsFragment newInstance() {
return new CommitsFragment();
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mCommitsListView;
@Bind(R.id.message_text) TextView mMessageView;
@BindView(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list) RecyclerView mCommitsListView;
@BindView(R.id.message_text) TextView mMessageView;
 
private Project mProject;
private String mBranchName;
Loading
Loading
@@ -100,6 +99,9 @@ public class CommitsFragment extends BaseFragment {
@Override
public void onResponse(@NonNull List<RepositoryCommit> response) {
mLoading = false;
if (getView() == null) {
return;
}
mCommitsAdapter.setLoading(false);
if (response.isEmpty()) {
mPage = -1;
Loading
Loading
@@ -112,6 +114,9 @@ public class CommitsFragment extends BaseFragment {
public void onAllFailure(Throwable t) {
mLoading = false;
Timber.e(t, null);
if (getView() == null) {
return;
}
mCommitsAdapter.setLoading(false);
}
};
Loading
Loading
@@ -131,7 +136,6 @@ public class CommitsFragment extends BaseFragment {
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
Loading
Loading
@@ -162,7 +166,6 @@ public class CommitsFragment extends BaseFragment {
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
Loading
Loading
Loading
Loading
@@ -19,13 +19,16 @@ 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;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.navigation.NavigationManager;
import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.BindView;
import timber.log.Timber;
 
public class FeedFragment extends BaseFragment {
/**
* Takes an RSS feed url and shows the feed
*/
public class FeedFragment extends ButterKnifeFragment {
 
private static final String EXTRA_FEED_URL = "extra_feed_url";
 
Loading
Loading
@@ -38,11 +41,11 @@ public class FeedFragment extends BaseFragment {
return fragment;
}
 
@Bind(R.id.swipe_layout)
@BindView(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
@BindView(R.id.list)
RecyclerView mEntryListView;
@Bind(R.id.message_text)
@BindView(R.id.message_text)
TextView mMessageView;
 
private Uri mFeedUrl;
Loading
Loading
@@ -100,7 +103,6 @@ public class FeedFragment extends BaseFragment {
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
Loading
Loading
@@ -120,10 +122,23 @@ public class FeedFragment extends BaseFragment {
loadData();
}
 
@Override
public void onResume() {
super.onResume();
SimpleChromeCustomTabs.getInstance().connectTo(getActivity());
}
@Override
public void onPause() {
if (SimpleChromeCustomTabs.getInstance().isConnected()) {
SimpleChromeCustomTabs.getInstance().disconnectFrom(getActivity());
}
super.onPause();
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
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