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

Custom movement method to open links internally

parent 68ab4491
No related branches found
No related tags found
No related merge requests found
Pipeline #
Loading
Loading
@@ -23,7 +23,7 @@ def versionBuild = 0 // bump for dogfood builds, public betas, etc.
 
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
buildToolsVersion "24.0.2"
 
project.ext {
LABCOAT_FABRIC_KEY = project.hasProperty("LABCOAT_FABRIC_KEY") ? project.LABCOAT_FABRIC_KEY : "";
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
Loading
Loading
@@ -9,7 +10,6 @@ import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Loading
Loading
@@ -27,9 +27,11 @@ 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 org.greenrobot.eventbus.Subscribe;
import com.commit451.gitlab.util.InternalLinkMovementMethod;
import com.vdurmont.emoji.EmojiParser;
 
import org.greenrobot.eventbus.Subscribe;
import java.util.List;
 
import butterknife.BindView;
Loading
Loading
@@ -285,7 +287,18 @@ public class ProjectFragment extends ButterKnifeFragment {
mEventReceiver = new EventReceiver();
App.bus().register(mEventReceiver);
 
mOverviewVew.setMovementMethod(LinkMovementMethod.getInstance());
mOverviewVew.setMovementMethod(new InternalLinkMovementMethod(new InternalLinkMovementMethod.OnLinkClickedListener() {
@Override
public boolean onLinkClicked(String url) {
String server = App.instance().getAccount().getServerUrl().toString();
if (url.startsWith(server)) {
Timber.d("Looks like an internal server link: %s", url);
Navigator.navigateToUrl(getActivity(), Uri.parse(url), App.instance().getAccount());
return true;
}
return false;
}
}));
 
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
Loading
Loading
package com.commit451.gitlab.util;
import android.text.Layout;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.view.MotionEvent;
import android.widget.TextView;
/**
* Set this on a textview and then you can potentially open links locally if applicable
*/
public class InternalLinkMovementMethod extends LinkMovementMethod {
private OnLinkClickedListener mOnLinkClickedListener;
public InternalLinkMovementMethod(OnLinkClickedListener onLinkClickedListener) {
mOnLinkClickedListener = onLinkClickedListener;
}
public boolean onTouchEvent(TextView widget, android.text.Spannable buffer, android.view.MotionEvent event) {
int action = event.getAction();
//http://stackoverflow.com/questions/1697084/handle-textview-link-click-in-my-android-app
if (action == MotionEvent.ACTION_UP) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
if (link.length != 0) {
String url = link[0].getURL();
boolean handled = mOnLinkClickedListener.onLinkClicked(url);
if (handled) {
return true;
}
return super.onTouchEvent(widget, buffer, event);
}
}
return super.onTouchEvent(widget, buffer, event);
}
public interface OnLinkClickedListener {
boolean onLinkClicked(String url);
}
}
package com.commit451.gitlab.util;
import android.widget.TextView;
import com.commit451.gitlab.App;
import com.commit451.gitlab.model.api.Project;
import com.squareup.picasso.Picasso;
import com.vdurmont.emoji.EmojiParser;
import in.uncod.android.bypass.Bypass;
/**
* Created by Jawn on 8/25/2016.
*/
public class MarkdownUtil {
public static CharSequence from(TextView textView, Bypass bypass, Picasso picasso, String serverUrl, Project project, String markdown) {
markdown = EmojiParser.parseToUnicode(markdown);
CharSequence charSequence = bypass.markdownToSpannable(markdown,
BypassImageGetterFactory.create(textView,
App.instance().getPicasso(),
App.instance().getAccount().getServerUrl().toString(),
project));
return charSequence;
}
}
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