diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/extension/BottomSheetDialogExtensions.kt b/core/src/main/java/com/example/util/simpletimetracker/core/extension/BottomSheetDialogExtensions.kt
index af66b8b9..316894b3 100644
--- a/core/src/main/java/com/example/util/simpletimetracker/core/extension/BottomSheetDialogExtensions.kt
+++ b/core/src/main/java/com/example/util/simpletimetracker/core/extension/BottomSheetDialogExtensions.kt
@@ -31,7 +31,7 @@ fun BottomSheetDialogFragment.setFullScreen() {
}
}
-// Disable sheet swipe on content scroll to avoid accidentally closing payment sheet when scrolling items.
+// Disable sheet swipe on content scroll to avoid accidentally closing the sheet when scrolling items.
fun BottomSheetDialogFragment.blockContentScroll(recyclerView: RecyclerView) {
recyclerView.addOnScrollListenerAdapter(
onScrolled = { _, _, dy ->
diff --git a/core/src/main/res/values-ar/strings.xml b/core/src/main/res/values-ar/strings.xml
index 9a95e3c2..a786158b 100644
--- a/core/src/main/res/values-ar/strings.xml
+++ b/core/src/main/res/values-ar/strings.xml
@@ -15,6 +15,8 @@
الوسوم
لم يحدد شيء
المحدد:
+ اختر الكل
+ لا تختار شيئا
لايوجد بيانات
diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml
index 4919d540..45ff2f20 100644
--- a/core/src/main/res/values-ca/strings.xml
+++ b/core/src/main/res/values-ca/strings.xml
@@ -15,6 +15,8 @@
Etiquetes
Res seleccionat
Seleccionat:
+ Seleccionar tot
+ No seleccioneu res
No hi ha dades
diff --git a/core/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
index c861848f..f1ac0e56 100644
--- a/core/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -15,6 +15,8 @@
Tags
Nichts ausgewählt
Ausgewählt:
+ Wählen Sie Alle
+ Nichts auswählen
Keine Daten
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index e16788b5..fff44803 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -15,6 +15,8 @@
Etiquetas
Nada seleccionado
Seleccionada:
+ Seleccionar todo
+ No seleccionar nada
Sin datos
diff --git a/core/src/main/res/values-fa/strings.xml b/core/src/main/res/values-fa/strings.xml
index 8d85d6c1..23458fd7 100644
--- a/core/src/main/res/values-fa/strings.xml
+++ b/core/src/main/res/values-fa/strings.xml
@@ -15,6 +15,8 @@
برچسب ها
موردی انتخاب نشده
انتخاب شده:
+ انتخاب همه
+ چیزی را انتخاب نکنید
اطلاعاتی وجود ندارد
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index 56c23b5b..2939d914 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -15,6 +15,8 @@
Étiquettes
Rien de sélectionné
Sélection :
+ Tout sélectionner
+ Ne rien sélectionner
Pas de données
diff --git a/core/src/main/res/values-hi/strings.xml b/core/src/main/res/values-hi/strings.xml
index 172d1b1f..0934b44c 100644
--- a/core/src/main/res/values-hi/strings.xml
+++ b/core/src/main/res/values-hi/strings.xml
@@ -15,6 +15,8 @@
टैग
कुछ भी चयनित नहीं
चयनित:
+ सबका चयन करें
+ कुछ भी नहीं चुनें
कोई डेटा नहीं
diff --git a/core/src/main/res/values-in/strings.xml b/core/src/main/res/values-in/strings.xml
index 15d45461..1dd8cdf6 100644
--- a/core/src/main/res/values-in/strings.xml
+++ b/core/src/main/res/values-in/strings.xml
@@ -15,6 +15,8 @@
Label
Tidak ada yang dipilih
Terpilih:
+ Pilih Semua
+ Pilih apa pun
Tidak ada data
diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml
index cebfbca2..0724e88f 100644
--- a/core/src/main/res/values-it/strings.xml
+++ b/core/src/main/res/values-it/strings.xml
@@ -15,6 +15,8 @@
Etichette
Niente selezionato
Selezionata:
+ Seleziona tutto
+ Non selezionare nulla
Nessun dato
diff --git a/core/src/main/res/values-ja/strings.xml b/core/src/main/res/values-ja/strings.xml
index d68b2423..6c7e7c2e 100644
--- a/core/src/main/res/values-ja/strings.xml
+++ b/core/src/main/res/values-ja/strings.xml
@@ -15,6 +15,8 @@
タグ
何も選択されていません
選択済み:
+ すべて選択
+ 何も選択しない
データなし
diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml
index ad8642b5..3da1852e 100644
--- a/core/src/main/res/values-ko/strings.xml
+++ b/core/src/main/res/values-ko/strings.xml
@@ -15,6 +15,8 @@
태그
아무것도 선택되어있지 않습니다
선택됨:
+ 모두 선택
+ 아무것도 선택하지 마세요
데이터 없음
diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
index ff827607..73dcc478 100644
--- a/core/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -15,6 +15,8 @@
Labels
Niets geselecteerd
Geselecteerd:
+ Selecteer alles
+ Selecteer niets
Geen gegevens
diff --git a/core/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml
index ce21aed5..c0fea9de 100644
--- a/core/src/main/res/values-pt/strings.xml
+++ b/core/src/main/res/values-pt/strings.xml
@@ -15,6 +15,8 @@
Tags
Nada selecionado
Selecionada:
+ Selecionar tudo
+ Não selecione nada
Sem dados
diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml
index 78024521..8de185bd 100644
--- a/core/src/main/res/values-ru/strings.xml
+++ b/core/src/main/res/values-ru/strings.xml
@@ -15,6 +15,8 @@
Теги
Ничего не выбрано
Выбрано:
+ Выбрать все
+ Ничего не выбирать
Нет данных
diff --git a/core/src/main/res/values-sv/strings.xml b/core/src/main/res/values-sv/strings.xml
index b77a3136..5a4e3f26 100644
--- a/core/src/main/res/values-sv/strings.xml
+++ b/core/src/main/res/values-sv/strings.xml
@@ -15,6 +15,8 @@
Taggar
Inget valt
Vald:
+ Välj alla
+ Välj ingenting
Inga data
diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/main/res/values-tr/strings.xml
index bf67ce1a..b28868bd 100644
--- a/core/src/main/res/values-tr/strings.xml
+++ b/core/src/main/res/values-tr/strings.xml
@@ -15,6 +15,8 @@
Etiketler
Hiçbir şey seçilmedi
Seçildi:
+ Hepsini seç
+ Hiçbir şey seçme
Veri yok
diff --git a/core/src/main/res/values-uk/strings.xml b/core/src/main/res/values-uk/strings.xml
index 8bd8322e..5a2c3683 100644
--- a/core/src/main/res/values-uk/strings.xml
+++ b/core/src/main/res/values-uk/strings.xml
@@ -15,6 +15,8 @@
Теги
Нічого не вибрано
Вибрано:
+ Вибрати все
+ Нічого не вибирайте
Немає даних
diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
index 02c80da3..5b5281e2 100644
--- a/core/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -15,6 +15,8 @@
標籤
未選取
已選取:
+ 全選
+ 不選擇任何內容
沒有數據
diff --git a/core/src/main/res/values-zh/strings.xml b/core/src/main/res/values-zh/strings.xml
index ef33feb7..7bf9a870 100644
--- a/core/src/main/res/values-zh/strings.xml
+++ b/core/src/main/res/values-zh/strings.xml
@@ -15,6 +15,8 @@
标签
未选择任何内容
已选择:
+ 全选
+ 不选择任何内容
没有数据
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index ad60d69a..c873e107 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -15,6 +15,8 @@
Tags
Nothing selected
Selected:
+ Select all
+ Select nothing
No data
diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/view/DefaultTypesSelectionDialogFragment.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/view/DefaultTypesSelectionDialogFragment.kt
index 72d7cc65..eb700368 100644
--- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/view/DefaultTypesSelectionDialogFragment.kt
+++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/view/DefaultTypesSelectionDialogFragment.kt
@@ -10,6 +10,8 @@ import com.example.util.simpletimetracker.core.extension.observeOnce
import com.example.util.simpletimetracker.core.extension.setFullScreen
import com.example.util.simpletimetracker.core.extension.setSkipCollapsed
import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter
+import com.example.util.simpletimetracker.feature_base_adapter.divider.createDividerAdapterDelegate
+import com.example.util.simpletimetracker.feature_base_adapter.info.createInfoAdapterDelegate
import com.example.util.simpletimetracker.feature_base_adapter.loader.createLoaderAdapterDelegate
import com.example.util.simpletimetracker.feature_base_adapter.recordType.createRecordTypeAdapterDelegate
import com.example.util.simpletimetracker.feature_dialogs.defaultTypesSelection.viewModel.DefaultTypesSelectionViewModel
@@ -32,6 +34,8 @@ class DefaultTypesSelectionDialogFragment : BaseBottomSheetFragment() {
BaseRecyclerAdapter(
createRecordTypeAdapterDelegate(viewModel::onRecordTypeClick),
createLoaderAdapterDelegate(),
+ createDividerAdapterDelegate(),
+ createInfoAdapterDelegate(),
)
}
diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/viewModel/DefaultTypesSelectionViewModel.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/viewModel/DefaultTypesSelectionViewModel.kt
index 6cbbf5f6..ab1f0a58 100644
--- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/viewModel/DefaultTypesSelectionViewModel.kt
+++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/defaultTypesSelection/viewModel/DefaultTypesSelectionViewModel.kt
@@ -7,13 +7,17 @@ import androidx.lifecycle.viewModelScope
import com.example.util.simpletimetracker.core.extension.addOrRemove
import com.example.util.simpletimetracker.core.extension.set
import com.example.util.simpletimetracker.core.mapper.RecordTypeViewDataMapper
+import com.example.util.simpletimetracker.core.repo.ResourceRepo
import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor
import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor
import com.example.util.simpletimetracker.domain.model.CardOrder
import com.example.util.simpletimetracker.domain.model.RecordType
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
+import com.example.util.simpletimetracker.feature_base_adapter.divider.DividerViewData
+import com.example.util.simpletimetracker.feature_base_adapter.info.InfoViewData
import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData
import com.example.util.simpletimetracker.feature_base_adapter.recordType.RecordTypeViewData
+import com.example.util.simpletimetracker.feature_dialogs.R
import com.example.util.simpletimetracker.feature_dialogs.defaultTypesSelection.interactor.GetDefaultRecordTypesInteractor
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
@@ -25,6 +29,7 @@ class DefaultTypesSelectionViewModel @Inject constructor(
private val prefsInteractor: PrefsInteractor,
private val recordTypeViewDataMapper: RecordTypeViewDataMapper,
private val getDefaultRecordTypesInteractor: GetDefaultRecordTypesInteractor,
+ private val resourceRepo: ResourceRepo,
) : ViewModel() {
val types: LiveData> by lazy {
@@ -37,35 +42,35 @@ class DefaultTypesSelectionViewModel @Inject constructor(
}
}
val close: LiveData = MutableLiveData()
- val saveButtonEnabled: LiveData = MutableLiveData(true)
+ val saveButtonEnabled: LiveData = MutableLiveData(false)
private var recordTypes: List = emptyList()
- private var typeIdsFiltered: MutableList = mutableListOf()
+ private var typeIdsSelected: MutableList = mutableListOf()
fun onRecordTypeClick(item: RecordTypeViewData) {
- typeIdsFiltered.addOrRemove(item.id)
+ typeIdsSelected.addOrRemove(item.id)
updateSaveButtonEnabled()
updateRecordTypesViewData()
}
fun onShowAllClick() {
- typeIdsFiltered.clear()
+ typeIdsSelected.addAll(recordTypes.map { it.id })
updateSaveButtonEnabled()
updateRecordTypesViewData()
}
fun onHideAllClick() {
- typeIdsFiltered.addAll(recordTypes.map { it.id })
+ typeIdsSelected.clear()
updateSaveButtonEnabled()
updateRecordTypesViewData()
}
fun onSaveClick() {
- if (typeIdsFiltered.size == recordTypes.size) return
+ if (typeIdsSelected.size == 0) return
saveButtonEnabled.set(false)
viewModelScope.launch {
- recordTypes.filter { it.id !in typeIdsFiltered }.forEach {
+ recordTypes.filter { it.id in typeIdsSelected }.forEach {
// Remove ids for correct adding in database.
recordTypeInteractor.add(it.copy(id = 0))
}
@@ -75,7 +80,7 @@ class DefaultTypesSelectionViewModel @Inject constructor(
}
private fun updateSaveButtonEnabled() {
- saveButtonEnabled.set(typeIdsFiltered.size != recordTypes.size)
+ saveButtonEnabled.set(typeIdsSelected.size != 0)
}
private fun updateRecordTypesViewData() = viewModelScope.launch {
@@ -89,15 +94,36 @@ class DefaultTypesSelectionViewModel @Inject constructor(
if (recordTypes.isEmpty()) recordTypes = loadRecordTypes()
- return recordTypes.map { recordType ->
- recordTypeViewDataMapper.mapFiltered(
- recordType = recordType,
+ fun map(type: RecordType): ViewHolderType {
+ return recordTypeViewDataMapper.map(
+ recordType = type,
numberOfCards = numberOfCards,
isDarkTheme = isDarkTheme,
- isFiltered = recordType.id in typeIdsFiltered,
isChecked = null,
)
}
+
+ val selected = recordTypes
+ .filter { it.id in typeIdsSelected }
+ .map(::map)
+ val available = recordTypes
+ .filter { it.id !in typeIdsSelected }
+ .map(::map)
+
+ val result = mutableListOf()
+
+ if (selected.isNotEmpty()) {
+ result += InfoViewData(resourceRepo.getString(R.string.something_selected))
+ result += selected
+ } else {
+ result += InfoViewData(resourceRepo.getString(R.string.nothing_selected))
+ }
+ if (available.isNotEmpty()) {
+ result += DividerViewData(0)
+ }
+ result += available
+
+ return result
}
private suspend fun loadRecordTypes(): List {
diff --git a/features/feature_dialogs/src/main/res/layout/default_types_selection_dialog_fragment.xml b/features/feature_dialogs/src/main/res/layout/default_types_selection_dialog_fragment.xml
index b52dcea8..cc2933bf 100644
--- a/features/feature_dialogs/src/main/res/layout/default_types_selection_dialog_fragment.xml
+++ b/features/feature_dialogs/src/main/res/layout/default_types_selection_dialog_fragment.xml
@@ -31,6 +31,7 @@
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_weight="1"
+ android:overScrollMode="never"
tools:listitem="@layout/item_record_type_layout" />
@@ -60,7 +61,7 @@
android:ellipsize="marquee"
android:paddingHorizontal="0dp"
android:singleLine="true"
- android:text="@string/types_filter_hide_all"
+ android:text="@string/select_nothing"
app:layout_constraintBottom_toTopOf="@id/btnDefaultTypesSelectionSave"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/btnDefaultTypesSelectionShowAll" />