Skip to content

Commit a6ca7cd

Browse files
committed
add tag value saving on keyboard done and keyboard show on dialog open
1 parent 4acb41f commit a6ca7cd

4 files changed

Lines changed: 35 additions & 3 deletions

File tree

features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/commentField/CommentFieldAdapterDelegate.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_base_adapter.commentField
22

33
import android.text.InputType
44
import android.text.TextWatcher
5+
import android.view.inputmethod.EditorInfo
56
import androidx.core.widget.doAfterTextChanged
67
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
78
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
@@ -11,13 +12,20 @@ import com.example.util.simpletimetracker.feature_base_adapter.databinding.ItemC
1112

1213
fun createCommentFieldAdapterDelegate(
1314
afterTextChange: (String) -> Unit,
15+
onKeyboardButtonClick: (() -> Unit)? = null,
1416
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
1517
Binding::inflate,
1618
) { binding, item, _ ->
1719

1820
with(binding) {
1921
item as ViewData
2022

23+
etCommentItemField.setOnEditorActionListener { _, actionId, _ ->
24+
if (actionId == EditorInfo.IME_ACTION_DONE) {
25+
onKeyboardButtonClick?.invoke()
26+
}
27+
false
28+
}
2129
etCommentItemField.inputType = when (item.valueType) {
2230
is ViewData.ValueType.TextMultiLine -> {
2331
InputType.TYPE_TEXT_FLAG_MULTI_LINE

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagValueSelection/interactor/RecordTagValueSelectionViewDataInteractor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ class RecordTagValueSelectionViewDataInteractor @Inject constructor(
1616
): List<ViewHolderType> {
1717
val result: MutableList<ViewHolderType> = mutableListOf()
1818

19-
// TODO TAG close on IME DONE on keyboard.
20-
// TODO TAG show keyboard on first open.
2119
result += CommentFieldViewData(
2220
id = 1L, // Only one at the time.
2321
text = if (fromCommentChange) null else value?.toString().orEmpty(),

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagValueSelection/view/RecordTagValueSelectionDialogFragment.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,21 @@ import android.content.Context
44
import android.os.Bundle
55
import android.view.LayoutInflater
66
import android.view.ViewGroup
7+
import android.widget.EditText
78
import androidx.fragment.app.viewModels
89
import com.example.util.simpletimetracker.core.base.BaseBottomSheetFragment
910
import com.example.util.simpletimetracker.core.dialog.OnTagValueSelectedListener
1011
import com.example.util.simpletimetracker.core.extension.findListeners
12+
import com.example.util.simpletimetracker.core.extension.hideKeyboard
1113
import com.example.util.simpletimetracker.core.extension.setSkipCollapsed
14+
import com.example.util.simpletimetracker.core.extension.showKeyboard
1215
import com.example.util.simpletimetracker.core.utils.fragmentArgumentDelegate
1316
import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter
1417
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
1518
import com.example.util.simpletimetracker.feature_base_adapter.commentField.createCommentFieldAdapterDelegate
19+
import com.example.util.simpletimetracker.feature_dialogs.R
1620
import com.example.util.simpletimetracker.feature_dialogs.recordTagValueSelection.viewModel.RecordTagValueSelectionViewModel
21+
import com.example.util.simpletimetracker.feature_views.extension.postDelayed
1722
import com.example.util.simpletimetracker.feature_views.extension.setOnClick
1823
import com.example.util.simpletimetracker.navigation.params.screen.RecordTagValueSelectionParams
1924
import com.google.android.flexbox.FlexDirection
@@ -33,7 +38,10 @@ class RecordTagValueSelectionDialogFragment : BaseBottomSheetFragment<Binding>()
3338

3439
private val adapter: BaseRecyclerAdapter by lazy {
3540
BaseRecyclerAdapter(
36-
createCommentFieldAdapterDelegate(viewModel::onValueChange),
41+
createCommentFieldAdapterDelegate(
42+
afterTextChange = viewModel::onValueChange,
43+
onKeyboardButtonClick = viewModel::onKeyboardButtonClick,
44+
),
3745
)
3846
}
3947
private val params: RecordTagValueSelectionParams by fragmentArgumentDelegate(
@@ -68,13 +76,25 @@ class RecordTagValueSelectionDialogFragment : BaseBottomSheetFragment<Binding>()
6876
override fun initViewModel(): Unit = with(viewModel) {
6977
extra = params
7078
viewData.observe(::setViewData)
79+
keyboardVisibility.observe(::showKeyboard)
7180
onDataSelected.observe(::onDataSelected)
7281
}
7382

7483
private fun setViewData(data: List<ViewHolderType>) {
7584
adapter.replace(data)
7685
}
7786

87+
private fun showKeyboard(isVisible: Boolean) {
88+
if (isVisible) {
89+
binding.rvRecordTagValueSelectionList.postDelayed(200) {
90+
findViewById<EditText>(R.id.etCommentItemField)
91+
?.let(::showKeyboard)
92+
}
93+
} else {
94+
hideKeyboard()
95+
}
96+
}
97+
7898
private fun onDataSelected(value: Double) {
7999
listeners.forEach { it.onTagValueSelected(params, value) }
80100
dismiss()

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagValueSelection/viewModel/RecordTagValueSelectionViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ class RecordTagValueSelectionViewModel @Inject constructor(
2323
return@lazy MutableLiveData<List<ViewHolderType>>().let { initial ->
2424
viewModelScope.launch {
2525
initial.value = loadViewData(fromCommentChange = false)
26+
keyboardVisibility.set(true)
2627
}
2728
initial
2829
}
2930
}
31+
val keyboardVisibility: LiveData<Boolean> = MutableLiveData()
3032
val onDataSelected: LiveData<Double> = MutableLiveData()
3133

3234
private var newValue: Double? = null
@@ -39,6 +41,10 @@ class RecordTagValueSelectionViewModel @Inject constructor(
3941
}
4042
}
4143

44+
fun onKeyboardButtonClick() {
45+
sendResult()
46+
}
47+
4248
fun onSaveClick() {
4349
sendResult()
4450
}

0 commit comments

Comments
 (0)