From 28c72ce29c784875a18cf99935475e35716d7054 Mon Sep 17 00:00:00 2001 From: Corewala Date: Mon, 17 Jan 2022 18:45:45 -0500 Subject: [PATCH] Added link buttons --- .../java/corewala/buran/ui/GemActivity.kt | 7 ++ .../gemtext_adapter/AbstractGemtextAdapter.kt | 2 + .../ui/gemtext_adapter/GemtextAdapter.kt | 83 ++++++++++++++++--- .../buran/ui/settings/SettingsFragment.kt | 7 ++ .../main/res/layout/gemtext_image_button.xml | 46 ---------- .../main/res/layout/gemtext_image_link.xml | 57 +++++++++---- app/src/main/res/layout/gemtext_link.xml | 58 +++++++++---- .../main/res/layout/gemtext_link_button.xml | 29 ------- 8 files changed, 168 insertions(+), 121 deletions(-) delete mode 100644 app/src/main/res/layout/gemtext_image_button.xml delete mode 100644 app/src/main/res/layout/gemtext_link_button.xml diff --git a/app/src/main/java/corewala/buran/ui/GemActivity.kt b/app/src/main/java/corewala/buran/ui/GemActivity.kt index cad302d..96a4255 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 e7bef51..254a5ee 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 @@ -8,11 +8,13 @@ import android.view.ViewGroup import androidx.core.view.isVisible import kotlinx.android.synthetic.main.gemtext_code_block.view.* import kotlinx.android.synthetic.main.gemtext_image_link.view.* -import kotlinx.android.synthetic.main.gemtext_link.view.gemtext_text_link import kotlinx.android.synthetic.main.gemtext_text.view.* import corewala.buran.R import corewala.endsWithImage import corewala.visible +import kotlinx.android.synthetic.main.gemtext_image_link.view.gemtext_link_button +import kotlinx.android.synthetic.main.gemtext_link.view.* +import kotlinx.android.synthetic.main.gemtext_link.view.gemtext_text_link import java.net.URI class GemtextAdapter( @@ -142,19 +144,35 @@ 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 { - showInlineIcons && linkParts.first().startsWith("http") -> holder.itemView.gemtext_text_link.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.vector_open_browser, 0) - else -> holder.itemView.gemtext_text_link.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0) + 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) + } } holder.itemView.gemtext_text_link.setOnClickListener { 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 +180,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 +200,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 +225,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") @@ -215,8 +267,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) + } } } } @@ -270,6 +328,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..ff1c8df 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 = getString(R.string.show_link_buttons) + 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..207e374 100644 --- a/app/src/main/res/layout/gemtext_image_link.xml +++ b/app/src/main/res/layout/gemtext_image_link.xml @@ -1,24 +1,24 @@ + android:layout_width="wrap_content" + android:layout_height="wrap_content" + 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/layout/gemtext_link.xml b/app/src/main/res/layout/gemtext_link.xml index ae90351..775941c 100644 --- a/app/src/main/res/layout/gemtext_link.xml +++ b/app/src/main/res/layout/gemtext_link.xml @@ -1,23 +1,45 @@ - + + android:id="@+id/gemtext_text_link" + android:textColor="@color/stroke" + android:layout_marginLeft="@dimen/screen_margin" + android:layout_marginRight="@dimen/screen_margin" + tools:text="a link" + android:layout_marginTop="@dimen/default_margin_small" + android:layout_marginBottom="@dimen/default_margin_small" + android:textSize="@dimen/default_text_size" + android:clickable="true" + android:focusable="true" + android:background="?android:attr/selectableItemBackground" + android:drawablePadding="4dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/gemtext_link_button.xml b/app/src/main/res/layout/gemtext_link_button.xml deleted file mode 100644 index 9a37798..0000000 --- a/app/src/main/res/layout/gemtext_link_button.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - \ No newline at end of file