Ensure textview fields can be copy/pasted (#3707)
The Android libraries have a bug where a TextView can forget that it contains selectable text, can be pasted in to, etc. See https://issuetracker.google.com/issues/37095917 Fix this with an extension method that toggles the selectable state to re-enable it, and use this on the profile fields when editing an account. Fixes https://github.com/tuskyapp/Tusky/issues/3706
This commit is contained in:
parent
5fd532d69b
commit
84486c7f13
|
@ -22,6 +22,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.keylesspalace.tusky.databinding.ItemEditFieldBinding
|
import com.keylesspalace.tusky.databinding.ItemEditFieldBinding
|
||||||
import com.keylesspalace.tusky.entity.StringField
|
import com.keylesspalace.tusky.entity.StringField
|
||||||
import com.keylesspalace.tusky.util.BindingHolder
|
import com.keylesspalace.tusky.util.BindingHolder
|
||||||
|
import com.keylesspalace.tusky.util.fixTextSelection
|
||||||
|
|
||||||
class AccountFieldEditAdapter : RecyclerView.Adapter<BindingHolder<ItemEditFieldBinding>>() {
|
class AccountFieldEditAdapter : RecyclerView.Adapter<BindingHolder<ItemEditFieldBinding>>() {
|
||||||
|
|
||||||
|
@ -87,6 +88,10 @@ class AccountFieldEditAdapter : RecyclerView.Adapter<BindingHolder<ItemEditField
|
||||||
holder.binding.accountFieldValueText.doAfterTextChanged { newText ->
|
holder.binding.accountFieldValueText.doAfterTextChanged { newText ->
|
||||||
fieldData[holder.bindingAdapterPosition].second = newText.toString()
|
fieldData[holder.bindingAdapterPosition].second = newText.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure the textview contents are selectable
|
||||||
|
holder.binding.accountFieldNameText.fixTextSelection()
|
||||||
|
holder.binding.accountFieldValueText.fixTextSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
class MutableStringPair(var first: String, var second: String)
|
class MutableStringPair(var first: String, var second: String)
|
||||||
|
|
|
@ -18,6 +18,7 @@ package com.keylesspalace.tusky.util
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
|
|
||||||
|
@ -66,3 +67,14 @@ fun ViewPager2.reduceSwipeSensitivity() {
|
||||||
Log.w("reduceSwipeSensitivity", e)
|
Log.w("reduceSwipeSensitivity", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TextViews with an ancestor RecyclerView can forget that they are selectable. Toggling
|
||||||
|
* calls to [TextView.setTextIsSelectable] fixes this.
|
||||||
|
*
|
||||||
|
* @see https://issuetracker.google.com/issues/37095917
|
||||||
|
*/
|
||||||
|
fun TextView.fixTextSelection() {
|
||||||
|
setTextIsSelectable(false)
|
||||||
|
post { setTextIsSelectable(true) }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue