diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt index 28b2e2093e1d2d8bb655b5f281c44c88814b6cfd..57ec8ac394d2636d96fd14002c89ad851dce77b9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt @@ -28,16 +28,21 @@ class IgnoreItemActivity : ServiceBoundSettingsActivity(IgnoreItemFragment()) { companion object { fun launch( context: Context, - item: IgnoreListManager.IgnoreListItem? = null + item: IgnoreListManager.IgnoreListItem? = null, + addRule: String? = null ) = context.startActivity(intent(context, item)) fun intent( context: Context, - item: IgnoreListManager.IgnoreListItem? = null + item: IgnoreListManager.IgnoreListItem? = null, + addRule: String? = null ) = Intent(context, IgnoreItemActivity::class.java).apply { if (item != null) { putExtra("item", item) } + if (addRule != null) { + putExtra("add_rule", addRule) + } } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt index 4c9bfda8ff482671e4ef9ec574db751e93e31566..dd347fa5f4c94b819a32c4c28a583fdddafa4d4d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemFragment.kt @@ -119,7 +119,9 @@ class IgnoreItemFragment : ServiceBoundSettingsFragment(), Savable, )) scope.adapter = scopeAdapter - item?.let { data -> + val addRule = arguments?.getString("add_rule") + val data = item + if (data != null) { enabled.isChecked = data.isActive ignoreRule.setText(data.ignoreRule) isRegEx.isChecked = data.isRegEx @@ -127,6 +129,8 @@ class IgnoreItemFragment : ServiceBoundSettingsFragment(), Savable, strictness.setSelection(strictnessAdapter.indexOf(data.strictness) ?: 0) scope.setSelection(scopeAdapter.indexOf(data.scope) ?: 0) scopeRule.setText(data.scopeRule) + } else if (addRule != null) { + ignoreRule.setText(addRule) } scope.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt index 4b919d42afacec40d4aa7698d5309901d601b41d..d188afb67739a6ca246c3005ea2e38a81c2d5d3c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt @@ -25,7 +25,18 @@ import de.kuschku.quasseldroid.util.ui.settings.ServiceBoundSettingsActivity class IgnoreListActivity : ServiceBoundSettingsActivity(IgnoreListFragment()) { companion object { - fun launch(context: Context) = context.startActivity(intent(context)) - fun intent(context: Context) = Intent(context, IgnoreListActivity::class.java) + fun launch( + context: Context, + addRule: String? = null + ) = context.startActivity(intent(context, addRule)) + + fun intent( + context: Context, + addRule: String? = null + ) = Intent(context, IgnoreListActivity::class.java).apply { + if (addRule != null) { + putExtra("add_rule", addRule) + } + } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt index 88632f9906a2aec4549663d0f7b355cbe906cbc4..904b79892ac3f7d5b1e009275b434b444040c581 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt @@ -69,10 +69,17 @@ class IgnoreListFragment : ServiceBoundSettingsFragment(), Savable, helper = ItemTouchHelper(callback) helper.attachToRecyclerView(list) + val addRule = arguments?.getString("add_rule") + add.setOnClickListener { startActivityForResult(IgnoreItemActivity.intent(requireContext()), REQUEST_CREATE_RULE) } + if (addRule != null) { + startActivityForResult(IgnoreItemActivity.intent(requireContext(), addRule = addRule), + REQUEST_CREATE_RULE) + } + viewModel.ignoreListManager .filter(Optional<IgnoreListManager>::isPresent) .map(Optional<IgnoreListManager>::get) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt index 66ce0b3ee8a1570936f43b880651fc94400e9440..3d90879784c63cb27de774cc28ede449b20a49a0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt @@ -30,7 +30,6 @@ import android.view.ViewGroup import android.widget.Button import android.widget.ImageView import android.widget.TextView -import android.widget.Toast import androidx.lifecycle.Observer import butterknife.BindView import butterknife.ButterKnife @@ -42,9 +41,11 @@ import de.kuschku.libquassel.quassel.syncables.IrcUser import de.kuschku.libquassel.util.Optional import de.kuschku.libquassel.util.helpers.nullIf import de.kuschku.libquassel.util.helpers.value +import de.kuschku.libquassel.util.irc.HostmaskHelper import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.ui.chat.ChatActivity +import de.kuschku.quasseldroid.ui.coresettings.ignorelist.IgnoreListActivity import de.kuschku.quasseldroid.util.ShortcutCreationHelper import de.kuschku.quasseldroid.util.avatars.AvatarHelper import de.kuschku.quasseldroid.util.avatars.MatrixApi @@ -225,7 +226,7 @@ class UserInfoFragment : ServiceBoundFragment() { } nick.text = user.nick - val (content, hasSpoilers) = contentFormatter.formatContent( + val (content, _) = contentFormatter.formatContent( user.realName ?: "", networkId = user.networkId ) @@ -253,7 +254,7 @@ class UserInfoFragment : ServiceBoundFragment() { actionWhois.visibleIf(user.knownToCore) - actionQuery.setOnClickListener { + actionQuery.setOnClickListener { view -> viewModel.session.value?.orNull()?.let { session -> val info = session.bufferSyncer.find( bufferName = user.nick, @@ -262,8 +263,7 @@ class UserInfoFragment : ServiceBoundFragment() { ) if (info != null) { - ChatActivity.launch(requireContext(), - bufferId = info.bufferId) + ChatActivity.launch(view.context, bufferId = info.bufferId) } else { viewModel.allBuffers.map { listOfNotNull(it.find { @@ -273,8 +273,7 @@ class UserInfoFragment : ServiceBoundFragment() { it.isNotEmpty() }.firstElement().toLiveData().observe(this, Observer { it?.firstOrNull()?.let { info -> - ChatActivity.launch(requireContext(), - bufferId = info.bufferId) + ChatActivity.launch(view.context, bufferId = info.bufferId) } }) @@ -282,22 +281,22 @@ class UserInfoFragment : ServiceBoundFragment() { networkId = user.networkId, type = Buffer_Type.of(Buffer_Type.StatusBuffer) )?.let { statusInfo -> - session.rpcHandler.sendInput(statusInfo, - "/query ${user.nick}") + session.rpcHandler.sendInput(statusInfo, "/query ${user.nick}") } } } } - actionIgnore.setOnClickListener { - Toast.makeText(requireContext(), "Not Implemented", Toast.LENGTH_SHORT).show() + actionIgnore.setOnClickListener { view -> + IgnoreListActivity.launch(view.context, + addRule = HostmaskHelper.build(user.nick, user.user, user.host)) } - actionMention.setOnClickListener { - ChatActivity.launch(requireContext(), sharedText = "${user.nick}: ") + actionMention.setOnClickListener { view -> + ChatActivity.launch(view.context, sharedText = "${user.nick}: ") } - actionWhois.setOnClickListener { + actionWhois.setOnClickListener { view -> viewModel.session { it.orNull()?.let { session -> session.bufferSyncer.find( diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt index 09b536b35aca9960bb0d185f0eeba16fcdbd7e51..0e7bcc20f8242a96e85e7ec6f80ddfd970eb4d83 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/AvatarHelper.kt @@ -77,7 +77,7 @@ object AvatarHelper { if (size != null) { return listOf( Avatar.IRCCloudAvatar( - "https://static.irccloud-cdn.com/avatar-redirect/s${truncateSize(size)}/$userId" + "https://static.irccloud-cdn.com/avatar-redirect/s$size/$userId" ) ) } @@ -99,7 +99,7 @@ object AvatarHelper { if (size == null) { "https://www.gravatar.com/avatar/$hash?d=404" } else { - "https://www.gravatar.com/avatar/$hash?d=404&s=${truncateSize(size)}" + "https://www.gravatar.com/avatar/$hash?d=404&s=${size}" } }.map { Avatar.GravatarAvatar(it) }.toList() } @@ -107,12 +107,10 @@ object AvatarHelper { private fun matrixFallback(realname: String, size: Int?): List<Avatar> { return if (Patterns.MATRIX_REALNAME.matches(realname)) { listOf( - Avatar.MatrixAvatar(realname, size?.let(this::truncateSize)) + Avatar.MatrixAvatar(realname, size) ) } else { emptyList() } } - - private fun truncateSize(originalSize: Int) = originalSize //if (originalSize > 72) 512 else 72 } diff --git a/app/src/main/res/layout/info_user.xml b/app/src/main/res/layout/info_user.xml index 18b446d118356f594f02d1bf863db8d411bcafb8..b33d185d3eb454ae40e2720826235e40d33c3bcc 100644 --- a/app/src/main/res/layout/info_user.xml +++ b/app/src/main/res/layout/info_user.xml @@ -115,10 +115,8 @@ style="@style/Widget.Info.ActionButton" android:contentDescription="@string/label_ignore_long" android:text="@string/label_ignore" - android:visibility="gone" tools:drawableTint="?colorTextSecondary" - tools:drawableTop="@drawable/ic_eye_off" - tools:visibility="visible" /> + tools:drawableTop="@drawable/ic_eye_off" /> <androidx.appcompat.widget.AppCompatButton android:id="@+id/action_whois" diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt index 5828730bae21d49e52e6bfc1f7406615f1cb191a..4edae3681d7ecc0614b0c617125a9e2920b80037 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/HostmaskHelper.kt @@ -40,4 +40,14 @@ object HostmaskHelper { return Triple(nick, user, host) } + + fun build(nick: String, user: String?, host: String?) = buildString { + append(nick) + if (!user.isNullOrEmpty()) { + append("!$user") + } + if (!host.isNullOrEmpty()) { + append("@$host") + } + } } diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt index e4fe918539107d0873ad199ba74930ac7d1b58f0..df2961ac9200786831235aaa691600f23ff0e880 100644 --- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt @@ -47,6 +47,7 @@ class MessageSerializerTest { "", "", "", + "", "" ) val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty()) @@ -74,6 +75,7 @@ class MessageSerializerTest { "", "", "", + "", "äẞ\u0000\uFFFF" ) val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty()) @@ -101,6 +103,7 @@ class MessageSerializerTest { "", "", "", + "", "" ) val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all()) @@ -128,6 +131,7 @@ class MessageSerializerTest { "äẞ\u0000\uFFFF", "äẞ\u0000\uFFFF", "äẞ\u0000\uFFFF", + "", "äẞ\u0000\uFFFF" ) val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all()) @@ -155,6 +159,7 @@ class MessageSerializerTest { "äẞ\u0000\uFFFF", "äẞ\u0000\uFFFF", "äẞ\u0000\uFFFF", + "", "äẞ\u0000\uFFFF" ) val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all()) diff --git a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt index d3cd088d8ad5c8045ccebcafa394196a6e4908ba..f189ecb73442c827626316bfc7bd15b9f52830a4 100644 --- a/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/util/irc/HostmaskHelperTest.kt @@ -39,6 +39,10 @@ class HostmaskHelperTest { HostmaskHelper.host("justJanne!kuschku@lithium.kuschku.de")) assertEquals("lithium.kuschku.de", HostmaskHelper.split("justJanne!kuschku@lithium.kuschku.de").third) + + assertEquals("justJanne!kuschku@lithium.kuschku.de", HostmaskHelper.build( + "justJanne", "kuschku", "lithium.kuschku.de" + )) } @Test @@ -57,6 +61,10 @@ class HostmaskHelperTest { HostmaskHelper.host("justJanne!~kuschku@lithium.kuschku.de")) assertEquals("lithium.kuschku.de", HostmaskHelper.split("justJanne!~kuschku@lithium.kuschku.de").third) + + assertEquals("justJanne!~kuschku@lithium.kuschku.de", HostmaskHelper.build( + "justJanne", "~kuschku", "lithium.kuschku.de" + )) } @Test @@ -75,6 +83,10 @@ class HostmaskHelperTest { HostmaskHelper.host("bärlauch!maße@flüge.de")) assertEquals("flüge.de", HostmaskHelper.split("bärlauch!maße@flüge.de").third) + + assertEquals("bärlauch!maße@flüge.de", HostmaskHelper.build( + "bärlauch", "maße", "flüge.de" + )) } @Test @@ -93,6 +105,10 @@ class HostmaskHelperTest { HostmaskHelper.host("irc.freenode.org")) assertEquals("", HostmaskHelper.split("irc.freenode.org").third) + + assertEquals("irc.freenode.org", HostmaskHelper.build( + "irc.freenode.org", "", "" + )) } @Test @@ -111,6 +127,10 @@ class HostmaskHelperTest { HostmaskHelper.host("@nick!~ident@example.org")) assertEquals("example.org", HostmaskHelper.split("@nick!~ident@example.org").third) + + assertEquals("@nick!~ident@example.org", HostmaskHelper.build( + "@nick", "~ident", "example.org" + )) } @Test @@ -129,6 +149,10 @@ class HostmaskHelperTest { HostmaskHelper.host("a@a!")) assertEquals("a!", HostmaskHelper.split("a@a!").third) + + assertEquals("a@a!", HostmaskHelper.build( + "a", "", "a!" + )) } @Test @@ -147,5 +171,9 @@ class HostmaskHelperTest { HostmaskHelper.host("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord")) assertEquals("discord", HostmaskHelper.split("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord").third) + + assertEquals("Gin_!Gin_!♡♅ƸӜƷ♅♡!@discord", HostmaskHelper.build( + "Gin_", "Gin_!♡♅ƸӜƷ♅♡!", "discord" + )) } }