Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,5 @@ class FieldEditLineTest : NoteEditorTest() {
return reference.get()
}
}

val FieldEditLine.editText get() = binding.editText
105 changes: 45 additions & 60 deletions AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,20 @@ import android.view.ActionMode
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageButton
import android.widget.TextView
import androidx.annotation.DrawableRes
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.os.ParcelCompat
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
import com.ichi2.anki.databinding.CardMultimediaEditlineBinding
import com.ichi2.compat.setTooltipTextCompat
import com.ichi2.ui.AnimationUtil.collapseView
import com.ichi2.ui.AnimationUtil.expandView
import java.util.Locale

@KotlinCleanup("replace _name with `field`")
class FieldEditLine : FrameLayout {
val editText: FieldEditText
private val label: TextView
val toggleSticky: ImageButton
val mediaButton: ImageButton
private val expandButton: ImageButton
val binding = CardMultimediaEditlineBinding.inflate(LayoutInflater.from(context), this, true)
private var _name: String? = null
private var expansionState = ExpansionState.EXPANDED

Expand All @@ -60,47 +54,38 @@ class FieldEditLine : FrameLayout {
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

init {
LayoutInflater.from(context).inflate(R.layout.card_multimedia_editline, this, true)
editText = findViewById(R.id.id_note_editText)
label = findViewById(R.id.id_label)
toggleSticky =
findViewById<ImageButton>(R.id.id_toggle_sticky_button).apply {
setTooltipTextCompat(CollectionManager.TR.editingToggleSticky())
}
mediaButton = findViewById(R.id.id_media_button)
val constraintLayout: ConstraintLayout = findViewById(R.id.constraint_layout)
expandButton = findViewById(R.id.id_expand_button)
binding.toggleSticky.setTooltipTextCompat(CollectionManager.TR.editingToggleSticky())
// 7433 -
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
editText.id = View.generateViewId()
toggleSticky.id = View.generateViewId()
mediaButton.id = View.generateViewId()
expandButton.id = View.generateViewId()
editText.nextFocusForwardId = toggleSticky.id
toggleSticky.nextFocusForwardId = mediaButton.id
mediaButton.nextFocusForwardId = expandButton.id
binding.editText.id = View.generateViewId()
binding.toggleSticky.id = View.generateViewId()
binding.mediaButton.id = View.generateViewId()
binding.expandButton.id = View.generateViewId()
binding.editText.nextFocusForwardId = binding.toggleSticky.id
binding.toggleSticky.nextFocusForwardId = binding.mediaButton.id
binding.mediaButton.nextFocusForwardId = binding.expandButton.id
ConstraintSet().apply {
clone(constraintLayout)
connect(toggleSticky.id, ConstraintSet.END, mediaButton.id, ConstraintSet.START)
connect(mediaButton.id, ConstraintSet.END, expandButton.id, ConstraintSet.START)
applyTo(constraintLayout)
clone(binding.constraintLayout)
connect(binding.toggleSticky.id, ConstraintSet.END, binding.mediaButton.id, ConstraintSet.START)
connect(binding.mediaButton.id, ConstraintSet.END, binding.expandButton.id, ConstraintSet.START)
applyTo(binding.constraintLayout)
}
}
setExpanderBackgroundImage()
expandButton.setOnClickListener { toggleExpansionState() }
editText.init()
label.setPaddingRelative(getDensityAdjustedValue(context, 3.4f).toInt(), 0, 0, 0)
binding.expandButton.setOnClickListener { toggleExpansionState() }
binding.editText.init()
binding.label.setPaddingRelative(getDensityAdjustedValue(context, 3.4f).toInt(), 0, 0, 0)
}

private fun toggleExpansionState() {
expansionState =
when (expansionState) {
ExpansionState.EXPANDED -> {
collapseView(editText, enableAnimation)
collapseView(binding.editText, enableAnimation)
ExpansionState.COLLAPSED
}
ExpansionState.COLLAPSED -> {
expandView(editText, enableAnimation)
expandView(binding.editText, enableAnimation)
ExpansionState.EXPANDED
}
}
Expand All @@ -109,8 +94,8 @@ class FieldEditLine : FrameLayout {

private fun setExpanderBackgroundImage() {
when (expansionState) {
ExpansionState.COLLAPSED -> expandButton.background = getBackgroundImage(R.drawable.ic_expand_more_black_24dp_xml)
ExpansionState.EXPANDED -> expandButton.background = getBackgroundImage(R.drawable.ic_expand_less_black_24dp)
ExpansionState.COLLAPSED -> binding.expandButton.background = getBackgroundImage(R.drawable.ic_expand_more_black_24dp_xml)
ExpansionState.EXPANDED -> binding.expandButton.background = getBackgroundImage(R.drawable.ic_expand_less_black_24dp)
}
}

Expand All @@ -119,37 +104,37 @@ class FieldEditLine : FrameLayout {
): Drawable? = VectorDrawableCompat.create(this.resources, idRes, context.theme)

fun setActionModeCallbacks(callback: ActionMode.Callback?) {
editText.customSelectionActionModeCallback = callback
editText.customInsertionActionModeCallback = callback
binding.editText.customSelectionActionModeCallback = callback
binding.editText.customInsertionActionModeCallback = callback
}

fun setHintLocale(hintLocale: Locale?) {
if (hintLocale != null) {
editText.setHintLocale(hintLocale)
binding.editText.setHintLocale(hintLocale)
}
}

fun setContent(
content: String?,
replaceNewline: Boolean,
) {
editText.setContent(content, replaceNewline)
binding.editText.setContent(content, replaceNewline)
}

fun setOrd(i: Int) {
editText.ord = i
binding.editText.ord = i
}

var name: String?
get() = _name
set(name) {
_name = name
editText.contentDescription = name
label.text = name
binding.editText.contentDescription = name
binding.label.text = name
}

val lastViewInTabOrder: View
get() = expandButton
get() = binding.expandButton

fun loadState(state: AbsSavedState) {
onRestoreInstanceState(state)
Expand All @@ -169,10 +154,10 @@ class FieldEditLine : FrameLayout {
val state = super.onSaveInstanceState()
val savedState = SavedState(state)
savedState.childrenStates = SparseArray()
savedState.editTextId = editText.id
savedState.toggleStickyId = toggleSticky.id
savedState.mediaButtonId = mediaButton.id
savedState.expandButtonId = expandButton.id
savedState.editTextId = binding.editText.id
savedState.toggleStickyId = binding.toggleSticky.id
savedState.mediaButtonId = binding.mediaButton.id
savedState.expandButtonId = binding.expandButton.id
for (i in 0 until childCount) {
getChildAt(i).saveHierarchyState(savedState.childrenStates)
}
Expand All @@ -185,22 +170,22 @@ class FieldEditLine : FrameLayout {
super.onRestoreInstanceState(state)
return
}
val editTextId = editText.id
val toggleStickyId = toggleSticky.id
val mediaButtonId = mediaButton.id
val expandButtonId = expandButton.id
editText.id = state.editTextId
toggleSticky.id = state.toggleStickyId
mediaButton.id = state.mediaButtonId
expandButton.id = state.expandButtonId
val editTextId = binding.editText.id
val toggleStickyId = binding.toggleSticky.id
val mediaButtonId = binding.mediaButton.id
val expandButtonId = binding.expandButton.id
binding.editText.id = state.editTextId
binding.toggleSticky.id = state.toggleStickyId
binding.mediaButton.id = state.mediaButtonId
binding.expandButton.id = state.expandButtonId
super.onRestoreInstanceState(state.superState)
for (i in 0 until childCount) {
getChildAt(i).restoreHierarchyState(state.childrenStates)
}
editText.id = editTextId
toggleSticky.id = toggleStickyId
mediaButton.id = mediaButtonId
expandButton.id = expandButtonId
binding.editText.id = editTextId
binding.toggleSticky.id = toggleStickyId
binding.mediaButton.id = mediaButtonId
binding.expandButton.id = expandButtonId
if (expansionState != state.expansionState) {
toggleExpansionState()
}
Expand Down
6 changes: 3 additions & 3 deletions AnkiDroid/src/main/java/com/ichi2/anki/NoteEditorFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1827,7 +1827,7 @@ class NoteEditorFragment :
for (i in editLines.indices) {
val editLineView = editLines[i]
customViewIds.add(editLineView.id)
val newEditText = editLineView.editText
val newEditText = editLineView.binding.editText
lifecycleScope.launch {
val pasteAsPng = shouldPasteAsPng()
newEditText.setPasteListener { editText: EditText?, uri: Uri?, description: ClipDescription? ->
Expand Down Expand Up @@ -1871,8 +1871,8 @@ class NoteEditorFragment :
newEditText.textSize = prefs.getInt(PREF_NOTE_EDITOR_FONT_SIZE, -1).toFloat()
}
newEditText.setCapitalize(prefs.getBoolean(PREF_NOTE_EDITOR_CAPITALIZE, true))
val mediaButton = editLineView.mediaButton
val toggleStickyButton = editLineView.toggleSticky
val mediaButton = editLineView.binding.mediaButton
val toggleStickyButton = editLineView.binding.toggleSticky
// Make the icon change between media icon and switch field icon depending on whether editing note type
if (editNoteTypeMode && allowFieldRemapping()) {
// Allow remapping if originally more than two fields
Expand Down
26 changes: 13 additions & 13 deletions AnkiDroid/src/main/res/layout/card_multimedia_editline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,44 @@
xmlns:app="http://schemas.android.com/apk/res-auto">

<com.ichi2.ui.FixedTextView
android:id="@+id/id_label"
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:freezesText="true"
android:layout_alignParentStart="true"
app:layout_constraintBottom_toTopOf="@+id/id_note_editText"
app:layout_constraintEnd_toStartOf="@id/id_media_button"
app:layout_constraintBottom_toTopOf="@+id/edit_text"
app:layout_constraintEnd_toStartOf="@id/media_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Front\nNewline" />

<ImageButton
android:id="@+id/id_toggle_sticky_button"
android:nextFocusForward="@id/id_media_button"
android:id="@+id/toggle_sticky"
android:nextFocusForward="@id/media_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end|center_vertical"
android:background="@drawable/ic_baseline_push_pin_24"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toStartOf="@id/id_media_button"
app:layout_constraintEnd_toStartOf="@id/media_button"
app:layout_constraintTop_toTopOf="parent"/>


<ImageButton
android:id="@+id/id_media_button"
android:nextFocusForward="@id/id_expand_button"
android:id="@+id/media_button"
android:nextFocusForward="@id/expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end|center_vertical"
android:background="@drawable/ic_attachment"
android:tooltipText="@string/multimedia_editor_attach_tooltip"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toStartOf="@id/id_expand_button"
app:layout_constraintEnd_toStartOf="@id/expand_button"
app:layout_constraintTop_toTopOf="parent"/>

<ImageButton
android:id="@+id/id_expand_button"
android:nextFocusForward="@id/id_note_editText"
android:id="@+id/expand_button"
android:nextFocusForward="@id/edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end|center_vertical"
Expand All @@ -57,10 +57,10 @@
android:layout_width="0dp"
android:layout_height="0dp"
app:barrierDirection="bottom"
app:constraint_referenced_ids="id_label, id_media_button, id_expand_button" />
app:constraint_referenced_ids="label, media_button, expand_button" />

<com.ichi2.anki.FieldEditText
android:id="@+id/id_note_editText"
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
Expand Down