Skip to content
Snippets Groups Projects
Commit 131bbaf8 authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Lots of redesign and refactoring to make things better. I promise.

parent 6e738f4b
No related branches found
No related tags found
No related merge requests found
Showing
with 326 additions and 194 deletions
Loading
Loading
@@ -15,37 +15,37 @@
android:theme="@style/AppTheme" >
 
<activity
android:name="com.commit451.gitlab.MainActivity">
android:name=".activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.commit451.gitlab.LoginActivity" />
android:name=".activities.LoginActivity" />
<activity
android:name="com.commit451.gitlab.FileActivity"
android:name=".activities.FileActivity"
android:configChanges="orientation|screenSize"
android:parentActivityName="com.commit451.gitlab.MainActivity" >
android:parentActivityName=".activities.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.commit451.gitlab.MainActivity" />
android:value=".activities.MainActivity" />
</activity>
<activity
android:name="com.commit451.gitlab.IssueActivity"
android:name=".activities.IssueActivity"
android:configChanges="orientation|screenSize"
android:parentActivityName="com.commit451.gitlab.MainActivity" >
android:parentActivityName=".activities.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.commit451.gitlab.MainActivity" />
android:value=".activities.MainActivity" />
</activity>
<activity
android:name="com.commit451.gitlab.DiffActivity"
android:name=".activities.DiffActivity"
android:configChanges="orientation|screenSize"
android:parentActivityName="com.commit451.gitlab.MainActivity" >
android:parentActivityName=".activities.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.commit451.gitlab.MainActivity" />
android:value=".activities.MainActivity" />
</activity>
 
</application>
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
 
import com.commit451.gitlab.R;
/**
* Created by Jawn on 7/27/2015.
*/
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.content.Context;
import android.content.Intent;
Loading
Loading
@@ -9,6 +9,8 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.Diff;
import com.commit451.gitlab.model.DiffLine;
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
Loading
Loading
@@ -8,22 +7,20 @@ import android.os.Bundle;
import android.os.Environment;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.Toolbar;
import android.util.Base64;
import android.view.MenuItem;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.webkit.WebView;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.DiffLine;
import com.commit451.gitlab.model.TreeItem;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.parceler.Parcels;
import com.commit451.gitlab.model.FileResponse;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
 
import butterknife.Bind;
import butterknife.ButterKnife;
Loading
Loading
@@ -34,45 +31,73 @@ import timber.log.Timber;
 
public class FileActivity extends BaseActivity {
 
private static final String EXTRA_COMMIT = "extra_commit";
private static final String EXTRA_FILE = "extra_file";
private static final String EXTRA_PROJECT_ID = "extra_project_id";
private static final String EXTRA_PATH = "extra_path";
private static final String EXTRA_REF = "extra_ref";
 
public static Intent newIntent(Context context, DiffLine commit, TreeItem file, String path) {
public static Intent newIntent(Context context, long projectId, String path, String ref) {
Intent intent = new Intent(context, FileActivity.class);
intent.putExtra(EXTRA_COMMIT, Parcels.wrap(commit));
intent.putExtra(EXTRA_FILE, Parcels.wrap(file));
intent.putExtra(EXTRA_PROJECT_ID, projectId);
intent.putExtra(EXTRA_PATH, path);
intent.putExtra(EXTRA_REF, ref);
return intent;
}
 
@Bind(R.id.toolbar) Toolbar toolbar;
@Bind(R.id.file_blob) WebView fileBlobView;
@Bind(R.id.progress) View progress;
long mProjectId;
String mPath;
String mRef;
String mFileName;
byte[] mBlob;
 
DiffLine commit;
TreeItem file;
String path;
private byte[] fileBlob;
private final Callback<FileResponse> mFileResponseCallback = new Callback<FileResponse>() {
@Override
public void success(FileResponse fileResponse, Response response) {
progress.setVisibility(View.GONE);
String text = getString(R.string.file_load_error);
// Receiving side
mFileName = fileResponse.getFileName();
mBlob = Base64.decode(fileResponse.getContent(), Base64.DEFAULT);
try {
text = new String(mBlob, "UTF-8");
} catch (UnsupportedEncodingException e) {
Timber.e(e.toString());
}
String temp = "<!DOCTYPE html><html><head><link href=\"github.css\" rel=\"stylesheet\" /></head><body><pre><code>" + text + "</code></pre><script src=\"highlight.pack.js\"></script><script>hljs.initHighlightingOnLoad();</script></body></html>";
fileBlobView.loadDataWithBaseURL("file:///android_asset/", temp, "text/html", "utf8", null);
toolbar.setTitle(fileResponse.getFileName());
toolbar.inflateMenu(R.menu.file);
}
@Override
public void failure(RetrofitError error) {
progress.setVisibility(View.GONE);
Snackbar.make(getWindow().getDecorView(), R.string.file_load_error, Snackbar.LENGTH_SHORT)
.show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
ButterKnife.bind(this);
commit = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_COMMIT));
file = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_FILE));
path = getIntent().getStringExtra(EXTRA_PATH);
if(file != null) {
setupUI();
GitLabClient.instance().getBlob(
GitLabApp.instance().getSelectedProject().getId(),
commit.getId(),
path + file.getName(),
blobCallback);
}
mProjectId = getIntent().getLongExtra(EXTRA_PROJECT_ID, -1);
mPath = getIntent().getStringExtra(EXTRA_PATH);
mRef = getIntent().getStringExtra(EXTRA_REF);
setupUI();
load();
}
@SuppressLint("SetJavaScriptEnabled")
private void load() {
progress.setVisibility(View.VISIBLE);
GitLabClient.instance().getFile(mProjectId, mPath, mRef, mFileResponseCallback);
}
private void setupUI() {
toolbar.setNavigationIcon(R.drawable.ic_back);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
Loading
Loading
@@ -81,7 +106,6 @@ public class FileActivity extends BaseActivity {
onBackPressed();
}
});
toolbar.setTitle(file.getName());
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Loading
Loading
@@ -96,57 +120,25 @@ public class FileActivity extends BaseActivity {
return false;
}
});
fileBlobView.getSettings().setJavaScriptEnabled(true);
}
private Callback<Response> blobCallback = new Callback<Response>() {
@Override
public void success(Response response, Response resp) {
String content = getResources().getString(R.string.file_load_error);
try {
fileBlob = IOUtils.toByteArray(response.getBody().in());
content = new String(fileBlob, "UTF-8");
}
catch(IOException e) {
e.printStackTrace();
}
String temp = "<!DOCTYPE html><html><head><link href=\"github.css\" rel=\"stylesheet\" /></head><body><pre><code>" + StringEscapeUtils.escapeHtml(content) + "</code></pre><script src=\"highlight.pack.js\"></script><script>hljs.initHighlightingOnLoad();</script></body></html>";
fileBlobView.loadDataWithBaseURL("file:///android_asset/", temp, "text/html", "utf8", null);
 
toolbar.inflateMenu(R.menu.file);
}
@Override
public void failure(RetrofitError e) {
Timber.e(e.toString());
Snackbar.make(getWindow().getDecorView(), getString(R.string.connection_error), Snackbar.LENGTH_SHORT)
.show();
}
};
}
private File saveBlob() {
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state) && fileBlob != null) {
File downloadFolder = new File(Environment.getExternalStorageDirectory(), "Download");
if(!downloadFolder.exists())
downloadFolder.mkdir();
File newFile = new File(downloadFolder, file.getName());
if(Environment.MEDIA_MOUNTED.equals(state) && mBlob != null) {
File downloadFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File newFile = new File(downloadFolder, mFileName);
try {
FileOutputStream f = new FileOutputStream(newFile);
f.write(fileBlob);
f.write(mBlob);
f.close();
 
Snackbar.make(getWindow().getDecorView(), getString(R.string.file_saved), Snackbar.LENGTH_SHORT)
.show();
return newFile;
}
catch(IOException e) {
Loading
Loading
@@ -158,13 +150,13 @@ public class FileActivity extends BaseActivity {
Snackbar.make(getWindow().getDecorView(), getString(R.string.save_error), Snackbar.LENGTH_SHORT)
.show();
}
return null;
}
private void openFile() {
File file = saveBlob();
if(file == null) {
Snackbar.make(getWindow().getDecorView(), getString(R.string.open_error), Snackbar.LENGTH_SHORT)
.show();
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.content.Context;
import android.content.Intent;
Loading
Loading
@@ -14,6 +14,8 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.NotesAdapter;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.Issue;
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.app.AlertDialog;
import android.app.Dialog;
Loading
Loading
@@ -12,6 +12,7 @@ import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.Project;
import com.commit451.gitlab.model.Session;
Loading
Loading
package com.commit451.gitlab;
package com.commit451.gitlab.activities;
 
import android.content.Intent;
import android.os.Bundle;
Loading
Loading
@@ -17,6 +17,8 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.events.CloseDrawerEvent;
import com.commit451.gitlab.events.ProjectChangedEvent;
Loading
Loading
Loading
Loading
@@ -4,7 +4,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.DiffActivity;
import com.commit451.gitlab.activities.DiffActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.DiffLine;
import com.commit451.gitlab.viewHolders.CommitViewHolder;
Loading
Loading
Loading
Loading
@@ -4,7 +4,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.IssueActivity;
import com.commit451.gitlab.activities.IssueActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.viewHolders.IssueViewHolder;
Loading
Loading
Loading
Loading
@@ -4,6 +4,7 @@ import com.commit451.gitlab.model.Branch;
import com.commit451.gitlab.model.DeleteResponse;
import com.commit451.gitlab.model.Diff;
import com.commit451.gitlab.model.DiffLine;
import com.commit451.gitlab.model.FileResponse;
import com.commit451.gitlab.model.Group;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.model.Milestone;
Loading
Loading
@@ -16,7 +17,6 @@ import com.commit451.gitlab.model.User;
import java.util.List;
 
import retrofit.Callback;
import retrofit.client.Response;
import retrofit.http.Body;
import retrofit.http.DELETE;
import retrofit.http.GET;
Loading
Loading
@@ -30,12 +30,16 @@ public interface GitLab {
/* --- LOGIN --- */
@POST("/session")
void getSessionByUsername(@Query("login") String login, @Query("password") String password,
@Body String blankBodySoRetrofitDoesntCry, Callback<Session> cb);
void getSessionByUsername(@Query("login") String login,
@Query("password") String password,
@Body String blankBodySoRetrofitDoesntCry,
Callback<Session> cb);
@POST("/session")
void getSessionByEmail(@Query("email") String email, @Query("password") String password,
@Body String blankBodySoRetrofitDoesntCry, Callback<Session> cb);
void getSessionByEmail(@Query("email") String email,
@Query("password") String password,
@Body String blankBodySoRetrofitDoesntCry,
Callback<Session> cb);
/* --- MAIN --- */
Loading
Loading
@@ -51,37 +55,55 @@ public interface GitLab {
/* --- MISC --- */
@GET("/projects/{id}/repository/branches?per_page=100")
void getBranches(@Path("id") long projectId, Callback<List<Branch>> cb);
void getBranches(@Path("id") long projectId,
Callback<List<Branch>> cb);
@GET("/projects/{id}/milestones?per_page=100")
void getMilestones(@Path("id") long projectId, Callback<List<Milestone>> cb);
void getMilestones(@Path("id") long projectId,
Callback<List<Milestone>> cb);
@GET("/projects/{id}/members?per_page=100")
void getUsersFallback(@Path("id") long projectId, Callback<List<User>> cb);
void getUsersFallback(@Path("id") long projectId,
Callback<List<User>> cb);
/* --- COMMITS --- */
@GET("/projects/{id}/repository/commits?per_page=100")
void getCommits(@Path("id") long projectId, @Query("ref_name") String branchName, Callback<List<DiffLine>> cb);
void getCommits(@Path("id") long projectId,
@Query("ref_name") String branchName,
Callback<List<DiffLine>> cb);
 
@GET("/projects/{id}/repository/commits/{sha}")
void getCommit(@Path("id") long projectId, @Path("sha") String commitSHA, Callback<DiffLine> cb);
void getCommit(@Path("id") long projectId,
@Path("sha") String commitSHA,
Callback<DiffLine> cb);
@GET("/projects/{id}/repository/commits/{sha}/diff")
void getCommitDiff(@Path("id") long projectId, @Path("sha") String commitSHA, Callback<List<Diff>> cb);
void getCommitDiff(@Path("id") long projectId,
@Path("sha") String commitSHA,
Callback<List<Diff>> cb);
 
/* --- ISSUE --- */
@GET("/projects/{id}/issues?per_page=100")
void getIssues(@Path("id") long projectId, Callback<List<Issue>> cb);
void getIssues(@Path("id") long projectId,
Callback<List<Issue>> cb);
@POST("/projects/{id}/issues")
void postIssue(@Path("id") long projectId, @Query("title") String title, @Query("description") String description,
@Body String blankBodySoRetrofitDoesntCry, Callback<Issue> cb);
void postIssue(@Path("id") long projectId,
@Query("title") String title,
@Query("description") String description,
@Body String blankBodySoRetrofitDoesntCry,
Callback<Issue> cb);
@PUT("/projects/{id}/issues/{issue_id}")
void editIssue(@Path("id") long projectId, @Path("issue_id") long issueId, @Query("state_event") String stateEvent, @Query("assignee_id") long assigneeId, @Query("milestone_id") long milestoneId,
@Body String blankBodySoRetrofitDoesntCry, Callback<Issue> cb);
void editIssue(@Path("id") long projectId,
@Path("issue_id") long issueId,
@Query("state_event") String stateEvent,
@Query("assignee_id") long assigneeId,
@Query("milestone_id") long milestoneId,
@Body String blankBodySoRetrofitDoesntCry,
Callback<Issue> cb);
 
@PUT("/projects/{id}/issues/{issue_id}")
void editIssue(@Path("id") long projectId,
Loading
Loading
@@ -91,32 +113,49 @@ public interface GitLab {
Callback<Issue> cb);
@GET("/projects/{id}/issues/{issue_id}/notes?per_page=100")
void getIssueNotes(@Path("id") long projectId, @Path("issue_id") long issueId, Callback<List<Note>> cb);
void getIssueNotes(@Path("id") long projectId,
@Path("issue_id") long issueId,
Callback<List<Note>> cb);
@POST("/projects/{id}/issues/{issue_id}/notes")
void postIssueNote(@Path("id") long projectId, @Path("issue_id") long issueId, @Query("body") String body,
@Body String blankBodySoRetrofitDoesntCry, Callback<Note> cb);
void postIssueNote(@Path("id") long projectId,
@Path("issue_id") long issueId,
@Query("body") String body,
@Body String blankBodySoRetrofitDoesntCry,
Callback<Note> cb);
/* --- FILES --- */
@GET("/projects/{id}/repository/tree?per_page=100")
void getTree(@Path("id") long projectId, @Query("ref_name") String branchName, @Query("path") String path, Callback<List<TreeItem>> cb);
@GET("/projects/{id}/repository/commits/{sha}/blob")
void getBlob(@Path("id") long projectId, @Path("sha") String commitId, @Query("filepath") String path, Callback<Response> cb);
void getTree(@Path("id") long projectId,
@Query("ref_name") String branchName,
@Query("path") String path,
Callback<List<TreeItem>> cb);
@GET("/projects/{id}/repository/files")
void getFile(@Path("id") long projectId,
@Query("file_path") String path,
@Query("ref") String ref,
Callback<FileResponse> callback);
/* --- USER --- */
 
@GET("/users/{id}")
void getUser(@Path("id") long userId, Callback<User> userCallback);
void getUser(@Path("id") long userId,
Callback<User> userCallback);
@GET("/groups/{id}/members?per_page=100")
void getGroupMembers(@Path("id") long groupId, Callback<List<User>> cb);
void getGroupMembers(@Path("id") long groupId,
Callback<List<User>> cb);
@POST("/groups/{id}/members")
void addGroupMember(@Path("id") long groupId, @Query("user_id") long userId, @Query("access_level") String accessLevel,
@Body String blankBodySoRetrofitDoesntCry, Callback<User> cb);
void addGroupMember(@Path("id") long groupId,
@Query("user_id") long userId,
@Query("access_level") String accessLevel,
@Body String blankBodySoRetrofitDoesntCry,
Callback<User> cb);
@DELETE("/groups/{id}/members/{user_id}")
void removeGroupMember(@Path("id") long groupId, @Path("user_id") long userId, Callback<DeleteResponse> cb);
void removeGroupMember(@Path("id") long groupId,
@Path("user_id") long userId,
Callback<DeleteResponse> cb);
}
\ No newline at end of file
Loading
Loading
@@ -23,6 +23,7 @@ import retrofit.converter.GsonConverter;
*/
public class GitLabClient {
 
private static final String API_VERSION = "/api/v3";
private static GitLab gitLab;
 
public static GitLab instance() {
Loading
Loading
@@ -42,7 +43,7 @@ public class GitLabClient {
.setRequestInterceptor(new GitLabInterceptor())
.setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.BASIC)
.setConverter(new GsonConverter(gson))
.setEndpoint(Prefs.getServerUrl(GitLabApp.instance()) + "/api/v3")
.setEndpoint(Prefs.getServerUrl(GitLabApp.instance()) + API_VERSION)
.build();
gitLab = restAdapter.create(GitLab.class);
}
Loading
Loading
package com.commit451.gitlab.dialogs;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatDialog;
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.activities.LoginActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.events.LogoutEvent;
import com.commit451.gitlab.tools.Prefs;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Log out confirmation
* Created by Jawn on 8/21/2015.
*/
public class LogoutDialog extends AppCompatDialog {
@OnClick(R.id.logout_button)
void onLogoutClick() {
Prefs.setLoggedIn(getContext(), false);
Prefs.setUserId(getContext(), -1);
Prefs.setPrivateToken(getContext(), null);
getContext().startActivity(new Intent(getContext(), LoginActivity.class));
GitLabApp.bus().post(new LogoutEvent());
}
@OnClick(R.id.cancel_button)
void onCancelClick() {
dismiss();
}
public LogoutDialog(Context context) {
super(context);
setContentView(R.layout.dialog_logout);
ButterKnife.bind(this);
}
}
Loading
Loading
@@ -9,7 +9,7 @@ import android.widget.EditText;
import android.widget.Toast;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.IssueActivity;
import com.commit451.gitlab.activities.IssueActivity;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.Issue;
Loading
Loading
package com.commit451.gitlab.events;
/**
* Created by Jawn on 8/21/2015.
*/
public class LogoutEvent {
}
Loading
Loading
@@ -11,7 +11,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.FileActivity;
import com.commit451.gitlab.activities.FileActivity;
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
Loading
Loading
@@ -81,11 +81,13 @@ public class FilesFragment extends Fragment implements SwipeRefreshLayout.OnRefr
private void loadFiles() {
String branch = "master";
if(GitLabApp.instance().getSelectedBranch() != null)
if(GitLabApp.instance().getSelectedBranch() != null) {
branch = GitLabApp.instance().getSelectedBranch().getName();
}
if(swipeLayout != null && !swipeLayout.isRefreshing())
swipeLayout.setRefreshing(true);
if(swipeLayout != null && !swipeLayout.isRefreshing()) {
swipeLayout.setRefreshing(true);
}
String currentPath = "";
for(String p : path) {
Loading
Loading
@@ -181,8 +183,9 @@ public class FilesFragment extends Fragment implements SwipeRefreshLayout.OnRefr
for(String p : path) {
pathExtra += p;
}
startActivity(FileActivity.newIntent(getActivity(), null, treeItem, pathExtra));
pathExtra = pathExtra + treeItem.getName();
startActivity(FileActivity.newIntent(getActivity(), GitLabApp.instance().getSelectedProject().getId(),
pathExtra, GitLabApp.instance().getSelectedBranch().getName()));
}
}
};
Loading
Loading
package com.commit451.gitlab.model;
import com.google.gson.annotations.SerializedName;
import org.parceler.Parcel;
/**
* Created by Jawn on 8/25/2015.
*/
@Parcel
public class FileResponse {
@SerializedName("file_name")
private String mFileName;
@SerializedName("file_path")
private String mFilePath;
@SerializedName("size")
private long mSize;
@SerializedName("encoding")
private String mEncoding;
@SerializedName("content")
private String mContent;
@SerializedName("ref")
private String mRef;
@SerializedName("blob_id")
private String mBlobId;
@SerializedName("commit_id")
private String mCommitId;
public String getFileName() {
return mFileName;
}
public String getContent() {
return mContent;
}
}
Loading
Loading
@@ -5,11 +5,11 @@ import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.DiffLine;
import com.commit451.gitlab.views.CompoundTextView;
import com.squareup.picasso.Picasso;
 
import butterknife.Bind;
Loading
Loading
@@ -28,9 +28,10 @@ public class CommitViewHolder extends RecyclerView.ViewHolder {
return new CommitViewHolder(view);
}
 
@Bind(R.id.title) TextView title;
@Bind(R.id.summary) CompoundTextView summary;
@Bind(R.id.custom) TextView custom;
@Bind(R.id.commit_image) ImageView image;
@Bind(R.id.commit_message) TextView message;
@Bind(R.id.commit_author) TextView author;
@Bind(R.id.commit_time) TextView time;
 
public CommitViewHolder(View view) {
super(view);
Loading
Loading
@@ -38,14 +39,17 @@ public class CommitViewHolder extends RecyclerView.ViewHolder {
}
 
public void bind(DiffLine commit) {
title.setText(commit.getTitle());
summary.setText(commit.getAuthorName());
custom.setText(DateUtils.getRelativeTimeSpanString(commit.getCreatedAt().getTime()));
String url = Gravatar.init()
.with(commit.getAuthorEmail())
.size(itemView.getResources().getDimensionPixelSize(R.dimen.image_size))
.build();
Picasso.with(itemView.getContext()).load(url).into(summary);
Picasso.with(itemView.getContext())
.load(url)
.into(image);
message.setText(commit.getTitle());
author.setText(commit.getAuthorName());
time.setText(DateUtils.getRelativeTimeSpanString(commit.getCreatedAt().getTime()));
}
}
Loading
Loading
@@ -5,11 +5,11 @@ 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.TextView;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.Issue;
import com.commit451.gitlab.views.CompoundTextView;
import com.squareup.picasso.Picasso;
 
import butterknife.Bind;
Loading
Loading
@@ -17,7 +17,7 @@ import butterknife.ButterKnife;
import fr.tkeunebr.gravatar.Gravatar;
 
/**
* Files, yay!
* issues, yay!
* Created by Jawn on 6/11/2015.
*/
public class IssueViewHolder extends RecyclerView.ViewHolder {
Loading
Loading
@@ -28,9 +28,10 @@ public class IssueViewHolder extends RecyclerView.ViewHolder {
return new IssueViewHolder(view);
}
 
@Bind(R.id.title) TextView title;
@Bind(R.id.summary) CompoundTextView summary;
@Bind(R.id.custom) TextView custom;
@Bind(R.id.issue_image) ImageView image;
@Bind(R.id.issue_message) TextView message;
@Bind(R.id.issue_creator) TextView creator;
@Bind(R.id.issue_state) TextView stateView;
 
public IssueViewHolder(View view) {
super(view);
Loading
Loading
@@ -43,15 +44,15 @@ public class IssueViewHolder extends RecyclerView.ViewHolder {
tempId = issue.getId();
}
 
title.setText("#" + tempId + ": " + issue.getTitle());
message.setText("#" + tempId + ": " + issue.getTitle());
 
String state = issue.getState();
custom.setText(state);
stateView.setText(state);
if(state != null && (state.equals("opened") || state.equals("reopened"))) {
custom.setTextColor(Color.parseColor("#30C830"));
stateView.setTextColor(Color.parseColor("#30C830"));
}
else if(state != null && (state.equals("closed"))) {
custom.setTextColor(Color.parseColor("#FF0000"));
stateView.setTextColor(Color.parseColor("#FF0000"));
}
 
int size = itemView.getResources().getDimensionPixelSize(R.dimen.image_size);
Loading
Loading
@@ -71,7 +72,7 @@ public class IssueViewHolder extends RecyclerView.ViewHolder {
assigneeAvatarUrl = issue.getAssignee().getAvatarUrl() + "&s=" + size;
}
 
summary.setText(assigneeName);
Picasso.with(itemView.getContext()).load(assigneeAvatarUrl).into(summary);
creator.setText(assigneeName);
Picasso.with(itemView.getContext()).load(assigneeAvatarUrl).into(image);
}
}
package com.commit451.gitlab.views;
import android.annotation.TargetApi;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebSettings;
import android.webkit.WebView;
/**
* Created by Jawn on 8/25/2015.
*/
public class BetterWebView extends WebView {
public BetterWebView(Context context) {
super(context);
init();
}
public BetterWebView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BetterWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(21)
public BetterWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
WebSettings settings = getSettings();
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
}
}
package com.commit451.gitlab.views;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
public class CompoundTextView extends TextView implements Target {
public CompoundTextView(Context context) {
super(context);
}
public CompoundTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CompoundTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
setImage(new BitmapDrawable(this.getResources(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
setImage(errorDrawable);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
setImage(placeHolderDrawable);
}
private void setImage(Drawable drawable) {
this.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
}
}
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