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 099da869..928c7158 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 @@ -14,6 +14,7 @@ class AddRunningRecordMediator @Inject constructor( private val notificationGoalTimeInteractor: NotificationGoalTimeInteractor, private val notificationGoalCountInteractor: NotificationGoalCountInteractor, private val widgetInteractor: WidgetInteractor, + private val wearInteractor: WearInteractor, private val activityStartedStoppedBroadcastInteractor: ActivityStartedStoppedBroadcastInteractor, ) { @@ -97,6 +98,7 @@ class AddRunningRecordMediator @Inject constructor( if (runningRecordInteractor.getAll().size == 1) notificationActivityInteractor.checkAndSchedule() notificationGoalTimeInteractor.checkAndReschedule(listOf(typeId)) widgetInteractor.updateWidgets() + wearInteractor.updateCurrentActivities() } } } diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRunningRecordMediator.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRunningRecordMediator.kt index b2085349..6dcedaa1 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRunningRecordMediator.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRunningRecordMediator.kt @@ -12,6 +12,7 @@ class RemoveRunningRecordMediator @Inject constructor( private val notificationActivityInteractor: NotificationActivityInteractor, private val notificationGoalTimeInteractor: NotificationGoalTimeInteractor, private val widgetInteractor: WidgetInteractor, + private val wearInteractor: WearInteractor, private val prefsInteractor: PrefsInteractor, private val activityStartedStoppedBroadcastInteractor: ActivityStartedStoppedBroadcastInteractor, ) { @@ -52,6 +53,9 @@ class RemoveRunningRecordMediator @Inject constructor( val runningRecordIds = runningRecordInteractor.getAll().map { it.id } if (runningRecordIds.isEmpty()) notificationActivityInteractor.cancel() notificationGoalTimeInteractor.checkAndReschedule(runningRecordIds + typeId) - if (updateWidgets) widgetInteractor.updateWidgets() + if (updateWidgets) { + widgetInteractor.updateWidgets() + wearInteractor.updateCurrentActivities() + } } } \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/WearInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/WearInteractor.kt new file mode 100644 index 00000000..43bf328b --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/WearInteractor.kt @@ -0,0 +1,8 @@ +package com.example.util.simpletimetracker.domain.interactor + +interface WearInteractor { + + suspend fun updateActivities() + + suspend fun updateCurrentActivities() +} \ No newline at end of file diff --git a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearCommunicationInteractor.kt b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearCommunicationInteractor.kt index afcc87d3..6569fe30 100644 --- a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearCommunicationInteractor.kt +++ b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearCommunicationInteractor.kt @@ -17,10 +17,11 @@ import com.example.util.simpletimetracker.domain.model.AppColor import com.example.util.simpletimetracker.domain.model.RecordTag import com.example.util.simpletimetracker.domain.model.RunningRecord import com.example.util.simpletimetracker.wear_api.WearActivity +import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI import com.example.util.simpletimetracker.wear_api.WearCurrentActivity import com.example.util.simpletimetracker.wear_api.WearSettings -import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI import com.example.util.simpletimetracker.wear_api.WearTag +import dagger.Lazy import javax.inject.Inject class WearCommunicationInteractor @Inject constructor( @@ -28,8 +29,8 @@ class WearCommunicationInteractor @Inject constructor( private val recordTypeInteractor: RecordTypeInteractor, private val recordTagInteractor: RecordTagInteractor, private val runningRecordInteractor: RunningRecordInteractor, - private val removeRunningRecordMediator: RemoveRunningRecordMediator, - private val addRunningRecordMediator: AddRunningRecordMediator, + private val removeRunningRecordMediator: Lazy, + private val addRunningRecordMediator: Lazy, private val appColorMapper: AppColorMapper, ) : WearCommunicationAPI { @@ -67,10 +68,10 @@ class WearCommunicationInteractor @Inject constructor( val started = starting.filter { it.id !in currentsIds } stopped.forEach { - removeRunningRecordMediator.removeWithRecordAdd(it) + removeRunningRecordMediator.get().removeWithRecordAdd(it) } started.forEach { record -> - addRunningRecordMediator.add( + addRunningRecordMediator.get().add( typeId = record.id, timeStarted = record.startedAt, tagIds = record.tags.map(WearTag::id), diff --git a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearInteractorImpl.kt b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearInteractorImpl.kt new file mode 100644 index 00000000..9a2f8be5 --- /dev/null +++ b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearInteractorImpl.kt @@ -0,0 +1,17 @@ +package com.example.util.simpletimetracker.feature_wear + +import com.example.util.simpletimetracker.domain.interactor.WearInteractor +import javax.inject.Inject + +class WearInteractorImpl @Inject constructor( + private val wearRPCServer: WearRPCServer, +) : WearInteractor { + + override suspend fun updateActivities() { + + } + + override suspend fun updateCurrentActivities() { + wearRPCServer.updateCurrentActivities() + } +} \ No newline at end of file diff --git a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearModule.kt b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearModule.kt index 95b62496..ec81f153 100644 --- a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearModule.kt +++ b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearModule.kt @@ -5,6 +5,7 @@ */ package com.example.util.simpletimetracker.feature_wear +import com.example.util.simpletimetracker.domain.interactor.WearInteractor import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI import dagger.Binds import dagger.Module @@ -17,4 +18,8 @@ interface WearModule { @Binds fun WearCommunicationInteractor.bindWearCommunicationInteractor(): WearCommunicationAPI + + // TODO add base flavor noop + @Binds + fun WearInteractorImpl.bindWearInteractor(): WearInteractor } \ No newline at end of file diff --git a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearRPCServer.kt b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearRPCServer.kt index ae80f4e5..f572997f 100644 --- a/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearRPCServer.kt +++ b/features/feature_wear/src/main/java/com/example/util/simpletimetracker/feature_wear/WearRPCServer.kt @@ -5,15 +5,22 @@ */ package com.example.util.simpletimetracker.feature_wear +import android.content.Context import com.example.util.simpletimetracker.wear_api.WearCurrentActivity import com.example.util.simpletimetracker.wear_api.WearRequests import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI +import com.google.android.gms.tasks.Tasks +import com.google.android.gms.wearable.Wearable import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject class WearRPCServer @Inject constructor( + @ApplicationContext private val context: Context, private val api: WearCommunicationAPI, ) { @@ -38,6 +45,22 @@ class WearRPCServer @Inject constructor( } } + suspend fun updateCurrentActivities() = withContext(Dispatchers.IO) { + // TODO handle errors? + val nodesListTask = Wearable + .getNodeClient(context) + .connectedNodes + val nodesList = Tasks.await(nodesListTask) + + nodesList.forEach { node -> + Wearable.getMessageClient(context).sendMessage( + node.id, + WearRequests.DATA_UPDATED, + mapToBytes(WearRequests.DATA_UPDATED_CURRENT_ACTIVITIES), + ) + } + } + private suspend fun onQueryTagsForActivity(request: ByteArray): ByteArray? { val activityId: Long = mapFromBytes(request) ?: return null return mapToBytes(api.queryTagsForActivity(activityId)) diff --git a/wear/src/main/java/com/example/util/simpletimetracker/data/WearDataRepo.kt b/wear/src/main/java/com/example/util/simpletimetracker/data/WearDataRepo.kt new file mode 100644 index 00000000..0c34e02f --- /dev/null +++ b/wear/src/main/java/com/example/util/simpletimetracker/data/WearDataRepo.kt @@ -0,0 +1,60 @@ +package com.example.util.simpletimetracker.data + +import com.example.util.simpletimetracker.wear_api.WearActivity +import com.example.util.simpletimetracker.wear_api.WearCurrentActivity +import com.example.util.simpletimetracker.wear_api.WearSettings +import com.example.util.simpletimetracker.wear_api.WearTag +import kotlinx.coroutines.channels.BufferOverflow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.asSharedFlow +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class WearDataRepo @Inject constructor( + private val wearRPCClient: WearRPCClient, +) { + + val activitiesUpdated: SharedFlow get() = _activitiesUpdated.asSharedFlow() + val currentActivitiesUpdated: SharedFlow get() = _currentActivitiesUpdated.asSharedFlow() + + private var _activitiesUpdated: MutableSharedFlow = MutableSharedFlow( + extraBufferCapacity = 1, + onBufferOverflow = BufferOverflow.DROP_OLDEST, + ) + private var _currentActivitiesUpdated: MutableSharedFlow = MutableSharedFlow( + extraBufferCapacity = 1, + onBufferOverflow = BufferOverflow.DROP_OLDEST, + ) + + fun addListener() { + wearRPCClient.addListener { + _currentActivitiesUpdated.tryEmit(Unit) + } + } + + fun removeListener() { + wearRPCClient.removeListener() + } + + suspend fun loadActivities(): List { + return wearRPCClient.queryActivities() + } + + suspend fun loadCurrentActivities(): List { + return wearRPCClient.queryCurrentActivities() + } + + suspend fun setCurrentActivities(starting: List) { + wearRPCClient.setCurrentActivities(starting) + } + + suspend fun loadTagsForActivity(activityId: Long): List { + return wearRPCClient.queryTagsForActivity(activityId) + } + + suspend fun loadSettings(): WearSettings { + return wearRPCClient.querySettings() + } +} \ No newline at end of file diff --git a/wear/src/main/java/com/example/util/simpletimetracker/data/WearRPCClient.kt b/wear/src/main/java/com/example/util/simpletimetracker/data/WearRPCClient.kt index 8dd952ad..388e9d6d 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/data/WearRPCClient.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/data/WearRPCClient.kt @@ -5,21 +5,29 @@ */ package com.example.util.simpletimetracker.data +import android.content.Context import com.example.util.simpletimetracker.wear_api.WearActivity +import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI import com.example.util.simpletimetracker.wear_api.WearCurrentActivity import com.example.util.simpletimetracker.wear_api.WearRequests import com.example.util.simpletimetracker.wear_api.WearSettings import com.example.util.simpletimetracker.wear_api.WearTag -import com.example.util.simpletimetracker.wear_api.WearCommunicationAPI +import com.google.android.gms.wearable.MessageClient +import com.google.android.gms.wearable.Wearable import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject +import javax.inject.Singleton +@Singleton class WearRPCClient @Inject constructor( + @ApplicationContext private val context: Context, private val messenger: Messenger, ) : WearCommunicationAPI { private val gson = Gson() + private var listener: MessageClient.OnMessageReceivedListener? = null override suspend fun ping(message: String): String { val response: String? = messenger @@ -65,6 +73,28 @@ class WearRPCClient @Inject constructor( return response ?: throw WearRPCException("No response") } + fun addListener( + onDataChanged: () -> Unit, + ) { + listener = MessageClient.OnMessageReceivedListener { + if (it.path == WearRequests.DATA_UPDATED) { + val response: String? = it.data.let(::mapFromBytes) + if (response == WearRequests.DATA_UPDATED_CURRENT_ACTIVITIES) { + onDataChanged() + } + } + } + listener?.let { + Wearable.getMessageClient(context).addListener(it) + } + } + + fun removeListener() { + listener?.let { + Wearable.getMessageClient(context).removeListener(it) + } + } + private fun mapToBytes(data: T): ByteArray { return gson.toJson(data).toByteArray() } diff --git a/wear/src/main/java/com/example/util/simpletimetracker/domain/CurrentActivitiesMediator.kt b/wear/src/main/java/com/example/util/simpletimetracker/domain/CurrentActivitiesMediator.kt index 2975dd3e..eaf6e2bd 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/domain/CurrentActivitiesMediator.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/domain/CurrentActivitiesMediator.kt @@ -1,13 +1,12 @@ package com.example.util.simpletimetracker.domain -import com.example.util.simpletimetracker.data.WearRPCClient +import com.example.util.simpletimetracker.data.WearDataRepo import com.example.util.simpletimetracker.wear_api.WearCurrentActivity -import com.example.util.simpletimetracker.wear_api.WearSettings import com.example.util.simpletimetracker.wear_api.WearTag import javax.inject.Inject class CurrentActivitiesMediator @Inject constructor( - private val rpc: WearRPCClient, + private val wearDataRepo: WearDataRepo, ) { suspend fun start( @@ -19,21 +18,19 @@ class CurrentActivitiesMediator @Inject constructor( startedAt = System.currentTimeMillis(), tags = tags, ) - if (settings().allowMultitasking) { - val currents = rpc.queryCurrentActivities() - this.rpc.setCurrentActivities(currents.plus(newCurrent)) + val settings = wearDataRepo.loadSettings() + + if (settings.allowMultitasking) { + val currents = wearDataRepo.loadCurrentActivities() + this.wearDataRepo.setCurrentActivities(currents.plus(newCurrent)) } else { - this.rpc.setCurrentActivities(listOf(newCurrent)) + this.wearDataRepo.setCurrentActivities(listOf(newCurrent)) } } suspend fun stop(currentId: Long) { - val currents = rpc.queryCurrentActivities() + val currents = wearDataRepo.loadCurrentActivities() val remaining = currents.filter { it.id != currentId } - this.rpc.setCurrentActivities(remaining) - } - - private suspend fun settings(): WearSettings { - return this.rpc.querySettings() + this.wearDataRepo.setCurrentActivities(remaining) } } \ No newline at end of file diff --git a/wear/src/main/java/com/example/util/simpletimetracker/domain/StartActivityMediator.kt b/wear/src/main/java/com/example/util/simpletimetracker/domain/StartActivityMediator.kt index 43850152..f8c16095 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/domain/StartActivityMediator.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/domain/StartActivityMediator.kt @@ -5,13 +5,13 @@ */ package com.example.util.simpletimetracker.domain -import com.example.util.simpletimetracker.data.WearRPCClient +import com.example.util.simpletimetracker.data.WearDataRepo import com.example.util.simpletimetracker.wear_api.WearActivity import com.example.util.simpletimetracker.wear_api.WearSettings import javax.inject.Inject class StartActivityMediator @Inject constructor( - private val api: WearRPCClient, + private val wearDataRepo: WearDataRepo, ) { suspend fun requestStart( @@ -19,7 +19,7 @@ class StartActivityMediator @Inject constructor( onRequestStartActivity: suspend (activity: WearActivity) -> Unit, onRequestTagSelection: suspend (activity: WearActivity) -> Unit, ) { - val settings = api.querySettings() + val settings = wearDataRepo.loadSettings() if (settings.showRecordTagSelection) { requestTagSelectionIfNeeded( activity = activity, @@ -38,11 +38,11 @@ class StartActivityMediator @Inject constructor( onRequestStartActivity: suspend (activity: WearActivity) -> Unit, onRequestTagSelection: suspend (activity: WearActivity) -> Unit, ) { - val tags = api.queryTagsForActivity(activity.id) + val tags = wearDataRepo.loadTagsForActivity(activity.id) val generalTags = tags.filter { it.isGeneral } val nonGeneralTags = tags.filter { !it.isGeneral } - val tagSelectionNeeded = - nonGeneralTags.isNotEmpty() || generalTags.isNotEmpty() && settings.recordTagSelectionEvenForGeneralTags + val tagSelectionNeeded = nonGeneralTags.isNotEmpty() || + generalTags.isNotEmpty() && settings.recordTagSelectionEvenForGeneralTags if (tagSelectionNeeded) { onRequestTagSelection(activity) } else { diff --git a/wear/src/main/java/com/example/util/simpletimetracker/presentation/MainActivity.kt b/wear/src/main/java/com/example/util/simpletimetracker/presentation/MainActivity.kt index 4b377fb5..0edb2956 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/presentation/MainActivity.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/presentation/MainActivity.kt @@ -8,18 +8,29 @@ package com.example.util.simpletimetracker.presentation import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import com.example.util.simpletimetracker.data.WearDataRepo import com.example.util.simpletimetracker.navigation.WearNavigator import com.example.util.simpletimetracker.presentation.theme.WearTheme import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class MainActivity : ComponentActivity() { + + @Inject lateinit var wearDataRepo: WearDataRepo + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + wearDataRepo.addListener() setContent { WearTheme { WearNavigator() } } } + + override fun onStop() { + wearDataRepo.removeListener() + super.onStop() + } } diff --git a/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/activities/ActivitiesViewModel.kt b/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/activities/ActivitiesViewModel.kt index 42daaa2b..808fa2c7 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/activities/ActivitiesViewModel.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/activities/ActivitiesViewModel.kt @@ -9,8 +9,8 @@ import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.R +import com.example.util.simpletimetracker.data.WearDataRepo import com.example.util.simpletimetracker.presentation.components.ActivitiesListState -import com.example.util.simpletimetracker.data.WearRPCClient import com.example.util.simpletimetracker.domain.CurrentActivitiesMediator import com.example.util.simpletimetracker.domain.StartActivityMediator import com.example.util.simpletimetracker.wear_api.WearActivity @@ -23,7 +23,7 @@ import javax.inject.Inject @HiltViewModel class ActivitiesViewModel @Inject constructor( - private val rpc: WearRPCClient, + private val wearDataRepo: WearDataRepo, private val startActivitiesMediator: StartActivityMediator, private val currentActivitiesMediator: CurrentActivitiesMediator, ) : ViewModel() { @@ -39,57 +39,55 @@ class ActivitiesViewModel @Inject constructor( fun init() { if (isInitialized) return loadData() + subscribeToDataUpdates() isInitialized = true } - fun startActivityWithoutTags(wearActivity: WearActivity) { + fun startActivityWithoutTags(wearActivity: WearActivity) = viewModelScope.launch { Log.d("ActivitiesScreen", "Starting ${wearActivity.name} (#${wearActivity.id}) without tags") - viewModelScope.launch { - currentActivitiesMediator.start(wearActivity.id) - loadData() - } + currentActivitiesMediator.start(wearActivity.id) } - fun stopActivity(wearActivity: WearActivity) { + fun stopActivity(wearActivity: WearActivity) = viewModelScope.launch { Log.d("ActivitiesScreen", "Stopping ${wearActivity.name} (#${wearActivity.id})") - viewModelScope.launch { - currentActivitiesMediator.stop(wearActivity.id) - loadData() - } + currentActivitiesMediator.stop(wearActivity.id) } - fun onSelectActivity(wearActivity: WearActivity) { - viewModelScope.launch { - startActivitiesMediator.requestStart( - activity = wearActivity, - onRequestStartActivity = ::startActivityWithoutTags, - onRequestTagSelection = ::startActivityWithTags, + fun onSelectActivity(wearActivity: WearActivity) = viewModelScope.launch { + startActivitiesMediator.requestStart( + activity = wearActivity, + onRequestStartActivity = ::startActivityWithoutTags, + onRequestTagSelection = ::startActivityWithTags, + ) + } + + fun loadData() = viewModelScope.launch { + val activities = wearDataRepo.loadActivities() + val newState = if (activities.isEmpty()) { + ActivitiesListState.Empty(R.string.no_activities) + } else { + ActivitiesListState.Content( + activities = activities, + currentActivities = wearDataRepo.loadCurrentActivities(), ) } + state.value = newState } - fun loadData() { + private fun subscribeToDataUpdates() { viewModelScope.launch { - val activities = rpc.queryActivities() - val newState = if (activities.isEmpty()) { - ActivitiesListState.Empty(R.string.no_activities) - } else { - ActivitiesListState.Content( - activities = activities, - currentActivities = rpc.queryCurrentActivities(), - ) - } - state.value = newState + wearDataRepo.currentActivitiesUpdated.collect { loadData() } } - } - - private fun startActivityWithTags(wearActivity: WearActivity) { viewModelScope.launch { - Log.d("ActivitiesScreen", "Starting ${wearActivity.name} (#${wearActivity.id}) with tags") - effects.emit(Effect.OnRequestTagSelection(wearActivity.id)) + wearDataRepo.activitiesUpdated.collect { loadData() } } } + private fun startActivityWithTags(wearActivity: WearActivity) = viewModelScope.launch { + Log.d("ActivitiesScreen", "Starting ${wearActivity.name} (#${wearActivity.id}) with tags") + effects.emit(Effect.OnRequestTagSelection(wearActivity.id)) + } + sealed interface Effect { data class OnRequestTagSelection(val activityId: Long) : Effect } diff --git a/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/tagsSelection/TagsViewModel.kt b/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/tagsSelection/TagsViewModel.kt index 1c28f3c2..d3f5cbaa 100644 --- a/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/tagsSelection/TagsViewModel.kt +++ b/wear/src/main/java/com/example/util/simpletimetracker/presentation/screens/tagsSelection/TagsViewModel.kt @@ -7,8 +7,8 @@ package com.example.util.simpletimetracker.presentation.screens.tagsSelection import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.example.util.simpletimetracker.data.WearDataRepo import com.example.util.simpletimetracker.presentation.components.TagListState -import com.example.util.simpletimetracker.data.WearRPCClient import com.example.util.simpletimetracker.domain.CurrentActivitiesMediator import com.example.util.simpletimetracker.wear_api.WearSettings import com.example.util.simpletimetracker.wear_api.WearTag @@ -21,7 +21,7 @@ import javax.inject.Inject @HiltViewModel class TagsViewModel @Inject constructor( - private val rpc: WearRPCClient, + private val wearDataRepo: WearDataRepo, private val currentActivitiesMediator: CurrentActivitiesMediator, private val tagsViewDataMapper: TagsViewDataMapper, ) : ViewModel() { @@ -83,8 +83,8 @@ class TagsViewModel @Inject constructor( private fun loadData() { viewModelScope.launch { val activityId = this@TagsViewModel.activityId ?: return@launch - settings = rpc.querySettings() - tags = rpc.queryTagsForActivity(activityId) + settings = wearDataRepo.loadSettings() + tags = wearDataRepo.loadTagsForActivity(activityId) state.value = mapState() } diff --git a/wear_api/src/main/java/com/example/util/simpletimetracker/wear_api/WearRequests.kt b/wear_api/src/main/java/com/example/util/simpletimetracker/wear_api/WearRequests.kt index 1f9e6522..d69e386d 100644 --- a/wear_api/src/main/java/com/example/util/simpletimetracker/wear_api/WearRequests.kt +++ b/wear_api/src/main/java/com/example/util/simpletimetracker/wear_api/WearRequests.kt @@ -14,4 +14,7 @@ object WearRequests { const val SET_CURRENT_ACTIVITIES = "$PATH//PUT/activities/current" const val QUERY_TAGS_FOR_ACTIVITY = "$PATH//GET/activities/:ID/tags" const val QUERY_SETTINGS = "$PATH//GET/settings" + const val DATA_UPDATED = "$PATH//data/updated" + + const val DATA_UPDATED_CURRENT_ACTIVITIES = "data_updated_current_activities" } \ No newline at end of file