3434: Make description dialog (text field) more usable (#3458)

* 3434: Make description dialog (text field) more usable

* 3434: Close dialog on back button

* 3434: Use a TextInputLayout

* 3434: Adapt German plurals text

* 3434: Remove unused id

* 3434: Disable counter officially
This commit is contained in:
UlrichKu 2023-03-24 18:21:56 +01:00 committed by GitHub
parent de5b72e472
commit 9e66ccf4a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 34 deletions

View file

@ -21,76 +21,55 @@ import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.text.InputFilter import android.text.InputFilter
import android.text.InputType
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import android.widget.EditText import android.widget.EditText
import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import at.connyduck.sparkbutton.helpers.Utils
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import com.github.chrisbanes.photoview.PhotoView
import com.keylesspalace.tusky.R import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.databinding.DialogImageDescriptionBinding
// https://github.com/tootsuite/mastodon/blob/c6904c0d3766a2ea8a81ab025c127169ecb51373/app/models/media_attachment.rb#L32 // https://github.com/tootsuite/mastodon/blob/c6904c0d3766a2ea8a81ab025c127169ecb51373/app/models/media_attachment.rb#L32
private const val MEDIA_DESCRIPTION_CHARACTER_LIMIT = 1500 private const val MEDIA_DESCRIPTION_CHARACTER_LIMIT = 1500
class CaptionDialog : DialogFragment() { class CaptionDialog : DialogFragment() {
private lateinit var listener: Listener private lateinit var listener: Listener
private lateinit var input: EditText private lateinit var input: EditText
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val context = requireContext() val context = requireContext()
val dialogLayout = LinearLayout(context)
val padding = Utils.dpToPx(context, 8)
dialogLayout.setPadding(padding, padding, padding, padding)
dialogLayout.orientation = LinearLayout.VERTICAL val binding = DialogImageDescriptionBinding.inflate(layoutInflater)
val imageView = PhotoView(context).apply {
maximumScale = 6f
}
val margin = Utils.dpToPx(context, 4) input = binding.imageDescriptionText
dialogLayout.addView(imageView) val imageView = binding.imageDescriptionView
(imageView.layoutParams as LinearLayout.LayoutParams).weight = 1f imageView.maximumScale = 6f
imageView.layoutParams.height = 0
(imageView.layoutParams as LinearLayout.LayoutParams).setMargins(0, margin, 0, 0)
input = EditText(context)
input.hint = resources.getQuantityString( input.hint = resources.getQuantityString(
R.plurals.hint_describe_for_visually_impaired, R.plurals.hint_describe_for_visually_impaired,
MEDIA_DESCRIPTION_CHARACTER_LIMIT, MEDIA_DESCRIPTION_CHARACTER_LIMIT,
MEDIA_DESCRIPTION_CHARACTER_LIMIT MEDIA_DESCRIPTION_CHARACTER_LIMIT
) )
dialogLayout.addView(input)
(input.layoutParams as LinearLayout.LayoutParams).setMargins(margin, margin, margin, margin)
input.setLines(2)
input.inputType = (
InputType.TYPE_CLASS_TEXT
or InputType.TYPE_TEXT_FLAG_MULTI_LINE
or InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
)
input.filters = arrayOf(InputFilter.LengthFilter(MEDIA_DESCRIPTION_CHARACTER_LIMIT)) input.filters = arrayOf(InputFilter.LengthFilter(MEDIA_DESCRIPTION_CHARACTER_LIMIT))
input.setText(arguments?.getString(EXISTING_DESCRIPTION_ARG)) input.setText(arguments?.getString(EXISTING_DESCRIPTION_ARG))
val localId = arguments?.getInt(LOCAL_ID_ARG) ?: error("Missing localId") val localId = arguments?.getInt(LOCAL_ID_ARG) ?: error("Missing localId")
val dialog = AlertDialog.Builder(context) val dialog = AlertDialog.Builder(context)
.setView(dialogLayout) .setView(binding.root)
.setPositiveButton(android.R.string.ok) { _, _ -> .setPositiveButton(android.R.string.ok) { _, _ ->
listener.onUpdateDescription(localId, input.text.toString()) listener.onUpdateDescription(localId, input.text.toString())
} }
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.create() .create()
isCancelable = false isCancelable = true
val window = dialog.window val window = dialog.window
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="0dp">
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/imageDescriptionView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:contentDescription="@string/post_media_image"/>
<com.google.android.material.textfield.TextInputLayout
style="@style/TuskyTextInput"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginStart="?dialogPreferredPadding"
android:layout_marginTop="?dialogPreferredPadding"
android:layout_marginEnd="?dialogPreferredPadding"
app:hintEnabled="false"
app:counterEnabled="false"
app:counterTextColor="?android:textColorTertiary">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/imageDescriptionText"
android:inputType="textCapSentences|textMultiLine|textAutoCorrect"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="@string/hint_description"
android:gravity="start"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

View file

@ -132,6 +132,7 @@
<string name="hint_display_name">Anzeigename</string> <string name="hint_display_name">Anzeigename</string>
<string name="hint_note">Über mich</string> <string name="hint_note">Über mich</string>
<string name="hint_search">Suchen </string> <string name="hint_search">Suchen </string>
<string name="hint_description">Beschreibung</string>
<string name="hint_media_description_missing">Medien sollten Beschreibungen haben.</string> <string name="hint_media_description_missing">Medien sollten Beschreibungen haben.</string>
<string name="search_no_results">Keine Ergebnisse</string> <string name="search_no_results">Keine Ergebnisse</string>
<string name="label_quick_reply">Antworten </string> <string name="label_quick_reply">Antworten </string>
@ -262,10 +263,8 @@
<string name="compose_active_account_description">Veröffentlichen als %1$s</string> <string name="compose_active_account_description">Veröffentlichen als %1$s</string>
<string name="error_failed_set_caption">Fehler beim Speichern der Beschreibung</string> <string name="error_failed_set_caption">Fehler beim Speichern der Beschreibung</string>
<plurals name="hint_describe_for_visually_impaired"> <plurals name="hint_describe_for_visually_impaired">
<item quantity="one">Für Mensch mit Sehbehinderung beschreiben <item quantity="one">Inhalte für Mensch mit Sehbehinderung beschreiben (%d Zeichen)</item>
\n(%d Zeichen)</item> <item quantity="other">Inhalte für Menschen mit Sehbehinderung beschreiben (%d Zeichen)</item>
<item quantity="other">Für Menschen mit Sehbehinderung beschreiben
\n(%d Zeichen)</item>
</plurals> </plurals>
<string name="action_set_caption">Beschreibung eingeben</string> <string name="action_set_caption">Beschreibung eingeben</string>
<string name="action_remove">Entfernen</string> <string name="action_remove">Entfernen</string>
@ -665,4 +664,3 @@
Zum Beispiel die Lokale Timeline deiner Instanz [iconics gmd_group]. Oder du kannst nach ihrem Namen suchen Zum Beispiel die Lokale Timeline deiner Instanz [iconics gmd_group]. Oder du kannst nach ihrem Namen suchen
[iconics gmd_search]; suche z. B. nach Tusky, um unseren Mastodon-Account zu finden.</string> [iconics gmd_search]; suche z. B. nach Tusky, um unseren Mastodon-Account zu finden.</string>
</resources> </resources>

View file

@ -230,6 +230,7 @@
<string name="hint_display_name">Display name</string> <string name="hint_display_name">Display name</string>
<string name="hint_note">Bio</string> <string name="hint_note">Bio</string>
<string name="hint_search">Search…</string> <string name="hint_search">Search…</string>
<string name="hint_description">Description</string>
<string name="hint_media_description_missing">Media should have a description.</string> <string name="hint_media_description_missing">Media should have a description.</string>
<string name="search_no_results">No results</string> <string name="search_no_results">No results</string>
@ -406,6 +407,7 @@
<string name="post_share_content">Share content of post</string> <string name="post_share_content">Share content of post</string>
<string name="post_share_link">Share link to post</string> <string name="post_share_link">Share link to post</string>
<string name="post_media_image">Image</string>
<string name="post_media_images">Images</string> <string name="post_media_images">Images</string>
<string name="post_media_video">Video</string> <string name="post_media_video">Video</string>
<string name="post_media_audio">Audio</string> <string name="post_media_audio">Audio</string>
@ -472,7 +474,7 @@
<string name="error_failed_set_caption">Failed to set caption</string> <string name="error_failed_set_caption">Failed to set caption</string>
<string name="error_failed_set_focus">Failed to set focus point</string> <string name="error_failed_set_focus">Failed to set focus point</string>
<plurals name="hint_describe_for_visually_impaired"> <plurals name="hint_describe_for_visually_impaired">
<item quantity="other">Describe for visually impaired\n(%d character limit)</item> <item quantity="other">Describe contents for visually impaired (%d character limit)</item>
</plurals> </plurals>
<string name="set_focus_description">Tap or drag the circle to choose the focal point which will always be visible in thumbnails.</string> <string name="set_focus_description">Tap or drag the circle to choose the focal point which will always be visible in thumbnails.</string>
<string name="action_set_caption">Set caption</string> <string name="action_set_caption">Set caption</string>