Skip to content
Snippets Groups Projects
Commit 79e62aa1 authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Swap out artifacts tab with log tab since we cannot really see the artifacts

parent 14921466
No related branches found
No related tags found
No related merge requests found
Showing
with 96 additions and 315 deletions
Loading
Loading
@@ -85,6 +85,7 @@ dependencies {
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
compile 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
Loading
Loading
package com.commit451.gitlab.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Artifact;
import com.commit451.gitlab.viewHolder.BuildArtifactViewHolder;
import java.util.ArrayList;
import java.util.Collection;
/**
* Show the build artifacts
*/
public class BuildArtifactsAdapter extends RecyclerView.Adapter<BuildArtifactViewHolder> {
public interface Listener {
void onFolderClicked(Artifact treeItem);
void onFileClicked(Artifact treeItem);
void onCopyClicked(Artifact treeItem);
void onShareClicked(Artifact treeItem);
void onOpenInBrowserClicked(Artifact treeItem);
}
private Listener mListener;
private ArrayList<Artifact> mValues;
private final View.OnClickListener onProjectClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag(R.id.list_position);
Artifact treeItem = getValueAt(position);
}
};
public BuildArtifactsAdapter(Listener listener) {
mListener = listener;
mValues = new ArrayList<>();
}
@Override
public BuildArtifactViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
BuildArtifactViewHolder holder = BuildArtifactViewHolder.inflate(parent);
holder.itemView.setOnClickListener(onProjectClickListener);
return holder;
}
@Override
public void onBindViewHolder(final BuildArtifactViewHolder holder, int position) {
final Artifact treeItem = getValueAt(position);
holder.bind(treeItem);
holder.itemView.setTag(R.id.list_position, position);
holder.popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_copy:
mListener.onCopyClicked(treeItem);
return true;
case R.id.action_share:
mListener.onShareClicked(treeItem);
return true;
case R.id.action_open:
mListener.onOpenInBrowserClicked(treeItem);
return true;
}
return false;
}
});
}
@Override
public int getItemCount() {
return mValues.size();
}
public void setData(Collection<Artifact> values) {
mValues.clear();
if (values != null) {
mValues.addAll(values);
}
notifyDataSetChanged();
}
public void clear() {
mValues.clear();
notifyDataSetChanged();
}
public Artifact getValueAt(int position) {
return mValues.get(position);
}
}
Loading
Loading
@@ -6,7 +6,7 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.fragment.BuildArtifactsFragment;
import com.commit451.gitlab.fragment.BuildLogFragment;
import com.commit451.gitlab.fragment.BuildDescriptionFragment;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
Loading
Loading
@@ -15,7 +15,6 @@ import com.commit451.gitlab.model.api.Project;
* Build sections
*/
public class BuildSectionsPagerAdapter extends FragmentPagerAdapter {
private static final int SECTION_COUNT = 2;
 
private Project mProject;
private Build mBuild;
Loading
Loading
@@ -35,7 +34,7 @@ public class BuildSectionsPagerAdapter extends FragmentPagerAdapter {
case 0:
return BuildDescriptionFragment.newInstance(mProject, mBuild);
case 1:
return BuildArtifactsFragment.newInstance(mProject, mBuild);
return BuildLogFragment.newInstance(mProject, mBuild);
}
 
throw new IllegalStateException("Position exceeded on view pager");
Loading
Loading
@@ -43,7 +42,7 @@ public class BuildSectionsPagerAdapter extends FragmentPagerAdapter {
 
@Override
public int getCount() {
return SECTION_COUNT;
return mTitles.length;
}
 
@Override
Loading
Loading
Loading
Loading
@@ -2,7 +2,6 @@ package com.commit451.gitlab.api;
 
import android.support.annotation.Nullable;
 
import com.commit451.gitlab.model.api.Artifact;
import com.commit451.gitlab.model.api.Branch;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Contributor;
Loading
Loading
@@ -410,10 +409,6 @@ public interface GitLab {
Call<Build> cancelBuild(@Path("id") long projectId,
@Path("build_id") long buildId);
 
@GET(API_VERSION + "/projects/{id}/builds/{build_id}/artifacts")
Call<List<Artifact>> getBuildArtifacts(@Path("id") long projectId,
@Path("build_id") long buildId);
/* --- SNIPPETS --- */
@GET(API_VERSION + "/projects/{id}/snippets")
Call<List<Snippet>> getSnippets(@Path("id") long projectId);
Loading
Loading
@@ -431,4 +426,8 @@ public interface GitLab {
/* --- TAGS --- */
@GET(API_VERSION + "/projects/{id}/repository/tags")
Call<List<Tag>> getTags(@Path("id") long projectId);
/* --- MISC --- */
@GET
Call<String> getRaw(@Url String url);
}
\ No newline at end of file
Loading
Loading
@@ -5,6 +5,7 @@ import com.github.aurae.retrofit2.LoganSquareConverterFactory;
 
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
 
/**
* Pulls all the GitLab stuff from the API
Loading
Loading
@@ -20,6 +21,7 @@ public final class GitLabFactory {
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(account.getServerUrl().toString())
.client(client)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(LoganSquareConverterFactory.create())
.build();
return restAdapter.create(GitLab.class);
Loading
Loading
Loading
Loading
@@ -4,8 +4,6 @@ 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;
Loading
Loading
@@ -14,31 +12,27 @@ import android.widget.TextView;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.BuildArtifactsAdapter;
import com.commit451.gitlab.adapter.DividerItemDecoration;
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.commit451.gitlab.util.BuildUtil;
 
import org.greenrobot.eventbus.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 {
public class BuildLogFragment 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();
public static BuildLogFragment newInstance(Project project, Build build) {
BuildLogFragment fragment = new BuildLogFragment();
Bundle args = new Bundle();
args.putParcelable(KEY_PROJECT, Parcels.wrap(project));
args.putParcelable(KEY_BUILD, Parcels.wrap(build));
Loading
Loading
@@ -47,71 +41,14 @@ public class BuildArtifactsFragment extends ButterKnifeFragment {
}
 
@BindView(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list) RecyclerView mCommitsListView;
@BindView(R.id.log) TextView mTextLog;
@BindView(R.id.message_text) TextView mMessageView;
 
private Project mProject;
private Build mBuild;
private BuildArtifactsAdapter mArtifactsAdapter;
Project mProject;
Build mBuild;
 
EventReceiver mEventReceiver;
 
private final EasyCallback<List<Artifact>> mCommitsCallback = new EasyCallback<List<Artifact>>() {
@Override
public void success(@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 failure(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);
Loading
Loading
@@ -121,16 +58,12 @@ public class BuildArtifactsFragment extends ButterKnifeFragment {
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_build_artifacts, container, false);
return inflater.inflate(R.layout.fragment_build_log, 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
Loading
Loading
@@ -164,7 +97,28 @@ public class BuildArtifactsFragment extends ButterKnifeFragment {
}
});
 
App.instance().getGitLab().getBuildArtifacts(mProject.getId(), mBuild.getId()).enqueue(mCommitsCallback);
String url = BuildUtil.getRawBuildUrl(App.instance().getAccount().getServerUrl().toString(), mProject, mBuild);
App.instance().getGitLab().getRaw(url).enqueue(new EasyCallback<String>() {
@Override
public void success(@NonNull String response) {
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mTextLog.setText(response);
}
@Override
public void failure(Throwable t) {
Timber.e(t);
if (getView() == null) {
return;
}
mSwipeRefreshLayout.setRefreshing(false);
mMessageView.setVisibility(View.VISIBLE);
}
});
}
 
private class EventReceiver {
Loading
Loading
Loading
Loading
@@ -48,7 +48,6 @@ public class FeedFragment extends ButterKnifeFragment {
TextView mMessageView;
 
private Uri mFeedUrl;
private EventReceiver mEventReceiver;
private FeedAdapter mFeedAdapter;
 
private final EasyCallback<Feed> mUserFeedCallback = new EasyCallback<Feed>() {
Loading
Loading
@@ -103,9 +102,6 @@ public class FeedFragment extends ButterKnifeFragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
 
mEventReceiver = new EventReceiver();
App.bus().register(mEventReceiver);
mFeedAdapter = new FeedAdapter(mFeedAdapterListener);
mEntryListView.setLayoutManager(new LinearLayoutManager(getActivity()));
mEntryListView.addItemDecoration(new DividerItemDecoration(getActivity()));
Loading
Loading
@@ -135,12 +131,6 @@ public class FeedFragment extends ButterKnifeFragment {
super.onPause();
}
 
@Override
public void onDestroyView() {
super.onDestroyView();
App.bus().unregister(mEventReceiver);
}
@Override
protected void loadData() {
if (getView() == null) {
Loading
Loading
@@ -162,7 +152,4 @@ public class FeedFragment extends ButterKnifeFragment {
});
App.instance().getGitLabRss().getFeed(mFeedUrl.toString()).enqueue(mUserFeedCallback);
}
private class EventReceiver {
}
}
package com.commit451.gitlab.model.api;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import org.parceler.Parcel;
/**
* Artifact from a build
*/
@Parcel
@JsonObject
public class Artifact {
@JsonField(name = "name")
String mName;
public String getName() {
return mName;
}
}
package com.commit451.gitlab.util;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
/**
* Util related to {@link com.commit451.gitlab.model.api.Build} things
*/
public class BuildUtil {
public static String getRawBuildUrl(String baseUrl, Project project, Build build) {
return baseUrl + project.getPathWithNamespace() + "/builds/" + build.getId() + "/raw";
}
}
package com.commit451.gitlab.viewHolder;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Artifact;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Files, yay!
*/
public class BuildArtifactViewHolder extends RecyclerView.ViewHolder {
public static BuildArtifactViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_build_artifact, parent, false);
return new BuildArtifactViewHolder(view);
}
@BindView(R.id.file_title) TextView mTitleView;
@BindView(R.id.file_image) ImageView mImageView;
@BindView(R.id.file_more) ImageView mMoreView;
public final PopupMenu popupMenu;
public BuildArtifactViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
popupMenu = new PopupMenu(itemView.getContext(), mMoreView);
popupMenu.getMenuInflater().inflate(R.menu.item_menu_file, popupMenu.getMenu());
mMoreView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenu.show();
}
});
}
public void bind(Artifact artifact) {
mTitleView.setText(artifact.getName());
}
}
Loading
Loading
@@ -2,17 +2,27 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
 
<com.commit451.gitlab.view.LabCoatSwipeRefreshLayout
android:id="@+id/swipe_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
 
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent">
<TextView
android:id="@+id/log"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"/>
</android.support.v4.widget.NestedScrollView>
 
</com.commit451.gitlab.view.LabCoatSwipeRefreshLayout>
 
Loading
Loading
@@ -20,10 +30,10 @@
android:id="@+id/message_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="16dp"
android:text="@string/no_build_artifacts_found"
android:gravity="center"
android:layout_gravity="center"
android:text="@string/no_log_found"
android:visibility="gone"/>
 
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingBottom="12dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="12dp"
android:background="?attr/selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:id="@+id/file_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:contentDescription="@null"
tools:src="@drawable/ic_folder_24dp" />
<TextView
android:id="@+id/file_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="2"
android:textSize="@dimen/text_size_small"
tools:text="build.gradle some really long file name that will overflow or something" />
<ImageView
android:id="@+id/file_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@null"
android:padding="2dp"
app:srcCompat="@drawable/ic_overflow_24dp"/>
</LinearLayout>
\ No newline at end of file
Loading
Loading
@@ -409,7 +409,7 @@
<string name="unable_to_load_build">Unable to load build</string>
<string-array name="build_tabs">
<item>Details</item>
<item>Artifacts</item>
<item>Log</item>
</string-array>
<string name="build_status">Status: %1$s</string>
<string name="build_duration">Duration: %1$s</string>
Loading
Loading
@@ -420,7 +420,7 @@
<string name="build_commit_branch">Branch: %1$s</string>
<string name="build_commit_author">Author: %1$s</string>
<string name="build_commit_message">Message: %1$s</string>
<string name="no_build_artifacts_found">No build artifacts found.</string>
<string name="no_log_found">No log found.</string>
 
<!-- Settings -->
<string name="setting_starting_view">Starting View</string>
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