Skip to content

Commit 20f6f64

Browse files
david-allisonlukstbit
authored andcommitted
chore: convert FieldEditLine to ViewBinding
Issue 11116
1 parent fc7bb43 commit 20f6f64

File tree

4 files changed

+63
-76
lines changed

4 files changed

+63
-76
lines changed

AnkiDroid/src/androidTest/java/com/ichi2/anki/FieldEditLineTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,5 @@ class FieldEditLineTest : NoteEditorTest() {
6565
return reference.get()
6666
}
6767
}
68+
69+
val FieldEditLine.editText get() = binding.editText

AnkiDroid/src/main/java/com/ichi2/anki/FieldEditLine.kt

Lines changed: 45 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,20 @@ import android.view.ActionMode
2828
import android.view.LayoutInflater
2929
import android.view.View
3030
import android.widget.FrameLayout
31-
import android.widget.ImageButton
32-
import android.widget.TextView
3331
import androidx.annotation.DrawableRes
34-
import androidx.constraintlayout.widget.ConstraintLayout
3532
import androidx.constraintlayout.widget.ConstraintSet
3633
import androidx.core.os.ParcelCompat
3734
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
3835
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
36+
import com.ichi2.anki.databinding.CardMultimediaEditlineBinding
3937
import com.ichi2.compat.setTooltipTextCompat
4038
import com.ichi2.ui.AnimationUtil.collapseView
4139
import com.ichi2.ui.AnimationUtil.expandView
4240
import java.util.Locale
4341

4442
@KotlinCleanup("replace _name with `field`")
4543
class FieldEditLine : FrameLayout {
46-
val editText: FieldEditText
47-
private val label: TextView
48-
val toggleSticky: ImageButton
49-
val mediaButton: ImageButton
50-
private val expandButton: ImageButton
44+
val binding = CardMultimediaEditlineBinding.inflate(LayoutInflater.from(context), this, true)
5145
private var _name: String? = null
5246
private var expansionState = ExpansionState.EXPANDED
5347

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

6256
init {
63-
LayoutInflater.from(context).inflate(R.layout.card_multimedia_editline, this, true)
64-
editText = findViewById(R.id.id_note_editText)
65-
label = findViewById(R.id.id_label)
66-
toggleSticky =
67-
findViewById<ImageButton>(R.id.id_toggle_sticky_button).apply {
68-
setTooltipTextCompat(CollectionManager.TR.editingToggleSticky())
69-
}
70-
mediaButton = findViewById(R.id.id_media_button)
71-
val constraintLayout: ConstraintLayout = findViewById(R.id.constraint_layout)
72-
expandButton = findViewById(R.id.id_expand_button)
57+
binding.toggleSticky.setTooltipTextCompat(CollectionManager.TR.editingToggleSticky())
7358
// 7433 -
7459
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
75-
editText.id = View.generateViewId()
76-
toggleSticky.id = View.generateViewId()
77-
mediaButton.id = View.generateViewId()
78-
expandButton.id = View.generateViewId()
79-
editText.nextFocusForwardId = toggleSticky.id
80-
toggleSticky.nextFocusForwardId = mediaButton.id
81-
mediaButton.nextFocusForwardId = expandButton.id
60+
binding.editText.id = View.generateViewId()
61+
binding.toggleSticky.id = View.generateViewId()
62+
binding.mediaButton.id = View.generateViewId()
63+
binding.expandButton.id = View.generateViewId()
64+
binding.editText.nextFocusForwardId = binding.toggleSticky.id
65+
binding.toggleSticky.nextFocusForwardId = binding.mediaButton.id
66+
binding.mediaButton.nextFocusForwardId = binding.expandButton.id
8267
ConstraintSet().apply {
83-
clone(constraintLayout)
84-
connect(toggleSticky.id, ConstraintSet.END, mediaButton.id, ConstraintSet.START)
85-
connect(mediaButton.id, ConstraintSet.END, expandButton.id, ConstraintSet.START)
86-
applyTo(constraintLayout)
68+
clone(binding.constraintLayout)
69+
connect(binding.toggleSticky.id, ConstraintSet.END, binding.mediaButton.id, ConstraintSet.START)
70+
connect(binding.mediaButton.id, ConstraintSet.END, binding.expandButton.id, ConstraintSet.START)
71+
applyTo(binding.constraintLayout)
8772
}
8873
}
8974
setExpanderBackgroundImage()
90-
expandButton.setOnClickListener { toggleExpansionState() }
91-
editText.init()
92-
label.setPaddingRelative(getDensityAdjustedValue(context, 3.4f).toInt(), 0, 0, 0)
75+
binding.expandButton.setOnClickListener { toggleExpansionState() }
76+
binding.editText.init()
77+
binding.label.setPaddingRelative(getDensityAdjustedValue(context, 3.4f).toInt(), 0, 0, 0)
9378
}
9479

9580
private fun toggleExpansionState() {
9681
expansionState =
9782
when (expansionState) {
9883
ExpansionState.EXPANDED -> {
99-
collapseView(editText, enableAnimation)
84+
collapseView(binding.editText, enableAnimation)
10085
ExpansionState.COLLAPSED
10186
}
10287
ExpansionState.COLLAPSED -> {
103-
expandView(editText, enableAnimation)
88+
expandView(binding.editText, enableAnimation)
10489
ExpansionState.EXPANDED
10590
}
10691
}
@@ -109,8 +94,8 @@ class FieldEditLine : FrameLayout {
10994

11095
private fun setExpanderBackgroundImage() {
11196
when (expansionState) {
112-
ExpansionState.COLLAPSED -> expandButton.background = getBackgroundImage(R.drawable.ic_expand_more_black_24dp_xml)
113-
ExpansionState.EXPANDED -> expandButton.background = getBackgroundImage(R.drawable.ic_expand_less_black_24dp)
97+
ExpansionState.COLLAPSED -> binding.expandButton.background = getBackgroundImage(R.drawable.ic_expand_more_black_24dp_xml)
98+
ExpansionState.EXPANDED -> binding.expandButton.background = getBackgroundImage(R.drawable.ic_expand_less_black_24dp)
11499
}
115100
}
116101

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

121106
fun setActionModeCallbacks(callback: ActionMode.Callback?) {
122-
editText.customSelectionActionModeCallback = callback
123-
editText.customInsertionActionModeCallback = callback
107+
binding.editText.customSelectionActionModeCallback = callback
108+
binding.editText.customInsertionActionModeCallback = callback
124109
}
125110

126111
fun setHintLocale(hintLocale: Locale?) {
127112
if (hintLocale != null) {
128-
editText.setHintLocale(hintLocale)
113+
binding.editText.setHintLocale(hintLocale)
129114
}
130115
}
131116

132117
fun setContent(
133118
content: String?,
134119
replaceNewline: Boolean,
135120
) {
136-
editText.setContent(content, replaceNewline)
121+
binding.editText.setContent(content, replaceNewline)
137122
}
138123

139124
fun setOrd(i: Int) {
140-
editText.ord = i
125+
binding.editText.ord = i
141126
}
142127

143128
var name: String?
144129
get() = _name
145130
set(name) {
146131
_name = name
147-
editText.contentDescription = name
148-
label.text = name
132+
binding.editText.contentDescription = name
133+
binding.label.text = name
149134
}
150135

151136
val lastViewInTabOrder: View
152-
get() = expandButton
137+
get() = binding.expandButton
153138

154139
fun loadState(state: AbsSavedState) {
155140
onRestoreInstanceState(state)
@@ -169,10 +154,10 @@ class FieldEditLine : FrameLayout {
169154
val state = super.onSaveInstanceState()
170155
val savedState = SavedState(state)
171156
savedState.childrenStates = SparseArray()
172-
savedState.editTextId = editText.id
173-
savedState.toggleStickyId = toggleSticky.id
174-
savedState.mediaButtonId = mediaButton.id
175-
savedState.expandButtonId = expandButton.id
157+
savedState.editTextId = binding.editText.id
158+
savedState.toggleStickyId = binding.toggleSticky.id
159+
savedState.mediaButtonId = binding.mediaButton.id
160+
savedState.expandButtonId = binding.expandButton.id
176161
for (i in 0 until childCount) {
177162
getChildAt(i).saveHierarchyState(savedState.childrenStates)
178163
}
@@ -185,22 +170,22 @@ class FieldEditLine : FrameLayout {
185170
super.onRestoreInstanceState(state)
186171
return
187172
}
188-
val editTextId = editText.id
189-
val toggleStickyId = toggleSticky.id
190-
val mediaButtonId = mediaButton.id
191-
val expandButtonId = expandButton.id
192-
editText.id = state.editTextId
193-
toggleSticky.id = state.toggleStickyId
194-
mediaButton.id = state.mediaButtonId
195-
expandButton.id = state.expandButtonId
173+
val editTextId = binding.editText.id
174+
val toggleStickyId = binding.toggleSticky.id
175+
val mediaButtonId = binding.mediaButton.id
176+
val expandButtonId = binding.expandButton.id
177+
binding.editText.id = state.editTextId
178+
binding.toggleSticky.id = state.toggleStickyId
179+
binding.mediaButton.id = state.mediaButtonId
180+
binding.expandButton.id = state.expandButtonId
196181
super.onRestoreInstanceState(state.superState)
197182
for (i in 0 until childCount) {
198183
getChildAt(i).restoreHierarchyState(state.childrenStates)
199184
}
200-
editText.id = editTextId
201-
toggleSticky.id = toggleStickyId
202-
mediaButton.id = mediaButtonId
203-
expandButton.id = expandButtonId
185+
binding.editText.id = editTextId
186+
binding.toggleSticky.id = toggleStickyId
187+
binding.mediaButton.id = mediaButtonId
188+
binding.expandButton.id = expandButtonId
204189
if (expansionState != state.expansionState) {
205190
toggleExpansionState()
206191
}

AnkiDroid/src/main/java/com/ichi2/anki/NoteEditorFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,7 +1824,7 @@ class NoteEditorFragment :
18241824
for (i in editLines.indices) {
18251825
val editLineView = editLines[i]
18261826
customViewIds.add(editLineView.id)
1827-
val newEditText = editLineView.editText
1827+
val newEditText = editLineView.binding.editText
18281828
lifecycleScope.launch {
18291829
val pasteAsPng = shouldPasteAsPng()
18301830
newEditText.setPasteListener { editText: EditText?, uri: Uri?, description: ClipDescription? ->
@@ -1868,8 +1868,8 @@ class NoteEditorFragment :
18681868
newEditText.textSize = prefs.getInt(PREF_NOTE_EDITOR_FONT_SIZE, -1).toFloat()
18691869
}
18701870
newEditText.setCapitalize(prefs.getBoolean(PREF_NOTE_EDITOR_CAPITALIZE, true))
1871-
val mediaButton = editLineView.mediaButton
1872-
val toggleStickyButton = editLineView.toggleSticky
1871+
val mediaButton = editLineView.binding.mediaButton
1872+
val toggleStickyButton = editLineView.binding.toggleSticky
18731873
// Make the icon change between media icon and switch field icon depending on whether editing note type
18741874
if (editNoteTypeMode && allowFieldRemapping()) {
18751875
// Allow remapping if originally more than two fields

AnkiDroid/src/main/res/layout/card_multimedia_editline.xml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,44 @@
77
xmlns:app="http://schemas.android.com/apk/res-auto">
88

99
<com.ichi2.ui.FixedTextView
10-
android:id="@+id/id_label"
10+
android:id="@+id/label"
1111
android:layout_width="0dp"
1212
android:layout_height="wrap_content"
1313
android:freezesText="true"
1414
android:layout_alignParentStart="true"
15-
app:layout_constraintBottom_toTopOf="@+id/id_note_editText"
16-
app:layout_constraintEnd_toStartOf="@id/id_media_button"
15+
app:layout_constraintBottom_toTopOf="@+id/edit_text"
16+
app:layout_constraintEnd_toStartOf="@id/media_button"
1717
app:layout_constraintStart_toStartOf="parent"
1818
app:layout_constraintTop_toTopOf="parent"
1919
tools:text="Front\nNewline" />
2020

2121
<ImageButton
22-
android:id="@+id/id_toggle_sticky_button"
23-
android:nextFocusForward="@id/id_media_button"
22+
android:id="@+id/toggle_sticky"
23+
android:nextFocusForward="@id/media_button"
2424
android:layout_width="wrap_content"
2525
android:layout_height="wrap_content"
2626
android:gravity="end|center_vertical"
2727
android:background="@drawable/ic_baseline_push_pin_24"
2828
android:layout_marginEnd="16dp"
29-
app:layout_constraintEnd_toStartOf="@id/id_media_button"
29+
app:layout_constraintEnd_toStartOf="@id/media_button"
3030
app:layout_constraintTop_toTopOf="parent"/>
3131

3232

3333
<ImageButton
34-
android:id="@+id/id_media_button"
35-
android:nextFocusForward="@id/id_expand_button"
34+
android:id="@+id/media_button"
35+
android:nextFocusForward="@id/expand_button"
3636
android:layout_width="wrap_content"
3737
android:layout_height="wrap_content"
3838
android:gravity="end|center_vertical"
3939
android:background="@drawable/ic_attachment"
4040
android:tooltipText="@string/multimedia_editor_attach_tooltip"
4141
android:layout_marginEnd="16dp"
42-
app:layout_constraintEnd_toStartOf="@id/id_expand_button"
42+
app:layout_constraintEnd_toStartOf="@id/expand_button"
4343
app:layout_constraintTop_toTopOf="parent"/>
4444

4545
<ImageButton
46-
android:id="@+id/id_expand_button"
47-
android:nextFocusForward="@id/id_note_editText"
46+
android:id="@+id/expand_button"
47+
android:nextFocusForward="@id/edit_text"
4848
android:layout_width="wrap_content"
4949
android:layout_height="wrap_content"
5050
android:gravity="end|center_vertical"
@@ -57,10 +57,10 @@
5757
android:layout_width="0dp"
5858
android:layout_height="0dp"
5959
app:barrierDirection="bottom"
60-
app:constraint_referenced_ids="id_label, id_media_button, id_expand_button" />
60+
app:constraint_referenced_ids="label, media_button, expand_button" />
6161

6262
<com.ichi2.anki.FieldEditText
63-
android:id="@+id/id_note_editText"
63+
android:id="@+id/edit_text"
6464
android:layout_width="match_parent"
6565
android:layout_height="wrap_content"
6666
app:layout_constraintEnd_toEndOf="parent"

0 commit comments

Comments
 (0)