Skip to content
Snippets Groups Projects
Commit 1814f712 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

New Feature: Channel links are now working!

Bugfix: Hidden events now stay hidden.
parent f7819253
No related branches found
No related tags found
No related merge requests found
......@@ -339,6 +339,7 @@ public class MainActivity extends BoundActivity {
}
}
// FIXME: Fix this ugly hack
public void displayFilterDialog() {
if (context.client() != null) {
List<Integer> filterSettings = Arrays.asList(
......@@ -382,7 +383,12 @@ public class MainActivity extends BoundActivity {
int filters = 0x00000000;
if (dialog.getSelectedIndices() != null)
for (int i : dialog.getSelectedIndices()) {
filters |= filterSettings.get(i);
int settingsid = filterSettings.get(i);
filters |= settingsid;
if (settingsid == Message.Type.Quit.value)
filters |= Message.Type.NetsplitQuit.value;
else if (settingsid == Message.Type.Join.value)
filters |= Message.Type.NetsplitJoin.value;
}
backlogFilter.setFilters(filters);
})
......
......@@ -117,7 +117,7 @@ public class ChatMessageRenderer {
holder.content.setText(
context.themeUtil().translations.formatPlain(
formatNick(message.sender, false),
helper.formatIrcMessage(message.content)
helper.formatIrcMessage(context.client(), message)
)
);
}
......@@ -126,7 +126,7 @@ public class ChatMessageRenderer {
applyStyle(holder, plainStyle, highlightStyle, message.flags.Highlight);
holder.content.setText(context.themeUtil().translations.formatAction(
formatNick(message.sender, false),
helper.formatIrcMessage(message.content)
helper.formatIrcMessage(context.client(), message)
));
}
......@@ -135,7 +135,7 @@ public class ChatMessageRenderer {
holder.content.setText(
context.themeUtil().translations.formatAction(
formatNick(message.sender, false),
helper.formatIrcMessage(message.content)
helper.formatIrcMessage(context.client(), message)
)
);
}
......
......@@ -27,10 +27,8 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Parcel;
import android.provider.Browser;
import android.support.annotation.NonNull;
import android.text.ParcelableSpan;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ClickableSpan;
......@@ -44,7 +42,10 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.kuschku.quasseldroid_ng.R;
import de.kuschku.libquassel.client.Client;
import de.kuschku.libquassel.localtypes.buffers.Buffer;
import de.kuschku.libquassel.message.Message;
import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
import de.kuschku.util.irc.IrcUserUtils;
......@@ -81,14 +82,20 @@ public class IrcFormatHelper {
}
@NonNull
public CharSequence formatIrcMessage(@NonNull String message) {
public CharSequence formatIrcMessage(@NonNull Client client, @NonNull Message message) {
List<FutureClickableSpan> spans = new LinkedList<>();
SpannableString str = new SpannableString(context.deserializer().formatString(message));
SpannableString str = new SpannableString(context.deserializer().formatString(message.content));
Matcher urlMatcher = urlPattern.matcher(str);
while (urlMatcher.find()) {
spans.add(new FutureClickableSpan(new CustomURLSpan(urlMatcher.group()), urlMatcher.start(), urlMatcher.end()));
}
Matcher channelMatcher = channelPattern.matcher(str);
while (channelMatcher.find()) {
QIrcChannel channel = client.networkManager().network(message.bufferInfo.networkId()).ircChannel(channelMatcher.group());
Buffer buffer = client.bufferManager().channel(channel);
spans.add(new FutureClickableSpan(new ChannelSpan(client, buffer.getInfo().id()), channelMatcher.start(), channelMatcher.end()));
}
for (FutureClickableSpan span : spans) {
str.setSpan(span.span, span.start, span.end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
......@@ -108,36 +115,16 @@ public class IrcFormatHelper {
}
}
private static class CustomURLSpan extends ClickableSpan implements ParcelableSpan {
private static class CustomURLSpan extends ClickableSpan {
private final String mURL;
public CustomURLSpan(@NonNull String url) {
mURL = url;
}
public CustomURLSpan(@NonNull Parcel src) {
mURL = src.readString();
}
public int getSpanTypeId() {
return R.id.custom_url_span;
}
public int describeContents() {
return 0;
}
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(mURL);
}
public String getURL() {
return mURL;
}
@Override
public void onClick(@NonNull View widget) {
Uri uri = Uri.parse(getURL());
public void onClick(View widget) {
Uri uri = Uri.parse(mURL);
Context context = widget.getContext();
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
......@@ -148,4 +135,20 @@ public class IrcFormatHelper {
}
}
}
private class ChannelSpan extends ClickableSpan {
@NonNull
private final Client client;
private final int bufferid;
public ChannelSpan(@NonNull Client client, int bufferid) {
this.client = client;
this.bufferid = bufferid;
}
@Override
public void onClick(View widget) {
client.backlogManager().open(bufferid);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment