diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemCardAdapter.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemCardAdapter.kt index 09e5967..6af265e 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemCardAdapter.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemCardAdapter.kt @@ -16,6 +16,7 @@ import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse import apps.amine.bou.readerforselfoss.persistence.database.AppDatabase import apps.amine.bou.readerforselfoss.themes.AppColors +import apps.amine.bou.readerforselfoss.utils.LinkOnTouchListener import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop @@ -65,6 +66,7 @@ class ItemCardAdapter( holder.mView.favButton.isLiked = itm.starred holder.mView.title.text = Html.fromHtml(itm.title) + holder.mView.title.setOnTouchListener(LinkOnTouchListener()) holder.mView.title.setLinkTextColor(appColors.colorAccent) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemListAdapter.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemListAdapter.kt index 291aff7..0a99e78 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemListAdapter.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemListAdapter.kt @@ -5,10 +5,14 @@ import android.content.Context import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import android.text.Html +import android.text.Spannable +import android.text.style.ClickableSpan import android.util.TypedValue import android.view.LayoutInflater +import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.widget.TextView import android.widget.Toast import apps.amine.bou.readerforselfoss.R import apps.amine.bou.readerforselfoss.api.selfoss.Item @@ -16,6 +20,7 @@ import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse import apps.amine.bou.readerforselfoss.persistence.database.AppDatabase import apps.amine.bou.readerforselfoss.themes.AppColors +import apps.amine.bou.readerforselfoss.utils.LinkOnTouchListener import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop @@ -67,6 +72,8 @@ class ItemListAdapter( holder.mView.title.text = Html.fromHtml(itm.title) + holder.mView.title.setOnTouchListener(LinkOnTouchListener()) + holder.mView.title.setLinkTextColor(appColors.colorAccent) holder.mView.sourceTitleAndDate.text = itm.sourceAndDateText() diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt index b6d2e3f..804dedc 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt @@ -6,8 +6,13 @@ import android.content.Context import android.content.Intent import android.graphics.BitmapFactory import android.net.Uri +import android.text.Spannable +import android.text.style.ClickableSpan import androidx.browser.customtabs.CustomTabsIntent import android.util.Patterns +import android.view.MotionEvent +import android.view.View +import android.widget.TextView import android.widget.Toast import apps.amine.bou.readerforselfoss.R import apps.amine.bou.readerforselfoss.ReaderActivity @@ -146,3 +151,40 @@ fun Context.openInBrowserAsNewTask(i: Item) { intent.data = Uri.parse(i.getLinkDecoded().toStringUriWithHttp()) startActivity(intent) } + +class LinkOnTouchListener: View.OnTouchListener { + override fun onTouch(v: View?, event: MotionEvent?): Boolean { + var ret = false + val widget: TextView = v as TextView + val text: CharSequence = widget.text + val stext = Spannable.Factory.getInstance().newSpannable(text) + + val action = event!!.action + + if (action == MotionEvent.ACTION_UP || + action == MotionEvent.ACTION_DOWN) { + var x: Float = event.x + var y: Float = event.y + + x -= widget.totalPaddingLeft + y -= widget.totalPaddingTop + + x += widget.scrollX + y += widget.scrollY + + val layout = widget.layout + val line = layout.getLineForVertical(y.toInt()) + val off = layout.getOffsetForHorizontal(line, x) + + val link = stext.getSpans(off, off, ClickableSpan::class.java) + + if (link.isNotEmpty()) { + if (action == MotionEvent.ACTION_UP) { + link[0].onClick(widget) + } + ret = true + } + } + return ret + } +} diff --git a/app/src/main/res/layout/card_item.xml b/app/src/main/res/layout/card_item.xml index f6f1de5..d8dcccb 100644 --- a/app/src/main/res/layout/card_item.xml +++ b/app/src/main/res/layout/card_item.xml @@ -69,7 +69,6 @@ app:layout_constraintLeft_toRightOf="@+id/sourceImage" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="@+id/sourceImage" - android:autoLink="web" tools:text="Titre" />