From 54435fc031f434decfafb71a32174cf1a7076c2e Mon Sep 17 00:00:00 2001 From: andrekir Date: Sun, 7 Apr 2024 16:56:24 -0300 Subject: [PATCH] refactor: move `DebugFragment` to separate ViewModel --- .../geeksville/mesh/model/DebugViewModel.kt | 39 +++++++++++++++++++ .../java/com/geeksville/mesh/model/UIState.kt | 12 ------ .../com/geeksville/mesh/ui/DebugFragment.kt | 6 +-- 3 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt diff --git a/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt new file mode 100644 index 000000000..72d5195ea --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt @@ -0,0 +1,39 @@ +package com.geeksville.mesh.model + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.geeksville.mesh.android.Logging +import com.geeksville.mesh.database.MeshLogRepository +import com.geeksville.mesh.database.entity.MeshLog +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class DebugViewModel @Inject constructor( + private val meshLogRepository: MeshLogRepository, +) : ViewModel(), Logging { + + private val _meshLog = MutableStateFlow>(emptyList()) + val meshLog: StateFlow> = _meshLog + + init { + viewModelScope.launch { + meshLogRepository.getAllLogs().collect { _meshLog.value = it } + } + + debug("DebugViewModel created") + } + + override fun onCleared() { + super.onCleared() + debug("DebugViewModel cleared") + } + + fun deleteAllLogs() = viewModelScope.launch(Dispatchers.IO) { + meshLogRepository.deleteAll() + } +} diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index a32210460..de70953d8 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -115,9 +115,6 @@ class UIViewModel @Inject constructor( val bondedAddress get() = radioInterfaceService.getBondedDeviceAddress() val selectedBluetooth get() = radioInterfaceService.getDeviceAddress()?.getOrNull(0) == 'x' - private val _meshLog = MutableStateFlow>(emptyList()) - val meshLog: StateFlow> = _meshLog - private val _packets = MutableStateFlow>(emptyList()) val packets: StateFlow> = _packets @@ -164,11 +161,6 @@ class UIViewModel @Inject constructor( radioConfigRepository.clearErrorMessage() }.launchIn(viewModelScope) - viewModelScope.launch { - meshLogRepository.getAllLogs().collect { logs -> - _meshLog.value = logs - } - } viewModelScope.launch { packetRepository.getAllPackets().collect { packets -> _packets.value = packets @@ -300,10 +292,6 @@ class UIViewModel @Inject constructor( } } - fun deleteAllLogs() = viewModelScope.launch(Dispatchers.IO) { - meshLogRepository.deleteAll() - } - fun deleteAllMessages() = viewModelScope.launch(Dispatchers.IO) { packetRepository.deleteAllMessages() } diff --git a/app/src/main/java/com/geeksville/mesh/ui/DebugFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/DebugFragment.kt index 29bdbd835..66cf03fce 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/DebugFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/DebugFragment.kt @@ -5,7 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels import androidx.lifecycle.asLiveData import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -13,7 +13,7 @@ import com.geeksville.mesh.CoroutineDispatchers import com.geeksville.mesh.R import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.databinding.FragmentDebugBinding -import com.geeksville.mesh.model.UIViewModel +import com.geeksville.mesh.model.DebugViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map @@ -28,7 +28,7 @@ class DebugFragment : Fragment() { // This property is only valid between onCreateView and onDestroyView. private val binding get() = _binding!! - private val model: UIViewModel by activityViewModels() + private val model: DebugViewModel by viewModels() @Inject lateinit var dispatchers: CoroutineDispatchers