diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/database/RecordDao.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/database/RecordDao.kt index 180269382..6bdb3e022 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/database/RecordDao.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/database/RecordDao.kt @@ -93,6 +93,9 @@ interface RecordDao { comment: String, ) + @Query("UPDATE records SET time_ended = :timeEnded WHERE id = :recordId") + suspend fun updateTimeEnded(recordId: Long, timeEnded: Long) + @Query("DELETE FROM records WHERE id = :id") suspend fun delete(id: Long) diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt index 2154db809..04f471e9b 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordRepoImpl.kt @@ -6,6 +6,7 @@ import com.example.util.simpletimetracker.data_local.mapper.RecordDataLocalMappe import com.example.util.simpletimetracker.data_local.model.RecordWithRecordTagsDBO import com.example.util.simpletimetracker.data_local.utils.logDataAccess import com.example.util.simpletimetracker.data_local.utils.withLockedCache +import com.example.util.simpletimetracker.domain.extension.dropMillis import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.repo.RecordRepo @@ -25,6 +26,7 @@ class RecordRepoImpl @Inject constructor( private var getFromRangeByTypeCache = LruCache>(1) private var recordCache = LruCache(1) private var isEmpty: Boolean? = null + private val mutex: Mutex = Mutex() override suspend fun isEmpty(): Boolean = mutex.withLockedCache( @@ -171,6 +173,20 @@ class RecordRepoImpl @Inject constructor( afterSourceAccess = { clearCache() }, ) + override suspend fun updateTimeEnded( + recordId: Long, + timeEnded: Long, + ) = mutex.withLockedCache( + logMessage = "updateTimeEnded", + accessSource = { + recordDao.updateTimeEnded( + recordId = recordId, + timeEnded = timeEnded.dropMillis(), + ) + }, + afterSourceAccess = { clearCache() }, + ) + override suspend fun remove(id: Long) = mutex.withLockedCache( logMessage = "remove", accessSource = { recordDao.delete(id) }, diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt index eb9c9d40e..02e5299bc 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt @@ -54,31 +54,14 @@ class AddRunningRecordMediator @Inject constructor( } } - suspend fun startTimers( - typeIds: Set, - ) { - val current = System.currentTimeMillis() - val timeStarted = StartTime.Current(current) - val prevRecords = recordInteractor.getAllPrev(current) - typeIds.forEachIndexed { index, id -> - startTimer( - typeId = id, - tagIds = emptyList(), - comment = "", - timeStarted = timeStarted, - prevRecords = PrevRecords.Records(prevRecords), - // Update only on last. - updateNotificationSwitch = index == typeIds.size - 1, - ) - } - } - + // TODO test retroactive mode + // TODO test several prev records at the same time, merge accordingly. + // TODO test retroactive multitask suspend fun startTimer( typeId: Long, tagIds: List, comment: String, timeStarted: StartTime = StartTime.TakeCurrent, - prevRecords: PrevRecords = PrevRecords.Load, updateNotificationSwitch: Boolean = true, checkDefaultDuration: Boolean = true, ) { @@ -90,10 +73,7 @@ class AddRunningRecordMediator @Inject constructor( } val retroactiveTrackingMode = prefsInteractor.getRetroactiveTrackingMode() val actualPrevRecords = if (retroactiveTrackingMode) { - when (prevRecords) { - is PrevRecords.Load -> recordInteractor.getAllPrev(actualTimeStarted) - is PrevRecords.Records -> prevRecords.records - } + recordInteractor.getAllPrev(actualTimeStarted) } else { emptyList() } @@ -113,9 +93,12 @@ class AddRunningRecordMediator @Inject constructor( prevRecords = actualPrevRecords, ) } + val isMultitaskingAllowedByDefault = prefsInteractor.getAllowMultitasking() + val isMultitaskingAllowed = rulesResult.isMultitaskingAllowed.getValueOrNull() + ?: isMultitaskingAllowedByDefault processMultitasking( typeId = typeId, - isMultitaskingAllowedByRules = rulesResult.isMultitaskingAllowed, + isMultitaskingAllowed = isMultitaskingAllowed, splitTime = when (timeStarted) { is StartTime.Current -> timeStarted.currentTimeStampMs is StartTime.TakeCurrent -> currentTime @@ -138,6 +121,7 @@ class AddRunningRecordMediator @Inject constructor( tagIds = actualTags, timeStarted = actualTimeStarted, updateNotificationSwitch = updateNotificationSwitch, + isMultitaskingAllowed = isMultitaskingAllowed, ) if (retroactiveTrackingMode) { addRetroactiveModeInternal(startParams, actualPrevRecords) @@ -165,6 +149,7 @@ class AddRunningRecordMediator @Inject constructor( comment = comment, tagIds = tagIds, updateNotificationSwitch = true, + isMultitaskingAllowed = true, ), checkDefaultDuration = false, ) @@ -188,9 +173,13 @@ class AddRunningRecordMediator @Inject constructor( ) { val type = recordTypeInteractor.get(params.typeId) ?: return + processRetroactiveMultitasking( + params = params, + prevRecords = prevRecords, + ) + if (type.defaultDuration > 0L) { - val newTimeStarted = prevRecords.firstOrNull()?.timeEnded - ?: (params.timeStarted - type.defaultDuration * 1000) + val newTimeStarted = params.timeStarted - type.defaultDuration * 1000 addInstantRecord( params = params.copy(timeStarted = newTimeStarted), type = type, @@ -307,13 +296,9 @@ class AddRunningRecordMediator @Inject constructor( private suspend fun processMultitasking( typeId: Long, - isMultitaskingAllowedByRules: ResultContainer, + isMultitaskingAllowed: Boolean, splitTime: Long, ) { - val isMultitaskingAllowedByDefault = prefsInteractor.getAllowMultitasking() - val isMultitaskingAllowed = isMultitaskingAllowedByRules.getValueOrNull() - ?: isMultitaskingAllowedByDefault - // Stop running records if multitasking is disabled. if (!isMultitaskingAllowed) { // Widgets will update on adding. @@ -330,6 +315,36 @@ class AddRunningRecordMediator @Inject constructor( } } + private suspend fun processRetroactiveMultitasking( + params: StartParams, + prevRecords: List, + ) { + if (!params.isMultitaskingAllowed) return + + val recordTypesMap = recordTypeInteractor.getAll().associateBy(RecordType::id) + val mergedRecord = getPrevRecordToMergeWith(params.typeId, prevRecords) + + // Extend prev records to current time. + prevRecords.filter { + // Skip record that would be merge. + it.id != mergedRecord?.id + }.filter { + // Skip records with default duration. + val thisType = recordTypesMap[it.typeId] + thisType != null && thisType.defaultDuration == 0L + }.map { prevRecord -> + recordInteractor.updateTimeEnded( + recordId = prevRecord.id, + timeEnded = params.timeStarted, + ) + prevRecord.typeId + }.let { + updateExternalViewsInteractor.onRecordTimeEndedChange( + typeIds = it, + ) + } + } + private suspend fun getAllTags( typeId: Long, tagIds: List, @@ -352,6 +367,7 @@ class AddRunningRecordMediator @Inject constructor( val comment: String, val tagIds: List, val updateNotificationSwitch: Boolean, + val isMultitaskingAllowed: Boolean, ) sealed interface StartTime { @@ -359,9 +375,4 @@ class AddRunningRecordMediator @Inject constructor( data class Timestamp(val timestampMs: Long) : StartTime object TakeCurrent : StartTime } - - sealed interface PrevRecords { - data class Records(val records: List) : PrevRecords - object Load : PrevRecords - } } \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt index 5478d04d9..2178971dc 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordInteractor.kt @@ -122,6 +122,13 @@ class RecordInteractor @Inject constructor( updateTags(recordId, tagIds) } + suspend fun updateTimeEnded(recordId: Long, timeEnded: Long) { + recordRepo.updateTimeEnded( + recordId = recordId, + timeEnded = timeEnded, + ) + } + suspend fun remove(id: Long) { recordToRecordTagRepo.removeAllByRecordId(id) recordRepo.remove(id) diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/UpdateExternalViewsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/UpdateExternalViewsInteractor.kt index 18364a4ea..a2a147725 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/UpdateExternalViewsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/UpdateExternalViewsInteractor.kt @@ -159,6 +159,14 @@ class UpdateExternalViewsInteractor @Inject constructor( ) } + suspend fun onRecordTimeEndedChange( + typeIds: List, + ) { + runUpdates( + Update.GoalReschedule(typeIds), + ) + } + suspend fun onInstantRecordAdd() { runUpdates( Update.Wear, diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt index 808349346..d6f464f60 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/RecordRepo.kt @@ -49,6 +49,8 @@ interface RecordRepo { comment: String, ) + suspend fun updateTimeEnded(recordId: Long, timeEnded: Long) + suspend fun remove(id: Long) suspend fun removeByType(typeId: Long) diff --git a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeAdapterDelegate.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeAdapterDelegate.kt index 159c48ce7..c725a2d60 100644 --- a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeAdapterDelegate.kt +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeAdapterDelegate.kt @@ -37,9 +37,6 @@ fun createRecordTypeAdapterDelegate( itemIsChecked = item.isChecked.orFalse() itemCompleteIsAnimated = true itemIsComplete = item.isComplete - val newItemScale = if (item.isSelected) 1.1f else 1.0f - scaleX = newItemScale - scaleY = newItemScale getCheckmarkOutline().itemIsFiltered = item.itemIsFiltered onItemClick?.let { setOnClickWith(item, it) } onItemLongClick?.let { setOnLongClick { it(item, mapOf(this to transitionName)) } } diff --git a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeViewData.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeViewData.kt index 660b2b1a0..fa23a50c7 100644 --- a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeViewData.kt +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/recordType/RecordTypeViewData.kt @@ -17,7 +17,6 @@ data class RecordTypeViewData( val isChecked: Boolean? = null, val itemIsFiltered: Boolean = false, val isComplete: Boolean = false, - val isSelected: Boolean = false, ) : ViewHolderType { override fun getUniqueId(): Long = id diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/interactor/RunningRecordsViewDataInteractor.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/interactor/RunningRecordsViewDataInteractor.kt index e92aa6d30..9c459ddf4 100644 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/interactor/RunningRecordsViewDataInteractor.kt +++ b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/interactor/RunningRecordsViewDataInteractor.kt @@ -35,8 +35,6 @@ class RunningRecordsViewDataInteractor @Inject constructor( suspend fun getViewData( completeTypeIds: Set, - multitaskingSelectionEnabled: Boolean, - multiSelectedActivityIds: Set, ): List { val recordTypes = recordTypeInteractor.getAll() val recordTypesMap = recordTypes.associateBy(RecordType::id) @@ -54,7 +52,6 @@ class RunningRecordsViewDataInteractor @Inject constructor( val showRepeatButton = prefsInteractor.getEnableRepeatButton() val isPomodoroStarted = prefsInteractor.getPomodoroModeStartedTimestampMs() != 0L val retroactiveTrackingModeEnabled = prefsInteractor.getRetroactiveTrackingMode() - val allowMultitasking = prefsInteractor.getAllowMultitasking() val goals = filterGoalsByDayOfWeekInteractor .execute(recordTypeGoalInteractor.getAllTypeGoals()) .groupBy { it.idData.value } @@ -84,9 +81,6 @@ class RunningRecordsViewDataInteractor @Inject constructor( useProportionalMinutes = useProportionalMinutes, useMilitaryTime = useMilitaryTime, showSeconds = showSeconds, - allowMultitasking = allowMultitasking, - multitaskingSelectionEnabled = multitaskingSelectionEnabled, - multiSelectedActivityIds = multiSelectedActivityIds, ) } runningRecords.isEmpty() -> { @@ -146,17 +140,6 @@ class RunningRecordsViewDataInteractor @Inject constructor( isComplete = it.id in completeTypeIds, ) } - .map { - if (multitaskingSelectionEnabled) { - val isSelected = it.id in multiSelectedActivityIds - it.copy( - isComplete = isSelected, - isSelected = isSelected, - ) - } else { - it - } - } .let { data -> mutableListOf().apply { data.let(::addAll) diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/mapper/RunningRecordsViewDataMapper.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/mapper/RunningRecordsViewDataMapper.kt index d73e11a88..7065dedf2 100644 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/mapper/RunningRecordsViewDataMapper.kt +++ b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/mapper/RunningRecordsViewDataMapper.kt @@ -12,14 +12,11 @@ import com.example.util.simpletimetracker.domain.model.RecordTag import com.example.util.simpletimetracker.domain.model.RecordType import com.example.util.simpletimetracker.domain.model.RunningRecord 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.empty.EmptyViewData import com.example.util.simpletimetracker.feature_base_adapter.hint.HintViewData import com.example.util.simpletimetracker.feature_base_adapter.hintBig.HintBigViewData -import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.FilterViewData import com.example.util.simpletimetracker.feature_base_adapter.recordWithHint.RecordWithHintViewData import com.example.util.simpletimetracker.feature_running_records.R -import com.example.util.simpletimetracker.feature_running_records.model.RunningRecordsFilterType import javax.inject.Inject class RunningRecordsViewDataMapper @Inject constructor( @@ -65,9 +62,6 @@ class RunningRecordsViewDataMapper @Inject constructor( useProportionalMinutes: Boolean, useMilitaryTime: Boolean, showSeconds: Boolean, - allowMultitasking: Boolean, - multitaskingSelectionEnabled: Boolean, - multiSelectedActivityIds: Set, ): List { val result = mutableListOf() @@ -125,42 +119,6 @@ class RunningRecordsViewDataMapper @Inject constructor( paddingTop = 0, paddingBottom = 0, ) - if (allowMultitasking) { - // TODO test retroactive mode - // TODO test several prev records at the same time, merge accordingly. - // TODO test retroactive multitask - // enable, go to other screen - // enable, go to edit type - // disable by clicking - // disable by removing - result += DividerViewData(3) - result += FilterViewData( - id = 0, - type = RunningRecordsFilterType.EnableMultitaskingSelection, - name = resourceRepo.getString(R.string.multitask_time_name), - color = if (multitaskingSelectionEnabled) { - colorMapper.toActiveColor(isDarkTheme) - } else { - colorMapper.toInactiveColor(isDarkTheme) - }, - selected = multitaskingSelectionEnabled, - removeBtnVisible = multitaskingSelectionEnabled, - ) - if (multitaskingSelectionEnabled) { - result += FilterViewData( - id = 1, - type = RunningRecordsFilterType.FinishMultitaskingSelection, - name = resourceRepo.getString(R.string.records_filter_select), - color = if (multiSelectedActivityIds.isNotEmpty()) { - colorMapper.toActiveColor(isDarkTheme) - } else { - colorMapper.toInactiveColor(isDarkTheme) - }, - selected = false, - removeBtnVisible = false, - ) - } - } } return result diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/model/RunningRecordsFilterType.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/model/RunningRecordsFilterType.kt deleted file mode 100644 index ca129ba75..000000000 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/model/RunningRecordsFilterType.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.util.simpletimetracker.feature_running_records.model - -import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.FilterViewData - -sealed interface RunningRecordsFilterType : FilterViewData.Type { - object EnableMultitaskingSelection : RunningRecordsFilterType - object FinishMultitaskingSelection : RunningRecordsFilterType -} \ No newline at end of file diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt index 2f31cbd5c..87cad5eda 100644 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt +++ b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/view/RunningRecordsFragment.kt @@ -19,7 +19,6 @@ import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmpty import com.example.util.simpletimetracker.feature_base_adapter.hint.createHintAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.hintBig.createHintBigAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.loader.createLoaderAdapterDelegate -import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.createFilterAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.recordType.createRecordTypeAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.recordTypeSpecial.createRunningRecordTypeSpecialAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.recordWithHint.createRecordWithHintAdapterDelegate @@ -74,10 +73,6 @@ class RunningRecordsFragment : createRunningRecordTypeSpecialAdapterDelegate(throttle(viewModel::onSpecialRecordTypeClick)), createActivityFilterAdapterDelegate(viewModel::onActivityFilterClick, viewModel::onActivityFilterLongClick), createActivityFilterAddAdapterDelegate(throttle(viewModel::onAddActivityFilterClick)), - createFilterAdapterDelegate( - onClick = viewModel::onFilterClick, - onRemoveClick = viewModel::onFilterRemoveClick, - ), ) } diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt index 7c4c41663..49b5e5274 100644 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt +++ b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt @@ -11,7 +11,6 @@ import com.example.util.simpletimetracker.core.extension.toRecordParams import com.example.util.simpletimetracker.core.interactor.RecordRepeatInteractor import com.example.util.simpletimetracker.core.mapper.ChangeRecordDateTimeMapper import com.example.util.simpletimetracker.core.model.NavigationTab -import com.example.util.simpletimetracker.domain.extension.addOrRemove import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.interactor.AddRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.ChangeSelectedActivityFilterMediator @@ -24,12 +23,10 @@ import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialog import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_base_adapter.activityFilter.ActivityFilterViewData import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData -import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.FilterViewData import com.example.util.simpletimetracker.feature_base_adapter.recordType.RecordTypeViewData import com.example.util.simpletimetracker.feature_base_adapter.recordTypeSpecial.RunningRecordTypeSpecialViewData import com.example.util.simpletimetracker.feature_base_adapter.runningRecord.RunningRecordViewData import com.example.util.simpletimetracker.feature_running_records.interactor.RunningRecordsViewDataInteractor -import com.example.util.simpletimetracker.feature_running_records.model.RunningRecordsFilterType import com.example.util.simpletimetracker.feature_views.TransitionNames import com.example.util.simpletimetracker.navigation.Router import com.example.util.simpletimetracker.navigation.params.screen.ChangeActivityFilterParams @@ -73,8 +70,6 @@ class RunningRecordsViewModel @Inject constructor( private var timerJob: Job? = null private var completeTypeJob: Job? = null private var completeTypeIds: Set = emptySet() - private var multitaskingSelectionEnabled: Boolean = false - private var multiSelectedActivityIds: Set = emptySet() init { subscribeToUpdates() @@ -82,13 +77,6 @@ class RunningRecordsViewModel @Inject constructor( fun onRecordTypeClick(item: RecordTypeViewData) { viewModelScope.launch { - if (isMultiSelectionEnabled()) { - multiSelectedActivityIds = multiSelectedActivityIds.toMutableSet() - .apply { addOrRemove(item.id) } - updateRunningRecords() - return@launch - } - val runningRecord = runningRecordInteractor.get(item.id) if (runningRecord != null) { @@ -229,23 +217,6 @@ class RunningRecordsViewModel @Inject constructor( ) } - fun onFilterClick(data: FilterViewData) { - when (data.type) { - is RunningRecordsFilterType.EnableMultitaskingSelection -> changeMultiSelection() - is RunningRecordsFilterType.FinishMultitaskingSelection -> finishMultiSelection() - } - updateRunningRecords() - } - - fun onFilterRemoveClick(data: FilterViewData) { - when (data.type) { - is RunningRecordsFilterType.EnableMultitaskingSelection -> { - disableMultiSelection() - } - } - updateRunningRecords() - } - fun onVisible() { startUpdate() } @@ -284,34 +255,6 @@ class RunningRecordsViewModel @Inject constructor( router.navigate(RecordTagSelectionParams(typeId, result.toParams())) } - private suspend fun isMultiSelectionEnabled(): Boolean { - return multitaskingSelectionEnabled && - prefsInteractor.getAllowMultitasking() && - prefsInteractor.getRetroactiveTrackingMode() - } - - private fun disableMultiSelection() { - multitaskingSelectionEnabled = false - multiSelectedActivityIds = emptySet() - } - - private fun changeMultiSelection() { - if (multitaskingSelectionEnabled) { - disableMultiSelection() - } else { - multitaskingSelectionEnabled = true - } - } - - private fun finishMultiSelection() = viewModelScope.launch { - val ids = multiSelectedActivityIds - if (ids.isEmpty()) return@launch - disableMultiSelection() - // TODO Tag selection is not supported yet. - // Currently multi selection is only for retroactive mode, so no need to stop timers. - addRunningRecordMediator.startTimers(typeIds = ids) - } - private fun subscribeToUpdates() { viewModelScope.launch { updateRunningRecordFromChangeScreenInteractor.dataUpdated.collect { @@ -334,8 +277,6 @@ class RunningRecordsViewModel @Inject constructor( private suspend fun loadRunningRecordsViewData(): List { return runningRecordsViewDataInteractor.getViewData( completeTypeIds = completeTypeIds, - multitaskingSelectionEnabled = isMultiSelectionEnabled(), - multiSelectedActivityIds = multiSelectedActivityIds, ) }