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

Merge branch 'master' into fdroid

# Conflicts:
#	.gitlab-ci.yml
#	app/build.gradle
#	app/src/main/AndroidManifest.xml
#	app/src/main/java/com/commit451/gitlab/App.java
parents c265a2ab dfef4962
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 296 additions and 202 deletions
package com.commit451.gitlab.model.api;
 
import com.google.gson.annotations.SerializedName;
import android.net.Uri;
 
import org.parceler.Parcel;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
import android.net.Uri;
import org.parceler.Parcel;
 
import java.util.Date;
 
@Parcel
@JsonObject
public class User extends UserBasic {
@SerializedName("created_at")
@JsonField(name = "created_at")
Date mCreatedAt;
@SerializedName("is_admin")
@JsonField(name = "is_admin")
boolean mIsAdmin;
@SerializedName("bio")
@JsonField(name = "bio")
String mBio;
@SerializedName("skype")
@JsonField(name = "skype")
String mSkype;
@SerializedName("linkedin")
@JsonField(name = "linkedin")
String mLinkedin;
@SerializedName("twitter")
@JsonField(name = "twitter")
String mTwitter;
@SerializedName("website_url")
@JsonField(name = "website_url")
Uri mWebsiteUrl;
 
public User() {}
Loading
Loading
Loading
Loading
@@ -2,20 +2,35 @@ package com.commit451.gitlab.model.api;
 
import android.net.Uri;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
 
import com.google.gson.annotations.SerializedName;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
import org.parceler.Parcel;
 
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Parcel
@JsonObject
public class UserBasic extends UserSafe {
@SerializedName("id")
public static final String STATE_ACTIVE = "active";
public static final String STATE_BLOCKED = "blocked";
@StringDef({STATE_ACTIVE, STATE_BLOCKED})
@Retention(RetentionPolicy.SOURCE)
public @interface State {}
@JsonField(name = "id")
long mId;
@SerializedName("state")
State mState;
@SerializedName("avatar_url")
@JsonField(name = "state")
@State
String mState;
@JsonField(name = "avatar_url")
Uri mAvatarUrl;
@SerializedName("web_url")
@JsonField(name = "web_url")
Uri mWebUrl;
 
public UserBasic() {}
Loading
Loading
@@ -24,7 +39,7 @@ public class UserBasic extends UserSafe {
return mId;
}
 
public State getState() {
public @State String getState() {
return mState;
}
 
Loading
Loading
@@ -58,11 +73,4 @@ public class UserBasic extends UserSafe {
public int hashCode() {
return (int) (mId ^ (mId >>> 32));
}
public enum State {
@SerializedName("active")
ACTIVE,
@SerializedName("blocked")
BLOCKED
}
}
package com.commit451.gitlab.model.api;
 
import com.google.gson.annotations.SerializedName;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
import org.parceler.Parcel;
 
Loading
Loading
@@ -8,24 +9,25 @@ import java.util.Date;
import java.util.List;
 
@Parcel
@JsonObject
public class UserFull extends User {
@SerializedName("email")
@JsonField(name = "email")
String mEmail;
@SerializedName("theme_id")
@JsonField(name = "theme_id")
int mThemeId;
@SerializedName("color_scheme_id")
@JsonField(name = "color_scheme_id")
int mColorSchemeId;
@SerializedName("projects_limit")
@JsonField(name = "projects_limit")
int mProjectsLimit;
@SerializedName("current_sign_in_at")
@JsonField(name = "current_sign_in_at")
Date mCurrentSignInAt;
@SerializedName("identities")
@JsonField(name = "identities")
List<Identity> mIdentities;
@SerializedName("can_create_group")
@JsonField(name = "can_create_group")
boolean mCanCreateGroup;
@SerializedName("can_create_project")
@JsonField(name = "can_create_project")
boolean mCanCreateProject;
@SerializedName("two_factor_enabled")
@JsonField(name = "two_factor_enabled")
boolean mTwoFactorEnabled;
 
public UserFull() {}
Loading
Loading
package com.commit451.gitlab.model.api;
 
import com.google.gson.annotations.SerializedName;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
import org.parceler.Parcel;
 
@Parcel
@JsonObject
public class UserLogin extends UserFull {
@SerializedName("private_token")
@JsonField(name = "private_token")
String mPrivateToken;
 
public UserLogin() {}
Loading
Loading
package com.commit451.gitlab.model.api;
 
import com.google.gson.annotations.SerializedName;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
 
import org.parceler.Parcel;
 
@Parcel
@JsonObject
public class UserSafe {
@SerializedName("name")
@JsonField(name = "name")
String mName;
@SerializedName("username")
@JsonField(name = "username")
String mUsername;
 
public UserSafe() {}
Loading
Loading
package com.commit451.gitlab.model.rss;
 
import android.net.Uri;
import org.parceler.Parcel;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
 
import android.net.Uri;
@Parcel
@Root(strict = false)
public class Link {
Loading
Loading
package com.commit451.gitlab.model.rss;
 
import android.net.Uri;
import org.parceler.Parcel;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
 
import android.net.Uri;
@Parcel
@Root(strict = false)
public class Thumbnail {
Loading
Loading
Loading
Loading
@@ -13,6 +13,7 @@ import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.AboutActivity;
import com.commit451.gitlab.activity.ActivityActivity;
import com.commit451.gitlab.activity.AddIssueActivity;
import com.commit451.gitlab.activity.AddLabelActivity;
import com.commit451.gitlab.activity.AddMilestoneActivity;
import com.commit451.gitlab.activity.AddUserActivity;
import com.commit451.gitlab.activity.BuildActivity;
Loading
Loading
@@ -45,7 +46,7 @@ import timber.log.Timber;
/**
* Manages navigation so that we can override things as needed
*/
public class NavigationManager {
public class Navigator {
 
public static void navigateToAbout(Activity activity) {
activity.startActivity(AboutActivity.newIntent(activity));
Loading
Loading
@@ -179,13 +180,9 @@ public class NavigationManager {
startMorphActivity(activity, fab, intent);
}
 
public static void navigateToAddLabels(Activity activity, Project project, Issue issue) {
//TODO
}
public static void navigateToCreateLabels(Activity activity, View fab, Project project) {
Intent intent = AddMilestoneActivity.newIntent(activity, project.getId());
startMorphActivity(activity, fab, intent);
public static void navigateToAddLabels(Activity activity, Project project, int requestCode) {
Intent intent = AddLabelActivity.newIntent(activity, project.getId());
activity.startActivityForResult(intent, requestCode);
}
 
public static void navigateToAddMilestone(Activity activity, View fab, Project project) {
Loading
Loading
Loading
Loading
@@ -8,7 +8,9 @@ import android.net.Uri;
public interface RoutingNavigator {
void onRouteToIssue(String projectNamespace, String projectName, String issueIid);
void onRouteToCommit(String projectNamespace, String projectName, String commitSha);
void onRouteToMergeRequest(String projectNamespace, String projectName, String mergeRequestId);
void onRouteToMergeRequest(String projectNamespace, String projectName, String mergeRequestIid);
void onRouteToProject(String namespace, String projectId);
void onRouteToBuild(String projectNamespace, String projectName, String buildNumber);
void onRouteToMilestone(String projectNamespace, String projectName, String milestoneNumber);
void onRouteUnknown(Uri uri);
}
Loading
Loading
@@ -3,7 +3,7 @@ package com.commit451.gitlab.navigation;
import android.net.Uri;
 
/**
* Routes things
* Routes things. Could probably be better if it used regex. Maybe one day
*/
public class RoutingRouter {
 
Loading
Loading
@@ -20,8 +20,8 @@ public class RoutingRouter {
//gitlab.com/Commit451/LabCoat/issues
int index = link.getPathSegments().indexOf("issues");
if (index != -1 && index > 1) {
String namespace = link.getPathSegments().get(index-2);
String projectId = link.getPathSegments().get(index-1);
String namespace = link.getPathSegments().get(index - 2);
String projectId = link.getPathSegments().get(index - 1);
mNavigator.onRouteToProject(namespace, projectId);
return;
}
Loading
Loading
@@ -29,9 +29,9 @@ public class RoutingRouter {
int index = link.getPathSegments().indexOf("issues");
//this is good, it means it is a link to an actual issue
if (index != -1 && index > 1 && link.getPathSegments().size() > index) {
String projectNamespace = link.getPathSegments().get(index-2);
String projectName = link.getPathSegments().get(index-1);
String lastSegment = link.getPathSegments().get(index+1);
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
String lastSegment = link.getPathSegments().get(index + 1);
//We have to do this cause there can be args on the url, such as
//https://gitlab.com/Commit451/LabCoat/issues/158#note_4560580
String[] stuff = lastSegment.split("#");
Loading
Loading
@@ -44,25 +44,25 @@ public class RoutingRouter {
//Order matters here, parse commits first, then commit
int index = link.getPathSegments().indexOf("commits");
if (index > 1) {
String projectNamespace = link.getPathSegments().get(index-2);
String projectName = link.getPathSegments().get(index-1);
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
mNavigator.onRouteToProject(projectNamespace, projectName);
return;
}
} else if (link.getPath().contains("commit")) {
int index = link.getPathSegments().indexOf("commit");
if (index > 1 && index < link.getPathSegments().size()) {
String projectNamespace = link.getPathSegments().get(index-2);
String projectName = link.getPathSegments().get(index-1);
String commitSha = link.getPathSegments().get(index+1);
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
String commitSha = link.getPathSegments().get(index + 1);
mNavigator.onRouteToCommit(projectNamespace, projectName, commitSha);
return;
}
} else if (link.getPath().contains("compare")) {
} else if (link.getPath().contains("compare")) {
int index = link.getPathSegments().indexOf("compare");
if (index > 1 && index < link.getPathSegments().size()) {
String projectNamespace = link.getPathSegments().get(index-2);
String projectName = link.getPathSegments().get(index-1);
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
//comparing two commit shas
String[] shas = link.getLastPathSegment().split("...");
if (shas.length == 2) {
Loading
Loading
@@ -74,12 +74,30 @@ public class RoutingRouter {
} else if (link.getPath().contains("merge_requests")) {
int index = link.getPathSegments().indexOf("merge_requests");
if (index > 1 && index < link.getPathSegments().size()) {
String projectNamespace = link.getPathSegments().get(index-2);
String projectName = link.getPathSegments().get(index-1);
String mergeRequestId = link.getPathSegments().get(index+1);
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
String mergeRequestId = link.getPathSegments().get(index + 1);
mNavigator.onRouteToMergeRequest(projectNamespace, projectName, mergeRequestId);
return;
}
} else if (link.getPath().contains("builds")) {
int index = link.getPathSegments().indexOf("builds");
if (index > 1 && index < link.getPathSegments().size()) {
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
String buildId = link.getPathSegments().get(index + 1);
mNavigator.onRouteToBuild(projectNamespace, projectName, buildId);
return;
}
} else if (link.getPath().contains("milestones")) {
int index = link.getPathSegments().indexOf("milestones");
if (index > 1 && index < link.getPathSegments().size()) {
String projectNamespace = link.getPathSegments().get(index - 2);
String projectName = link.getPathSegments().get(index - 1);
String milestoneId = link.getPathSegments().get(index + 1);
mNavigator.onRouteToMilestone(projectNamespace, projectName, milestoneId);
return;
}
}
mNavigator.onRouteUnknown(link);
}
Loading
Loading
package com.commit451.gitlab.provider;
import android.net.Uri;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.util.ConversionUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.util.Date;
/**
* Get a properly configured Gson object
*/
public final class GsonProvider {
private static Gson sGson;
private GsonProvider() {}
public static Gson getInstance() {
if (sGson == null) {
sGson = createInstance(null);
}
return sGson;
}
public static Gson createInstance(Account account) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer(account));
gsonBuilder.registerTypeAdapter(Uri.class, new UriSerializer(account));
return gsonBuilder.create();
}
private static class DateSerializer implements JsonSerializer<Date>, JsonDeserializer<Date> {
private final Account mAccount;
public DateSerializer(Account account) {
mAccount = account;
}
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String dateString = null;
if (!json.isJsonNull()) {
dateString = json.getAsString();
}
return ConversionUtil.toDate(dateString);
}
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
String dateString = ConversionUtil.fromDate(src);
if (dateString == null) {
return JsonNull.INSTANCE;
}
return new JsonPrimitive(dateString);
}
}
private static class UriSerializer implements JsonSerializer<Uri>, JsonDeserializer<Uri> {
private final Account mAccount;
public UriSerializer(Account account) {
mAccount = account;
}
@Override
public Uri deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String uriString = null;
if (!json.isJsonNull()) {
uriString = json.getAsString();
}
return ConversionUtil.toUri(mAccount, uriString);
}
@Override
public JsonElement serialize(Uri src, Type typeOfSrc, JsonSerializationContext context) {
String uriString = ConversionUtil.fromUri(src);
if (uriString == null) {
return JsonNull.INSTANCE;
}
return new JsonPrimitive(uriString);
}
}
}
Loading
Loading
@@ -2,6 +2,7 @@ package com.commit451.gitlab.provider;
 
import com.commit451.gitlab.BuildConfig;
import com.commit451.gitlab.api.AuthenticationRequestInterceptor;
import com.commit451.gitlab.api.OpenSignInAuthenticator;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.ssl.CustomTrustManager;
 
Loading
Loading
@@ -32,15 +33,18 @@ public final class OkHttpClientProvider {
return sOkHttpClient;
}
 
private static OkHttpClient createInstance(Account account) {
public static OkHttpClient createInstance(Account account) {
sCustomTrustManager.setTrustedCertificate(account.getTrustedCertificate());
sCustomTrustManager.setTrustedHostname(account.getTrustedHostname());
sCustomTrustManager.setPrivateKeyAlias(account.getPrivateKeyAlias());
 
OpenSignInAuthenticator authenticator = new OpenSignInAuthenticator(account);
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.sslSocketFactory(sCustomTrustManager.getSSLSocketFactory())
.hostnameVerifier(sCustomTrustManager.getHostnameVerifier());
.hostnameVerifier(sCustomTrustManager.getHostnameVerifier())
.authenticator(authenticator)
.proxyAuthenticator(authenticator);
clientBuilder.addInterceptor(new AuthenticationRequestInterceptor(account));
if (BuildConfig.DEBUG) {
clientBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
Loading
Loading
Loading
Loading
@@ -15,13 +15,13 @@ import android.widget.ImageView;
import android.widget.TextView;
 
import com.commit451.easel.Easel;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ActivityActivity;
import com.commit451.gitlab.activity.GroupsActivity;
import com.commit451.gitlab.activity.ProjectsActivity;
import com.commit451.gitlab.adapter.AccountsAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.data.Prefs;
import com.commit451.gitlab.event.CloseDrawerEvent;
Loading
Loading
@@ -31,7 +31,7 @@ import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.model.api.UserFull;
import com.commit451.gitlab.transformation.CircleTransformation;
import com.commit451.gitlab.util.ImageUtil;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.navigation.Navigator;
import com.squareup.otto.Subscribe;
 
import java.util.Collections;
Loading
Loading
@@ -65,39 +65,39 @@ public class LabCoatNavigationView extends NavigationView {
if (getContext() instanceof ProjectsActivity) {
 
} else {
NavigationManager.navigateToProjects((Activity) getContext());
Navigator.navigateToProjects((Activity) getContext());
((Activity) getContext()).finish();
((Activity)getContext()).overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
LabCoatApp.bus().post(new CloseDrawerEvent());
App.bus().post(new CloseDrawerEvent());
return true;
case R.id.nav_groups:
if (getContext() instanceof GroupsActivity) {
 
} else {
NavigationManager.navigateToGroups((Activity) getContext());
Navigator.navigateToGroups((Activity) getContext());
((Activity) getContext()).finish();
((Activity)getContext()).overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
LabCoatApp.bus().post(new CloseDrawerEvent());
App.bus().post(new CloseDrawerEvent());
return true;
case R.id.nav_activity:
if (getContext() instanceof ActivityActivity) {
 
} else {
NavigationManager.navigateToActivity((Activity) getContext());
Navigator.navigateToActivity((Activity) getContext());
((Activity) getContext()).finish();
((Activity)getContext()).overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
LabCoatApp.bus().post(new CloseDrawerEvent());
App.bus().post(new CloseDrawerEvent());
return true;
case R.id.nav_about:
LabCoatApp.bus().post(new CloseDrawerEvent());
NavigationManager.navigateToAbout((Activity) getContext());
App.bus().post(new CloseDrawerEvent());
Navigator.navigateToAbout((Activity) getContext());
return true;
case R.id.nav_settings:
LabCoatApp.bus().post(new CloseDrawerEvent());
NavigationManager.navigateToSettings((Activity) getContext());
App.bus().post(new CloseDrawerEvent());
Navigator.navigateToSettings((Activity) getContext());
return true;
}
return false;
Loading
Loading
@@ -112,9 +112,9 @@ public class LabCoatNavigationView extends NavigationView {
 
@Override
public void onAddAccountClicked() {
NavigationManager.navigateToLogin((Activity) getContext(), true);
Navigator.navigateToLogin((Activity) getContext(), true);
toggleAccounts();
LabCoatApp.bus().post(new CloseDrawerEvent());
App.bus().post(new CloseDrawerEvent());
}
 
@Override
Loading
Loading
@@ -123,7 +123,7 @@ public class LabCoatNavigationView extends NavigationView {
List<Account> accounts = Account.getAccounts(getContext());
 
if (accounts.isEmpty()) {
NavigationManager.navigateToLogin((Activity) getContext());
Navigator.navigateToLogin((Activity) getContext());
((Activity) getContext()).finish();
} else {
if (account.equals(GitLabClient.getAccount())) {
Loading
Loading
@@ -136,7 +136,7 @@ public class LabCoatNavigationView extends NavigationView {
private final EasyCallback<UserFull> mUserCallback = new EasyCallback<UserFull>() {
 
@Override
public void onResponse(@NonNull UserFull response) {
public void success(@NonNull UserFull response) {
//Store the newly retrieved user to the account so that it stays up to date
// in local storage
Account account = GitLabClient.getAccount();
Loading
Loading
@@ -146,14 +146,14 @@ public class LabCoatNavigationView extends NavigationView {
}
 
@Override
public void onAllFailure(Throwable t) {
public void failure(Throwable t) {
Timber.e(t, null);
}
};
 
@OnClick(R.id.profile_image)
public void onUserImageClick(ImageView imageView) {
NavigationManager.navigateToUser((Activity) getContext(), imageView, GitLabClient.getAccount().getUser());
Navigator.navigateToUser((Activity) getContext(), imageView, GitLabClient.getAccount().getUser());
}
 
@OnClick(R.id.drawer_header)
Loading
Loading
@@ -178,7 +178,7 @@ public class LabCoatNavigationView extends NavigationView {
 
private void init() {
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
App.bus().register(mEventReceiver);
int colorPrimary = Easel.getThemeAttrColor(getContext(), R.attr.colorPrimary);
 
setNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
Loading
Loading
@@ -203,7 +203,7 @@ public class LabCoatNavigationView extends NavigationView {
 
@Override
protected void onDetachedFromWindow() {
LabCoatApp.bus().unregister(mEventReceiver);
App.bus().unregister(mEventReceiver);
super.onDetachedFromWindow();
}
 
Loading
Loading
@@ -284,8 +284,8 @@ public class LabCoatNavigationView extends NavigationView {
Prefs.updateAccount(getContext(), account);
bindUser(account.getUser());
toggleAccounts();
LabCoatApp.bus().post(new ReloadDataEvent());
LabCoatApp.bus().post(new CloseDrawerEvent());
App.bus().post(new ReloadDataEvent());
App.bus().post(new CloseDrawerEvent());
// Trigger a reload in the adapter so that we will place the accounts
// in the correct order from most recently used
mAccountAdapter.notifyDataSetChanged();
Loading
Loading
Loading
Loading
@@ -43,7 +43,11 @@ public class BuildViewHolder extends RecyclerView.ViewHolder {
if (finishedTime == null) {
finishedTime = new Date();
}
String timeTaken = DateUtils.getTimeTaken(build.getStartedAt(), finishedTime);
Date startedAt = build.getStartedAt();
if (startedAt == null) {
startedAt = new Date();
}
String timeTaken = DateUtils.getTimeTaken(startedAt, finishedTime);
String durationStr = String.format(itemView.getResources().getString(R.string.build_duration), timeTaken);
duration.setText(durationStr);
}
Loading
Loading
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.TextView;
import com.commit451.gitlab.R;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Shows the labels for an issue
*/
public class IssueLabelViewHolder extends RecyclerView.ViewHolder {
public static IssueLabelViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_issue_label, parent, false);
return new IssueLabelViewHolder(view);
}
@BindView(R.id.title)
TextView mTitleView;
public IssueLabelViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
public void bind(String label) {
mTitleView.setText(label);
}
}
\ No newline at end of file
Loading
Loading
@@ -31,7 +31,7 @@ public class IssueLabelsViewHolder extends RecyclerView.ViewHolder {
 
private final IssueLabelsAdapter.Listener mListener = new IssueLabelsAdapter.Listener() {
@Override
public void onLabelClicked(String label, LabelViewHolder viewHolder) {
public void onLabelClicked(String label, IssueLabelViewHolder viewHolder) {
 
}
};
Loading
Loading
Loading
Loading
@@ -7,30 +7,32 @@ import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Label;
 
import butterknife.BindView;
import butterknife.ButterKnife;
 
/**
* Shows the labels for an issue
* Label
*/
public class LabelViewHolder extends RecyclerView.ViewHolder {
 
public static LabelViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.viewholder_label, parent, false);
.inflate(R.layout.item_label, parent, false);
return new LabelViewHolder(view);
}
 
@BindView(R.id.title)
TextView mTitleView;
@BindView(R.id.title) public TextView title;
@BindView(R.id.color) public View colorView;
 
public LabelViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
 
public void bind(String label) {
mTitleView.setText(label);
public void bind(Label label) {
title.setText(label.getName());
colorView.setBackgroundColor(label.getColor());
}
}
\ No newline at end of file
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.TextView;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Snippet;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Snippet
*/
public class SnippetViewHolder extends RecyclerView.ViewHolder {
public static SnippetViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_snippet, parent, false);
return new SnippetViewHolder(view);
}
@BindView(R.id.title) public TextView title;
@BindView(R.id.file_name) public TextView fileName;
public SnippetViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
public void bind(Snippet snippet) {
title.setText(snippet.getTitle());
if (snippet.getFileName() != null) {
fileName.setVisibility(View.VISIBLE);
fileName.setText(snippet.getFileName());
} else {
fileName.setVisibility(View.GONE);
}
}
}
\ No newline at end of file
package com.commit451.gitlab.widget;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.alexgwyn.recyclerviewsquire.TypedViewHolder;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.transformation.CircleTransformation;
import com.commit451.gitlab.util.ImageUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* A signed in account
*/
public class AccountViewHolder extends TypedViewHolder<Account> {
public static AccountViewHolder inflate(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.widget_item_account, parent, false);
return new AccountViewHolder(view);
}
@BindView(R.id.account_image) ImageView mImageView;
@BindView(R.id.account_username) TextView mUsernameView;
@BindView(R.id.account_server) TextView mServerView;
public AccountViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
@Override
public void bind(int position, Account item) {
mServerView.setText(item.getServerUrl().toString());
mUsernameView.setText(item.getUser().getUsername());
GitLabClient.getPicasso()
.load(ImageUtil.getAvatarUrl(item.getUser(), itemView.getResources().getDimensionPixelSize(R.dimen.user_list_image_size)))
.transform(new CircleTransformation())
.into(mImageView);
}
}
package com.commit451.gitlab.widget;
import android.view.ViewGroup;
import com.alexgwyn.recyclerviewsquire.ClickableArrayAdapter;
import com.commit451.gitlab.model.Account;
/**
* Adapter to show all the accounts
*/
public class AccountsAdapter extends ClickableArrayAdapter<Account, AccountViewHolder> {
@Override
public AccountViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return AccountViewHolder.inflate(parent);
}
@Override
public void onBindViewHolder(AccountViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
holder.bind(position, get(position));
}
}
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