From 86d8ff3c6802d15b68fb60c5a4500afc16108ef8 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 18 Jun 2022 20:16:49 +0300 Subject: [PATCH] Refactor AboutLinksPreference --- .../settings/utils/AboutLinksPreference.kt | 79 ++++++++++--------- .../org/koitharu/kotatsu/utils/ext/ViewExt.kt | 8 -- app/src/main/res/drawable/ic_4pda.xml | 4 +- app/src/main/res/drawable/ic_reddit.xml | 14 +++- 4 files changed, 54 insertions(+), 51 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/utils/AboutLinksPreference.kt b/app/src/main/java/org/koitharu/kotatsu/settings/utils/AboutLinksPreference.kt index b262c2859..42d7b70c9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/utils/AboutLinksPreference.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/utils/AboutLinksPreference.kt @@ -1,62 +1,67 @@ package org.koitharu.kotatsu.settings.utils +import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.util.AttributeSet -import androidx.core.content.ContextCompat.startActivity +import android.view.View +import androidx.appcompat.widget.TooltipCompat import androidx.core.net.toUri import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import org.koitharu.kotatsu.R -import org.koitharu.kotatsu.utils.ext.setTooltip +import org.koitharu.kotatsu.databinding.PreferenceAboutLinksBinding -class AboutLinksPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : - Preference(context, attrs) { +class AboutLinksPreference @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, +) : Preference(context, attrs), View.OnClickListener { init { layoutResource = R.layout.preference_about_links isSelectable = false + isPersistent = false } override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - holder.findViewById(R.id.btn_4pda).apply { - setTooltip(contentDescription.toString()) - setOnClickListener { openLink(resources.getString(R.string.url_forpda), contentDescription.toString()) } - } - holder.findViewById(R.id.btn_discord).apply { - setTooltip(contentDescription.toString()) - setOnClickListener { openLink(resources.getString(R.string.url_discord), contentDescription.toString()) } - } - holder.findViewById(R.id.btn_twitter).apply { - setTooltip(contentDescription.toString()) - setOnClickListener { openLink(resources.getString(R.string.url_twitter), contentDescription.toString()) } - } - holder.findViewById(R.id.btn_reddit).apply { - setTooltip(contentDescription.toString()) - setOnClickListener { openLink(resources.getString(R.string.url_reddit), contentDescription.toString()) } - } - holder.findViewById(R.id.btn_github).apply { - setTooltip(contentDescription.toString()) - setOnClickListener { - openLink( - resources.getString(R.string.url_github), - contentDescription.toString() - ) - } + val binding = PreferenceAboutLinksBinding.bind(holder.itemView) + arrayOf( + binding.btn4pda, + binding.btnDiscord, + binding.btnGithub, + binding.btnReddit, + binding.btnTwitter, + ).forEach { button -> + TooltipCompat.setTooltipText(button, button.contentDescription) + button.setOnClickListener(this) } } + override fun onClick(v: View) { + val urlResId = when (v.id) { + R.id.btn_4pda -> R.string.url_forpda + R.id.btn_discord -> R.string.url_discord + R.id.btn_twitter -> R.string.url_twitter + R.id.btn_reddit -> R.string.url_reddit + R.id.btn_github -> R.string.url_github + else -> return + } + openLink(v.context.getString(urlResId), v.contentDescription) + } + private fun openLink(url: String, title: CharSequence?) { - val intent = Intent(Intent.ACTION_VIEW) - intent.data = url.toUri() - context.startActivity( - if (title != null) { - Intent.createChooser(intent, title) - } else { - intent - } - ) + val intent = Intent(Intent.ACTION_VIEW, url.toUri()) + try { + context.startActivity( + if (title != null) { + Intent.createChooser(intent, title) + } else { + intent + } + ) + } catch (_: ActivityNotFoundException) { + } } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt index 56afd7cd1..67c30830e 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt @@ -156,12 +156,4 @@ fun ViewGroup.findViewsByType(clazz: Class): Sequence { } } } -} - -inline fun View.setTooltip(@StringRes stringRes: Int) { - setTooltip(context.getString(stringRes)) -} - -inline fun View.setTooltip(text: String) { - TooltipCompat.setTooltipText(this, text) } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_4pda.xml b/app/src/main/res/drawable/ic_4pda.xml index 6ce338a77..f0920f0d8 100644 --- a/app/src/main/res/drawable/ic_4pda.xml +++ b/app/src/main/res/drawable/ic_4pda.xml @@ -2,10 +2,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" + android:tint="?attr/colorControlNormal" android:viewportWidth="1024" android:viewportHeight="1024"> + android:pathData="M426.1,112 L112,545.6l0,247.7l486.7,0l0,118.8l313.3,0L912,112ZM599.5,312L599.5,577.6L390.1,577.6Z" /> diff --git a/app/src/main/res/drawable/ic_reddit.xml b/app/src/main/res/drawable/ic_reddit.xml index d56d46d7b..047683dbc 100644 --- a/app/src/main/res/drawable/ic_reddit.xml +++ b/app/src/main/res/drawable/ic_reddit.xml @@ -1,5 +1,11 @@ - - + +