From 24b391808d58013af8372812733db9279fafaedf Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 3 Oct 2020 12:37:41 +0300 Subject: [PATCH] add notifications on running record start and remove --- .../interactor/AddRunningRecordMediator.kt | 25 +++++++++++++++++++ .../interactor/RemoveRunningRecordMediator.kt | 17 +++++++++++++ .../interactor/RunningRecordInteractor.kt | 9 ++----- .../viewModel/ChangeRecordTypeViewModel.kt | 5 ++-- .../viewModel/ChangeRunningRecordViewModel.kt | 14 +++++------ .../viewModel/RunningRecordsViewModel.kt | 12 ++++----- .../feature_widget/widget/WidgetProvider.kt | 17 ++++++++----- 7 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 core/src/main/java/com/example/util/simpletimetracker/core/interactor/AddRunningRecordMediator.kt create mode 100644 core/src/main/java/com/example/util/simpletimetracker/core/interactor/RemoveRunningRecordMediator.kt diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/AddRunningRecordMediator.kt b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/AddRunningRecordMediator.kt new file mode 100644 index 00000000..dcc855df --- /dev/null +++ b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/AddRunningRecordMediator.kt @@ -0,0 +1,25 @@ +package com.example.util.simpletimetracker.core.interactor + +import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor +import com.example.util.simpletimetracker.domain.model.RunningRecord +import javax.inject.Inject + +class AddRunningRecordMediator @Inject constructor( + private val runningRecordInteractor: RunningRecordInteractor, + private val notificationInteractor: NotificationInteractor, + private val widgetInteractor: WidgetInteractor +) { + + suspend fun add(typeId: Long, timeStarted: Long? = null) { + if (runningRecordInteractor.get(typeId) == null) { + RunningRecord( + id = typeId, + timeStarted = timeStarted ?: System.currentTimeMillis() + ).let { + runningRecordInteractor.add(it) + notificationInteractor.showNotification(typeId) + widgetInteractor.updateWidgets() + } + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RemoveRunningRecordMediator.kt b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RemoveRunningRecordMediator.kt new file mode 100644 index 00000000..dbfa6bbf --- /dev/null +++ b/core/src/main/java/com/example/util/simpletimetracker/core/interactor/RemoveRunningRecordMediator.kt @@ -0,0 +1,17 @@ +package com.example.util.simpletimetracker.core.interactor + +import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor +import javax.inject.Inject + +class RemoveRunningRecordMediator @Inject constructor( + private val runningRecordInteractor: RunningRecordInteractor, + private val notificationInteractor: NotificationInteractor, + private val widgetInteractor: WidgetInteractor +) { + + suspend fun remove(typeId: Long) { + runningRecordInteractor.remove(typeId) + notificationInteractor.hideNotification(typeId) + widgetInteractor.updateWidgets() + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RunningRecordInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RunningRecordInteractor.kt index 87e778ed..0faf5b43 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RunningRecordInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RunningRecordInteractor.kt @@ -16,13 +16,8 @@ class RunningRecordInteractor @Inject constructor( return runningRecordRepo.get(id) } - suspend fun add(typeId: Long, timeStarted: Long? = null) { - if (get(typeId) == null) { - RunningRecord( - id = typeId, - timeStarted = timeStarted ?: System.currentTimeMillis() - ).let { runningRecordRepo.add(it) } - } + suspend fun add(runningRecord: RunningRecord) { + runningRecordRepo.add(runningRecord) } suspend fun remove(id: Long) { diff --git a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt index 275155ca..0194c0ec 100644 --- a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt +++ b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.core.adapter.ViewHolderType +import com.example.util.simpletimetracker.core.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.core.interactor.WidgetInteractor import com.example.util.simpletimetracker.core.mapper.ColorMapper import com.example.util.simpletimetracker.core.mapper.IconMapper @@ -27,6 +28,7 @@ import javax.inject.Inject class ChangeRecordTypeViewModel @Inject constructor( private val router: Router, + private val removeRunningRecordMediator: RemoveRunningRecordMediator, private val recordTypeInteractor: RecordTypeInteractor, private val recordInteractor: RecordInteractor, private val runningRecordInteractor: RunningRecordInteractor, @@ -126,9 +128,8 @@ class ChangeRecordTypeViewModel @Inject constructor( typeId = runningRecord.id, timeStarted = runningRecord.timeStarted ) - runningRecordInteractor.remove(extra.id) + removeRunningRecordMediator.remove(extra.id) } - widgetInteractor.updateWidgets() resourceRepo.getString(R.string.change_record_type_removed) .let(router::showSystemMessage) (keyboardVisibility as MutableLiveData).value = false diff --git a/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt b/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt index 3b542a3d..3d30015c 100644 --- a/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt +++ b/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt @@ -5,7 +5,8 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.core.adapter.ViewHolderType -import com.example.util.simpletimetracker.core.interactor.WidgetInteractor +import com.example.util.simpletimetracker.core.interactor.AddRunningRecordMediator +import com.example.util.simpletimetracker.core.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.core.mapper.RecordTypeViewDataMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.core.viewData.RecordTypeViewData @@ -32,9 +33,10 @@ import javax.inject.Inject class ChangeRunningRecordViewModel @Inject constructor( private val router: Router, + private val addRunningRecordMediator: AddRunningRecordMediator, + private val removeRunningRecordMediator: RemoveRunningRecordMediator, private val runningRecordInteractor: RunningRecordInteractor, private val recordTypeInteractor: RecordTypeInteractor, - private val widgetInteractor: WidgetInteractor, private val changeRunningRecordViewDataMapper: ChangeRunningRecordViewDataMapper, private val recordTypeViewDataMapper: RecordTypeViewDataMapper, private val resourceRepo: ResourceRepo, @@ -84,8 +86,7 @@ class ChangeRunningRecordViewModel @Inject constructor( fun onDeleteClick() { (deleteButtonEnabled as MutableLiveData).value = false viewModelScope.launch { - runningRecordInteractor.remove(extra.id) - widgetInteractor.updateWidgets() + removeRunningRecordMediator.remove(extra.id) resourceRepo.getString(R.string.change_running_record_removed) .let(router::showSystemMessage) router.back() @@ -100,9 +101,8 @@ class ChangeRunningRecordViewModel @Inject constructor( } (saveButtonEnabled as MutableLiveData).value = false viewModelScope.launch { - runningRecordInteractor.remove(extra.id) - runningRecordInteractor.add(newTypeId, newTimeStarted) - widgetInteractor.updateWidgets() + removeRunningRecordMediator.remove(extra.id) + addRunningRecordMediator.add(newTypeId, newTimeStarted) router.back() } } diff --git a/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt b/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt index 31902da5..cd6bc40b 100644 --- a/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt +++ b/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt @@ -6,7 +6,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.core.adapter.ViewHolderType import com.example.util.simpletimetracker.core.adapter.loader.LoaderViewData -import com.example.util.simpletimetracker.core.interactor.WidgetInteractor +import com.example.util.simpletimetracker.core.interactor.AddRunningRecordMediator +import com.example.util.simpletimetracker.core.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.core.utils.CountingIdlingResourceProvider import com.example.util.simpletimetracker.core.viewData.RecordTypeViewData import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor @@ -29,10 +30,11 @@ import javax.inject.Inject class RunningRecordsViewModel @Inject constructor( private val router: Router, + private val addRunningRecordMediator: AddRunningRecordMediator, + private val removeRunningRecordMediator: RemoveRunningRecordMediator, private val runningRecordInteractor: RunningRecordInteractor, private val recordInteractor: RecordInteractor, private val prefsInteractor: PrefsInteractor, - private val widgetInteractor: WidgetInteractor, private val runningRecordsViewDataInteractor: RunningRecordsViewDataInteractor ) : ViewModel() { @@ -50,8 +52,7 @@ class RunningRecordsViewModel @Inject constructor( .filter { it.id != item.id } .forEach { handleRunningRecordRemove(it) } } - runningRecordInteractor.add(item.id) - widgetInteractor.updateWidgets() + addRunningRecordMediator.add(item.id) updateRunningRecords() } } @@ -75,7 +76,6 @@ class RunningRecordsViewModel @Inject constructor( viewModelScope.launch { runningRecordInteractor.get(item.id) ?.let { handleRunningRecordRemove(it) } - widgetInteractor.updateWidgets() updateRunningRecords() } } @@ -111,7 +111,7 @@ class RunningRecordsViewModel @Inject constructor( typeId = runningRecord.id, timeStarted = runningRecord.timeStarted ) - runningRecordInteractor.remove(runningRecord.id) + removeRunningRecordMediator.remove(runningRecord.id) } private fun startUpdate() { diff --git a/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/widget/WidgetProvider.kt b/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/widget/WidgetProvider.kt index 9f260bbe..d5658a4a 100644 --- a/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/widget/WidgetProvider.kt +++ b/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/widget/WidgetProvider.kt @@ -13,6 +13,9 @@ import android.view.LayoutInflater import android.view.View import android.view.View.MeasureSpec import android.widget.RemoteViews +import com.example.util.simpletimetracker.core.interactor.AddRunningRecordMediator +import com.example.util.simpletimetracker.core.interactor.RemoveRunningRecordMediator +import com.example.util.simpletimetracker.core.interactor.WidgetInteractor import com.example.util.simpletimetracker.core.mapper.ColorMapper import com.example.util.simpletimetracker.core.mapper.IconMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo @@ -21,7 +24,6 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor -import com.example.util.simpletimetracker.domain.interactor.WidgetInteractor import com.example.util.simpletimetracker.domain.model.RunningRecord import com.example.util.simpletimetracker.feature_widget.R import com.example.util.simpletimetracker.feature_widget.di.WidgetComponentProvider @@ -33,6 +35,12 @@ import javax.inject.Inject class WidgetProvider : AppWidgetProvider() { + @Inject + lateinit var addRunningRecordMediator: AddRunningRecordMediator + + @Inject + lateinit var removeRunningRecordMediator: RemoveRunningRecordMediator + @Inject lateinit var runningRecordInteractor: RunningRecordInteractor @@ -191,13 +199,10 @@ class WidgetProvider : AppWidgetProvider() { if (!prefsInteractor.getAllowMultitasking()) { runningRecordInteractor.getAll() .forEach { handleRunningRecordRemove(it) } - widgetInteractor.updateWidgets() } // Add new running record - runningRecordInteractor.add(recordTypeId) + addRunningRecordMediator.add(recordTypeId) } - - widgetInteractor.updateWidget(widgetId) } } @@ -206,7 +211,7 @@ class WidgetProvider : AppWidgetProvider() { typeId = runningRecord.id, timeStarted = runningRecord.timeStarted ) - runningRecordInteractor.remove(runningRecord.id) + removeRunningRecordMediator.remove(runningRecord.id) } private fun getPendingSelfIntent( -- 2.51.2