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

Make relative image links show up in issue and merge request comments

parent 003ab468
No related branches found
No related tags found
No related merge requests found
Showing with 76 additions and 23 deletions
Loading
Loading
@@ -102,14 +102,14 @@ dependencies {
compile 'net.danlew:android.joda:2.9.4.1'
compile 'org.parceler:parceler-api:1.1.5'
apt 'org.parceler:parceler:1.1.5'
compile 'com.commit451:bypasses:1.0.1'
compile 'com.github.Commit451:bypasses:1.0.4'
compile 'com.github.Commit451:ElasticDragDismissLayout:1.0.4'
compile 'com.github.Commit451.AdapterLayout:adapterlayout:1.0.3'
compile 'com.github.Commit451.AdapterLayout:adapterflowlayout:1.0.3'
compile 'com.github.Commit451:Easel:1.0.0'
compile 'com.github.Commit451:Gimbal:2.0.0'
compile 'com.github.Commit451:Teleprinter:1.0.2'
compile 'com.github.Commit451:BypassPicassoImageGetter:1.0.0'
compile 'com.github.Commit451:BypassPicassoImageGetter:1.1.0'
compile 'com.github.Commit451:Jounce:1.0.1'
compile 'com.github.Commit451:EasyCallback:1.0.0'
compile 'com.github.Commit451:ForegroundViews:2.1.0'
Loading
Loading
Loading
Loading
@@ -164,7 +164,7 @@ public class IssueActivity extends BaseActivity {
.show();
} else {
mIssue = response.get(0);
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue);
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue, mProject);
mNotesRecyclerView.setAdapter(mIssueDetailsAdapter);
bindIssue();
bindProject();
Loading
Loading
@@ -346,7 +346,7 @@ public class IssueActivity extends BaseActivity {
if (getIntent().hasExtra(EXTRA_SELECTED_ISSUE)) {
mProject = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_PROJECT));
mIssue = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_SELECTED_ISSUE));
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue);
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue, mProject);
mNotesRecyclerView.setAdapter(mIssueDetailsAdapter);
bindIssue();
bindProject();
Loading
Loading
Loading
Loading
@@ -6,6 +6,7 @@ import android.view.ViewGroup;
 
import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.viewHolder.IssueHeaderViewHolder;
import com.commit451.gitlab.viewHolder.IssueLabelsViewHolder;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
Loading
Loading
@@ -29,15 +30,17 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
private static final int HEADER_COUNT = 2;
private static final int FOOTER_COUNT = 1;
 
private Project mProject;
private LinkedList<Note> mNotes;
private Issue mIssue;
private boolean mLoading = false;
private Bypass mBypass;
 
public IssueDetailsAdapter(Context context, Issue issue) {
public IssueDetailsAdapter(Context context, Issue issue, Project project) {
mIssue = issue;
mNotes = new LinkedList<>();
mBypass = new Bypass(context);
mProject = project;
}
 
@Override
Loading
Loading
@@ -62,7 +65,7 @@ public class IssueDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
((IssueLabelsViewHolder) holder).bind(mIssue.getLabels());
} else if (holder instanceof NoteViewHolder) {
Note note = getNoteAt(position);
((NoteViewHolder) holder).bind(note, mBypass);
((NoteViewHolder) holder).bind(note, mBypass, mProject);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
Loading
Loading
Loading
Loading
@@ -6,6 +6,7 @@ import android.view.ViewGroup;
 
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.MergeRequestHeaderViewHolder;
import com.commit451.gitlab.viewHolder.NoteViewHolder;
Loading
Loading
@@ -31,11 +32,13 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
private MergeRequest mMergeRequest;
private boolean mLoading = false;
private Bypass mBypass;
private Project mProject;
 
public MergeRequestDetailAdapter(Context context, MergeRequest mergeRequest) {
public MergeRequestDetailAdapter(Context context, MergeRequest mergeRequest, Project project) {
mMergeRequest = mergeRequest;
mNotes = new LinkedList<>();
mBypass = new Bypass(context);
mProject = project;
}
 
@Override
Loading
Loading
@@ -53,10 +56,10 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MergeRequestHeaderViewHolder) {
((MergeRequestHeaderViewHolder) holder).bind(mMergeRequest, mBypass);
((MergeRequestHeaderViewHolder) holder).bind(mMergeRequest, mBypass, mProject);
} else if (holder instanceof NoteViewHolder) {
Note note = getNoteAt(position);
((NoteViewHolder) holder).bind(note, mBypass);
((NoteViewHolder) holder).bind(note, mBypass, mProject);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
Loading
Loading
Loading
Loading
@@ -12,11 +12,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.MergeRequestDetailAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.event.MergeRequestChangedEvent;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Note;
Loading
Loading
@@ -178,7 +177,7 @@ public class MergeRequestDiscussionFragment extends ButterKnifeFragment {
super.onViewCreated(view, savedInstanceState);
mTeleprinter = new Teleprinter(getActivity());
 
mMergeRequestDetailAdapter = new MergeRequestDetailAdapter(getActivity(), mMergeRequest);
mMergeRequestDetailAdapter = new MergeRequestDetailAdapter(getActivity(), mMergeRequest, mProject);
mNotesLinearLayoutManager = new LinearLayoutManager(getActivity());
mNotesRecyclerView.setLayoutManager(mNotesLinearLayoutManager);
mNotesRecyclerView.setAdapter(mMergeRequestDetailAdapter);
Loading
Loading
Loading
Loading
@@ -15,7 +15,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.bypasspicassoimagegetter.BypassPicassoImageGetter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.easycallback.HttpException;
import com.commit451.gitlab.App;
Loading
Loading
@@ -27,6 +26,7 @@ import com.commit451.gitlab.model.api.RepositoryFile;
import com.commit451.gitlab.model.api.RepositoryTreeObject;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.observable.DecodeObservableFactory;
import com.commit451.gitlab.util.BypassImageGetterFactory;
import com.squareup.otto.Subscribe;
 
import java.util.List;
Loading
Loading
@@ -160,7 +160,10 @@ public class ProjectFragment extends ButterKnifeFragment {
switch (getReadmeType(response.getFileName())) {
case README_TYPE_MARKDOWN:
mOverviewVew.setText(mBypass.markdownToSpannable(text,
new BypassPicassoImageGetter(mOverviewVew, App.instance().getPicasso())));
BypassImageGetterFactory.create(mOverviewVew,
App.instance().getPicasso(),
App.instance().getAccount().getServerUrl().toString(),
mProject)));
break;
case README_TYPE_HTML:
mOverviewVew.setText(Html.fromHtml(text));
Loading
Loading
package com.commit451.gitlab.util;
import android.widget.TextView;
import com.commit451.bypasspicassoimagegetter.BypassPicassoImageGetter;
import com.commit451.gitlab.model.api.Project;
import com.squareup.picasso.Picasso;
import timber.log.Timber;
/**
* Creates {@link BypassPicassoImageGetter}s which are configured to handle relative Urls
*/
public class BypassImageGetterFactory {
public static BypassPicassoImageGetter create(TextView textView, Picasso picasso, final String baseUrl, final Project project) {
BypassPicassoImageGetter getter = new BypassPicassoImageGetter(textView, picasso);
getter.setSourceModifier(new BypassPicassoImageGetter.SourceModifier() {
@Override
public String modify(String source) {
if (source.startsWith("/")) {
String url = baseUrl + "/" + project.getPathWithNamespace() + source;
Timber.d(url);
return url;
}
return source;
}
});
return getter;
}
}
Loading
Loading
@@ -9,11 +9,12 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.commit451.bypasspicassoimagegetter.BypassPicassoImageGetter;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.transformation.CircleTransformation;
import com.commit451.gitlab.util.BypassImageGetterFactory;
import com.commit451.gitlab.util.DateUtil;
import com.commit451.gitlab.util.ImageUtil;
 
Loading
Loading
@@ -32,21 +33,28 @@ public class MergeRequestHeaderViewHolder extends RecyclerView.ViewHolder {
return new MergeRequestHeaderViewHolder(view);
}
 
@BindView(R.id.description) TextView mDescriptionView;
@BindView(R.id.author_image) ImageView mAuthorImageView;
@BindView(R.id.author) TextView mAuthorView;
@BindView(R.id.description)
TextView mDescriptionView;
@BindView(R.id.author_image)
ImageView mAuthorImageView;
@BindView(R.id.author)
TextView mAuthorView;
 
public MergeRequestHeaderViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
 
public void bind(MergeRequest mergeRequest, Bypass bypass) {
public void bind(MergeRequest mergeRequest, Bypass bypass, Project project) {
if (TextUtils.isEmpty(mergeRequest.getDescription())) {
mDescriptionView.setVisibility(View.GONE);
} else {
mDescriptionView.setVisibility(View.VISIBLE);
mDescriptionView.setText(bypass.markdownToSpannable(mergeRequest.getDescription(), new BypassPicassoImageGetter(mDescriptionView, App.instance().getPicasso())));
mDescriptionView.setText(bypass.markdownToSpannable(mergeRequest.getDescription(),
BypassImageGetterFactory.create(mDescriptionView,
App.instance().getPicasso(),
App.instance().getAccount().getServerUrl().toString(),
project)));
mDescriptionView.setMovementMethod(LinkMovementMethod.getInstance());
}
 
Loading
Loading
Loading
Loading
@@ -12,7 +12,9 @@ import com.commit451.bypasspicassoimagegetter.BypassPicassoImageGetter;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.transformation.CircleTransformation;
import com.commit451.gitlab.util.BypassImageGetterFactory;
import com.commit451.gitlab.util.DateUtil;
import com.commit451.gitlab.util.ImageUtil;
 
Loading
Loading
@@ -41,7 +43,7 @@ public class NoteViewHolder extends RecyclerView.ViewHolder {
ButterKnife.bind(this, view);
}
 
public void bind(Note note, Bypass bypass) {
public void bind(Note note, Bypass bypass, Project project) {
if (note.getCreatedAt() != null) {
mCreationDateView.setText(DateUtil.getRelativeTimeSpanString(itemView.getContext(), note.getCreatedAt()));
}
Loading
Loading
@@ -55,7 +57,11 @@ public class NoteViewHolder extends RecyclerView.ViewHolder {
summary = note.getBody();
}
 
mSummaryView.setText(bypass.markdownToSpannable(summary, new BypassPicassoImageGetter(mSummaryView, App.instance().getPicasso())));
BypassPicassoImageGetter getter = BypassImageGetterFactory.create(mSummaryView,
App.instance().getPicasso(),
App.instance().getAccount().getServerUrl().toString(),
project);
mSummaryView.setText(bypass.markdownToSpannable(summary, getter));
mSummaryView.setMovementMethod(LinkMovementMethod.getInstance());
 
App.instance().getPicasso()
Loading
Loading
Loading
Loading
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-beta1'
classpath 'com.android.tools.build:gradle:2.2.0-beta2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
//check with ./gradlew dependencyUpdates
classpath 'com.github.ben-manes:gradle-versions-plugin:0.13.0'
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