diff --git a/app/src/main/java/corewala/buran/ui/GemActivity.kt b/app/src/main/java/corewala/buran/ui/GemActivity.kt index cad302d..87bf9a2 100644 --- a/app/src/main/java/corewala/buran/ui/GemActivity.kt +++ b/app/src/main/java/corewala/buran/ui/GemActivity.kt @@ -286,6 +286,13 @@ class GemActivity : AppCompatActivity() { ) adapter.inlineIcons(showInlineIcons) + val showLinkButtons = prefs.getBoolean( + "show_link_buttons", + true + ) + adapter.linkButtons(showLinkButtons) + + val showInlineImages = prefs.getBoolean( "show_inline_images", true diff --git a/app/src/main/java/corewala/buran/ui/gemtext_adapter/AbstractGemtextAdapter.kt b/app/src/main/java/corewala/buran/ui/gemtext_adapter/AbstractGemtextAdapter.kt index c2de203..2a3b77c 100644 --- a/app/src/main/java/corewala/buran/ui/gemtext_adapter/AbstractGemtextAdapter.kt +++ b/app/src/main/java/corewala/buran/ui/gemtext_adapter/AbstractGemtextAdapter.kt @@ -11,6 +11,7 @@ abstract class AbstractGemtextAdapter( var showInlineIcons: Boolean = false var hideCodeBlocks: Boolean = false + var showLinkButtons: Boolean = false var showInlineImages: Boolean = false abstract fun render(lines: List) @@ -18,6 +19,7 @@ abstract class AbstractGemtextAdapter( abstract fun inlineIcons(visible: Boolean) abstract fun inlineImages(visible: Boolean) abstract fun hideCodeBlocks(hideCodeBlocks: Boolean) + abstract fun linkButtons(visible: Boolean) abstract fun inferTitle(): String? diff --git a/app/src/main/java/corewala/buran/ui/gemtext_adapter/GemtextAdapter.kt b/app/src/main/java/corewala/buran/ui/gemtext_adapter/GemtextAdapter.kt index 1172304..dd65264 100644 --- a/app/src/main/java/corewala/buran/ui/gemtext_adapter/GemtextAdapter.kt +++ b/app/src/main/java/corewala/buran/ui/gemtext_adapter/GemtextAdapter.kt @@ -142,8 +142,30 @@ class GemtextAdapter( if(linkParts.size > 1) linkName = linkParts[1] val displayText = linkName - holder.itemView.gemtext_text_link.text = displayText - holder.itemView.gemtext_text_link.paint.isUnderlineText = true + + when { + showLinkButtons -> { + holder.itemView.gemtext_text_link.visible(false) + holder.itemView.gemtext_link_button.visible(true) + holder.itemView.gemtext_link_button.text = displayText + } else -> { + holder.itemView.gemtext_link_button.visible(false) + holder.itemView.gemtext_text_link.visible(true) + holder.itemView.gemtext_text_link.text = displayText + holder.itemView.gemtext_text_link.paint.isUnderlineText = true + } + } + + when { + showInlineIcons && linkParts.first().startsWith("http") -> { + holder.itemView.gemtext_text_link.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.vector_open_browser, 0) + holder.itemView.gemtext_link_button.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.vector_open_browser, 0) + } + else -> { + holder.itemView.gemtext_text_link.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0) + holder.itemView.gemtext_link_button.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0) + } + } when { showInlineIcons && linkParts.first().startsWith("http") -> holder.itemView.gemtext_text_link.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.vector_open_browser, 0) @@ -154,7 +176,6 @@ class GemtextAdapter( val uri = getUri(lines[holder.adapterPosition]) println("User clicked link: $uri") onLink(uri, false, holder.adapterPosition) - } holder.itemView.gemtext_text_link.setOnLongClickListener { val uri = getUri(lines[holder.adapterPosition]) @@ -162,6 +183,17 @@ class GemtextAdapter( onLink(uri, true, holder.adapterPosition) true } + holder.itemView.gemtext_link_button.setOnClickListener { + val uri = getUri(lines[holder.adapterPosition]) + println("User clicked link: $uri") + onLink(uri, false, holder.adapterPosition) + } + holder.itemView.gemtext_link_button.setOnLongClickListener { + val uri = getUri(lines[holder.adapterPosition]) + println("User long-clicked link: $uri") + onLink(uri, true, holder.adapterPosition) + true + } } is GmiViewHolder.ImageLink -> { @@ -171,8 +203,20 @@ class GemtextAdapter( if(linkParts.size > 1) linkName = linkParts[1] val displayText = linkName - holder.itemView.gemtext_text_link.text = displayText - holder.itemView.gemtext_text_link.paint.isUnderlineText = true + + when { + showLinkButtons -> { + holder.itemView.gemtext_text_link.visible(false) + holder.itemView.gemtext_link_button.visible(true) + holder.itemView.gemtext_link_button.text = displayText + } else -> { + holder.itemView.gemtext_link_button.visible(false) + holder.itemView.gemtext_text_link.visible(true) + holder.itemView.gemtext_text_link.text = displayText + holder.itemView.gemtext_text_link.paint.isUnderlineText = true + } + } + holder.itemView.gemtext_text_link.setOnClickListener { val uri = getUri(lines[holder.adapterPosition]) println("User clicked link: $uri") @@ -184,6 +228,17 @@ class GemtextAdapter( onLink(uri, true, holder.adapterPosition) true } + holder.itemView.gemtext_link_button.setOnClickListener { + val uri = getUri(lines[holder.adapterPosition]) + println("User clicked link: $uri") + onLink(uri, false, holder.adapterPosition) + } + holder.itemView.gemtext_link_button.setOnLongClickListener { + val uri = getUri(lines[holder.adapterPosition]) + println("User long-clicked link: $uri") + onLink(uri, true, holder.adapterPosition) + true + } holder.itemView.gemtext_inline_image.setOnClickListener { val uri = getUri(lines[holder.adapterPosition]) println("User clicked image: $uri") @@ -213,8 +268,14 @@ class GemtextAdapter( } when { - showInlineIcons -> holder.itemView.gemtext_text_link.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.vector_photo, 0) - else -> holder.itemView.gemtext_text_link.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + showInlineIcons -> { + holder.itemView.gemtext_text_link.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.vector_photo, 0) + holder.itemView.gemtext_link_button.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.vector_photo, 0) + } + else -> { + holder.itemView.gemtext_text_link.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + holder.itemView.gemtext_link_button.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0) + } } } } @@ -268,6 +329,11 @@ class GemtextAdapter( notifyDataSetChanged() } + override fun linkButtons(visible: Boolean){ + this.showLinkButtons = visible + notifyDataSetChanged() + } + override fun inlineImages(visible: Boolean){ this.showInlineImages = visible notifyDataSetChanged() diff --git a/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt b/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt index 6341479..2097153 100644 --- a/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/corewala/buran/ui/settings/SettingsFragment.kt @@ -197,6 +197,13 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang showInlineIconsPreference.key = "show_inline_icons" showInlineIconsPreference.title = getString(R.string.show_inline_icons) accessibilityCategory.addPreference(showInlineIconsPreference) + + //Accessibility - full-width buttons + val showLinkButtonsPreference = SwitchPreferenceCompat(context) + showLinkButtonsPreference.setDefaultValue(false) + showLinkButtonsPreference.key = "show_link_buttons" + showLinkButtonsPreference.title = (R.string.show_link_buttons.toString()) + accessibilityCategory.addPreference(showLinkButtonsPreference) } private fun buildClientCertificateSection(context: Context?, appCategory: PreferenceCategory) { diff --git a/app/src/main/res/layout/gemtext_image_button.xml b/app/src/main/res/layout/gemtext_image_button.xml deleted file mode 100644 index 47301ce..0000000 --- a/app/src/main/res/layout/gemtext_image_button.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/gemtext_image_link.xml b/app/src/main/res/layout/gemtext_image_link.xml index 9b005f3..6c1992c 100644 --- a/app/src/main/res/layout/gemtext_image_link.xml +++ b/app/src/main/res/layout/gemtext_image_link.xml @@ -5,20 +5,45 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> - + + + + + + + android:layout_below="@+id/link_frame"> + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77bd699..0db58a0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -68,6 +68,7 @@ Historique vidé Cache d\'exécution vidé Icônes de lien en ligne + Boutons de lien Vous n\'avez encore aucun marque-pages Importer des marque-pages Exporter des marque-pages diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e6d9ea..88148d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,6 +68,7 @@ History cleared Runtime cache cleared Inline link icons + Show link buttons You don\'t have any bookmarks yet Import bookmarks Export bookmarks