From d8772204e0b86c4c2b0ac859266b859f616ba1a5 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Sat, 31 May 2025 16:01:24 +1000 Subject: [PATCH] feat(Scout): add proper icons for suggestion entries --- plugins/Scout/src/main/AndroidManifest.xml | 2 +- .../kotlin/moe/lava/awoocord/scout/Scout.kt | 66 ++++++++++++++----- .../lava/awoocord/scout/ui/ScoutResource.kt | 28 ++++++-- .../main/res/drawable/baseline_clock_24.xml | 7 ++ .../drawable/baseline_do_disturb_on_24.xml | 5 ++ .../drawable/baseline_forward_to_inbox_24.xml | 5 ++ .../main/res/drawable/baseline_poll_24.xml | 5 ++ .../main/res/drawable/baseline_update_24.xml | 5 ++ 8 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 plugins/Scout/src/main/res/drawable/baseline_clock_24.xml create mode 100644 plugins/Scout/src/main/res/drawable/baseline_do_disturb_on_24.xml create mode 100644 plugins/Scout/src/main/res/drawable/baseline_forward_to_inbox_24.xml create mode 100644 plugins/Scout/src/main/res/drawable/baseline_poll_24.xml create mode 100644 plugins/Scout/src/main/res/drawable/baseline_update_24.xml diff --git a/plugins/Scout/src/main/AndroidManifest.xml b/plugins/Scout/src/main/AndroidManifest.xml index a45f28d..bc69472 100644 --- a/plugins/Scout/src/main/AndroidManifest.xml +++ b/plugins/Scout/src/main/AndroidManifest.xml @@ -1,2 +1,2 @@ - + diff --git a/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/Scout.kt b/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/Scout.kt index 8b130d8..41600f3 100644 --- a/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/Scout.kt +++ b/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/Scout.kt @@ -2,7 +2,7 @@ package moe.lava.awoocord.scout import android.content.Context import android.content.res.Resources -import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import com.aliucord.Utils import com.aliucord.annotations.AliucordPlugin import com.aliucord.entities.Plugin @@ -11,6 +11,7 @@ import com.aliucord.patcher.after import com.aliucord.patcher.before import com.aliucord.patcher.instead import com.discord.BuildConfig +import com.discord.databinding.WidgetSearchSuggestionsItemHasBinding import com.discord.restapi.RequiredHeadersInterceptor import com.discord.restapi.RequiredHeadersInterceptor.HeadersProvider import com.discord.restapi.RestAPIBuilder @@ -19,6 +20,8 @@ import com.discord.simpleast.core.parser.Parser import com.discord.simpleast.core.parser.Rule import com.discord.stores.StoreSearch import com.discord.stores.StoreSearchInput +import com.discord.utilities.mg_recycler.MGRecyclerDataPayload +import com.discord.utilities.mg_recycler.SingleTypePayload import com.discord.utilities.rest.RestAPI.AppHeadersProvider import com.discord.utilities.search.network.`SearchFetcher$getRestObservable$3` import com.discord.utilities.search.network.SearchQuery @@ -39,6 +42,7 @@ import com.discord.widgets.search.suggestions.WidgetSearchSuggestionsAdapter import com.franmontiel.persistentcookiejar.PersistentCookieJar import com.franmontiel.persistentcookiejar.cache.SetCookieCache import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor +import com.lytefast.flexinput.R import moe.lava.awoocord.scout.api.SearchAPIInterface import moe.lava.awoocord.scout.parsing.DateNode import moe.lava.awoocord.scout.parsing.SimpleParserRule @@ -52,10 +56,16 @@ import java.util.regex.Pattern @AliucordPlugin(requiresRestart = false) @Suppress("unused", "unchecked_cast") class Scout : Plugin() { + lateinit var scoutRes: ScoutResource lateinit var ssProvider: ScoutSearchStringProvider lateinit var searchApi: SearchAPIInterface + init { + needsResources = true + } + override fun load(context: Context) { + scoutRes = ScoutResource(resources) ssProvider = ScoutSearchStringProvider(context) searchApi = buildSearchApi(context) } @@ -213,15 +223,34 @@ class Scout : Plugin() { } // Patch to set icons - patcher.before( - "getIconRes", - HasAnswerOption::class.java + patcher.before( + "onConfigure", + Int::class.java, + MGRecyclerDataPayload::class.java, ) { param -> - val type = param.args[0] as HasAnswerOption - if (type == HasAnswerOptionExtension.POLL) - param.result = 0x7f08032e - else if (type == HasAnswerOptionExtension.SNAPSHOT) - param.result = 0x7f08032e + val suggestion = (param.args[1] as SingleTypePayload).data + val option = suggestion.hasAnswerOption + + val resID = when (option) { + HasAnswerOptionExtension.POLL -> "baseline_poll_24" + HasAnswerOptionExtension.SNAPSHOT -> "baseline_forward_to_inbox_24" + else -> null + } + + resID?.let { + val bindingField = this::class.java.getDeclaredField("binding") + bindingField.isAccessible = true + val binding = bindingField.get(this) as WidgetSearchSuggestionsItemHasBinding + + binding.d.text = option.getLocalizedInputText(null) + binding.b.setOnClickListener { + WidgetSearchSuggestionsAdapter.HasViewHolder.`access$getAdapter$p`(this).onHasClicked.invoke(option) + } + + binding.c.setImageDrawable(scoutRes.getDrawable(it)) + + param.result = null + } } patcher.instead( @@ -466,12 +495,19 @@ class Scout : Plugin() { FilterType::class.java ) { param -> val type = param.args[1] as FilterType - if (type in FilterTypeExtension.dates) - param.result = ContextCompat.getDrawable(context, ScoutResource.DRAWABLE_IC_CLOCK) - if (type == FilterTypeExtension.SORT) - param.result = ContextCompat.getDrawable(context, ScoutResource.DRAWABLE_IC_SORT_WHITE) - if (type == FilterTypeExtension.EXCLUDE) - param.result = ContextCompat.getDrawable(context, ScoutResource.DRAWABLE_IC_SORT_WHITE) + val (isDiscord, resID) = when (type) { + FilterTypeExtension.BEFORE -> true to R.e.ic_history_white_24dp + FilterTypeExtension.DURING -> false to scoutRes.getDrawableId("baseline_clock_24") + FilterTypeExtension.AFTER -> false to scoutRes.getDrawableId("baseline_update_24") + FilterTypeExtension.SORT -> true to R.e.ic_sort_white_24dp + FilterTypeExtension.EXCLUDE -> false to scoutRes.getDrawableId("baseline_do_disturb_on_24") + else -> false to null + } + + resID?.let { + val res = if (isDiscord) context.resources else resources + param.result = ResourcesCompat.getDrawable(res, it, null) + } } // Patch for retrieving sample filter answer/placeholder diff --git a/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/ui/ScoutResource.kt b/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/ui/ScoutResource.kt index 0582780..d012d0f 100644 --- a/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/ui/ScoutResource.kt +++ b/plugins/Scout/src/main/kotlin/moe/lava/awoocord/scout/ui/ScoutResource.kt @@ -1,9 +1,25 @@ package moe.lava.awoocord.scout.ui -object ScoutResource { - const val SORT_FILTER = 0xfffffff0.toInt() - const val SORT_ANSWER = 0xfffffff1.toInt() - const val EXCLUDE_FILTER = 0xfffffff2.toInt() - const val DRAWABLE_IC_CLOCK = 0x7f0803bb - const val DRAWABLE_IC_SORT_WHITE =0x7f080586 +import android.content.res.Resources +import androidx.annotation.DrawableRes +import androidx.core.content.res.ResourcesCompat + +class ScoutResource(private val resources: Resources) { + companion object { + const val SORT_FILTER = 0xfffffff0.toInt() + const val SORT_ANSWER = 0xfffffff1.toInt() + const val EXCLUDE_FILTER = 0xfffffff2.toInt() + } + + fun getId(name: String, type: String) = + resources.getIdentifier(name, type, "moe.lava.awoocord.scout") + + @DrawableRes fun getDrawableId(name: String) = + getId(name, "drawable") + + fun getDrawable(@DrawableRes id: Int) = + ResourcesCompat.getDrawable(resources, id, null) + + fun getDrawable(name: String) = + getDrawable(getDrawableId(name)) } diff --git a/plugins/Scout/src/main/res/drawable/baseline_clock_24.xml b/plugins/Scout/src/main/res/drawable/baseline_clock_24.xml new file mode 100644 index 0000000..c95f574 --- /dev/null +++ b/plugins/Scout/src/main/res/drawable/baseline_clock_24.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/Scout/src/main/res/drawable/baseline_do_disturb_on_24.xml b/plugins/Scout/src/main/res/drawable/baseline_do_disturb_on_24.xml new file mode 100644 index 0000000..2c537f4 --- /dev/null +++ b/plugins/Scout/src/main/res/drawable/baseline_do_disturb_on_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/plugins/Scout/src/main/res/drawable/baseline_forward_to_inbox_24.xml b/plugins/Scout/src/main/res/drawable/baseline_forward_to_inbox_24.xml new file mode 100644 index 0000000..2ae86b4 --- /dev/null +++ b/plugins/Scout/src/main/res/drawable/baseline_forward_to_inbox_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/plugins/Scout/src/main/res/drawable/baseline_poll_24.xml b/plugins/Scout/src/main/res/drawable/baseline_poll_24.xml new file mode 100644 index 0000000..80380fb --- /dev/null +++ b/plugins/Scout/src/main/res/drawable/baseline_poll_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/plugins/Scout/src/main/res/drawable/baseline_update_24.xml b/plugins/Scout/src/main/res/drawable/baseline_update_24.xml new file mode 100644 index 0000000..579fa47 --- /dev/null +++ b/plugins/Scout/src/main/res/drawable/baseline_update_24.xml @@ -0,0 +1,5 @@ + + + + +