diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java index 7e425be5dbcfd06e00e7de965560c7e728969fe3..03d030be95b8d0c92a5c433562286f33012c2b60 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java @@ -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); }) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java index b9d21cfbf644d7e18cd591b5da0a0c6d62b3cd53..c01de5b242841522dd697b20b7b04c093449a5bd 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java @@ -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) ) ); } diff --git a/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java b/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java index 21fadd2635434e18a270291db7b3275d196f8df8..d1776edb37aecc05589a2ff1217d60ba5f6d6c62 100644 --- a/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java +++ b/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java @@ -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); + } + } }