diff --git a/app/src/main/java/com/preonboarding/sensordashboard/data/local/dao/SensorHistoryDao.kt b/app/src/main/java/com/preonboarding/sensordashboard/data/local/dao/SensorHistoryDao.kt index a50dfc0..a7a21a5 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/data/local/dao/SensorHistoryDao.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/data/local/dao/SensorHistoryDao.kt @@ -20,6 +20,6 @@ interface SensorHistoryDao { @Delete suspend fun deleteSensorHistory(sensorHistory: SensorHistoryEntity) - @Query("SELECT * FROM sensor_history_table ORDER BY publishedAt DESC LIMIT :loadSize OFFSET (:page-1) * :loadSize") - fun getSensorDataList(page: Int, loadSize: Int): List + @Query("SELECT * from sensor_history_table ORDER BY publishedAt DESC LIMIT :loadSize OFFSET (:page - 1) * :loadSize") + suspend fun getSensorDataList(page: Int, loadSize: Int): List } \ No newline at end of file diff --git a/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasource/SensorHistoryLocalDataSource.kt b/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasource/SensorHistoryLocalDataSource.kt index 665efd5..c93d8cc 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasource/SensorHistoryLocalDataSource.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasource/SensorHistoryLocalDataSource.kt @@ -7,5 +7,4 @@ interface SensorHistoryLocalDataSource { fun getSensorHistoryList(): Flow> suspend fun saveSensorHistory(sensorHistory: SensorHistoryEntity) suspend fun deleteSensorHistory(sensorHistory: SensorHistoryEntity) - fun getSensorDataList(): List } \ No newline at end of file diff --git a/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasourceimpl/SensorHistoryLocalDataSourceImpl.kt b/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasourceimpl/SensorHistoryLocalDataSourceImpl.kt index 5b1d7e4..0444a4e 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasourceimpl/SensorHistoryLocalDataSourceImpl.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/data/local/datasourceimpl/SensorHistoryLocalDataSourceImpl.kt @@ -19,7 +19,4 @@ class SensorHistoryLocalDataSourceImpl @Inject constructor( override suspend fun deleteSensorHistory(sensorHistory: SensorHistoryEntity) { sensorHistoryDao.deleteSensorHistory(sensorHistory) } - - override fun getSensorDataList(): List = - sensorHistoryDao.getSensorDataList(page = 1, loadSize = 5) } \ No newline at end of file diff --git a/app/src/main/java/com/preonboarding/sensordashboard/data/paging/HistoryPagingSource.kt b/app/src/main/java/com/preonboarding/sensordashboard/data/paging/HistoryPagingSource.kt index 6c3ad7d..09be281 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/data/paging/HistoryPagingSource.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/data/paging/HistoryPagingSource.kt @@ -12,14 +12,11 @@ class HistoryPagingSource( override suspend fun load(params: LoadParams): LoadResult { val page = params.key ?: 1 return try { - val items = dao.getSensorDataList( - page, - params.loadSize - ) + val items = dao.getSensorDataList(page, params.loadSize) LoadResult.Page( data = items, prevKey = if (page == 1) null else page - 1, - nextKey = if (items.isEmpty()) null else page + (params.loadSize / 5) + nextKey = if (items.isEmpty()) null else page + 1 ) } catch (e: Exception) { return LoadResult.Error(e) diff --git a/app/src/main/java/com/preonboarding/sensordashboard/data/repositoryimpl/SensorHistoryRepositoryImpl.kt b/app/src/main/java/com/preonboarding/sensordashboard/data/repositoryimpl/SensorHistoryRepositoryImpl.kt index f5401e8..d63d9ff 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/data/repositoryimpl/SensorHistoryRepositoryImpl.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/data/repositoryimpl/SensorHistoryRepositoryImpl.kt @@ -35,10 +35,10 @@ class SensorHistoryRepositoryImpl @Inject constructor( sensorHistoryLocalDataSource.deleteSensorHistory(sensorHistory.toEntity()) } - override fun getSensorDataList(): Flow> { + override suspend fun getSensorDataList(): Flow> { return (Pager( config = PagingConfig( - pageSize = 5, + pageSize = 10, enablePlaceholders = false ), pagingSourceFactory = { HistoryPagingSource(dao) } diff --git a/app/src/main/java/com/preonboarding/sensordashboard/domain/repository/SensorHistoryRepository.kt b/app/src/main/java/com/preonboarding/sensordashboard/domain/repository/SensorHistoryRepository.kt index a796215..c3c4f72 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/domain/repository/SensorHistoryRepository.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/domain/repository/SensorHistoryRepository.kt @@ -8,5 +8,5 @@ interface SensorHistoryRepository { fun getSensorHistoryList(): Flow> suspend fun saveSensorHistory(sensorHistory: SensorHistory) suspend fun deleteSensorHistory(sensorHistory: SensorHistory) - fun getSensorDataList(): Flow> + suspend fun getSensorDataList(): Flow> } \ No newline at end of file diff --git a/app/src/main/java/com/preonboarding/sensordashboard/domain/usecase/GetSensorHistoryListUseCase.kt b/app/src/main/java/com/preonboarding/sensordashboard/domain/usecase/GetSensorHistoryListUseCase.kt index a6c40a9..43e11c2 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/domain/usecase/GetSensorHistoryListUseCase.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/domain/usecase/GetSensorHistoryListUseCase.kt @@ -1,16 +1,13 @@ package com.preonboarding.sensordashboard.domain.usecase -import androidx.paging.PagingData -import com.preonboarding.sensordashboard.domain.model.SensorHistory import com.preonboarding.sensordashboard.domain.repository.SensorHistoryRepository import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn import javax.inject.Inject class GetSensorHistoryListUseCase @Inject constructor( private val sensorHistoryRepository: SensorHistoryRepository, ) { - operator fun invoke(): Flow> = + suspend operator fun invoke() = sensorHistoryRepository.getSensorDataList().flowOn(Dispatchers.Default) } \ No newline at end of file diff --git a/app/src/main/java/com/preonboarding/sensordashboard/presentation/view/sensor_history_list/SensorHistoryListFragment.kt b/app/src/main/java/com/preonboarding/sensordashboard/presentation/view/sensor_history_list/SensorHistoryListFragment.kt index ad315e6..6d11543 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/presentation/view/sensor_history_list/SensorHistoryListFragment.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/presentation/view/sensor_history_list/SensorHistoryListFragment.kt @@ -3,16 +3,15 @@ package com.preonboarding.sensordashboard.presentation.view.sensor_history_list import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope -import androidx.paging.LoadState +import androidx.lifecycle.repeatOnLifecycle import com.preonboarding.sensordashboard.R import com.preonboarding.sensordashboard.common.base.BaseFragment import com.preonboarding.sensordashboard.databinding.FragmentSensorHistoryListBinding import com.preonboarding.sensordashboard.presentation.viewmodel.SensorHistoryViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.distinctUntilChangedBy -import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch @AndroidEntryPoint @@ -30,23 +29,20 @@ class SensorHistoryListFragment : viewmodel = sensorHistoryViewModel } initAdapter() + initViewmodel() + sensorHistoryViewModel.sensorHistoryList() } private fun initAdapter() { binding.historyListRv.adapter = adapter - initViewmodel() } private fun initViewmodel() { lifecycleScope.launch { - adapter.loadStateFlow - .distinctUntilChangedBy { it.refresh } - .filter { it.refresh is LoadState.NotLoading } - .collect { binding.historyListRv.scrollToPosition(0) } - } - lifecycleScope.launch { - sensorHistoryViewModel.sensorHistoryList.collectLatest { - adapter.submitData(it) + repeatOnLifecycle(Lifecycle.State.STARTED) { + sensorHistoryViewModel.historyList.collectLatest { + adapter.submitData(it) + } } } } diff --git a/app/src/main/java/com/preonboarding/sensordashboard/presentation/viewmodel/SensorHistoryViewModel.kt b/app/src/main/java/com/preonboarding/sensordashboard/presentation/viewmodel/SensorHistoryViewModel.kt index ac5969f..2f66676 100644 --- a/app/src/main/java/com/preonboarding/sensordashboard/presentation/viewmodel/SensorHistoryViewModel.kt +++ b/app/src/main/java/com/preonboarding/sensordashboard/presentation/viewmodel/SensorHistoryViewModel.kt @@ -8,17 +8,34 @@ import com.preonboarding.sensordashboard.domain.model.SensorHistory import com.preonboarding.sensordashboard.domain.usecase.DeleteSensorHistoryUseCase import com.preonboarding.sensordashboard.domain.usecase.GetSensorHistoryListUseCase import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class SensorHistoryViewModel @Inject constructor( - getSensorHistoryListUseCase: GetSensorHistoryListUseCase, + private val getSensorHistoryListUseCase: GetSensorHistoryListUseCase, private val deleteSensorHistoryUseCase: DeleteSensorHistoryUseCase, ) : BaseViewModel() { - val sensorHistoryList: Flow> = getSensorHistoryListUseCase().cachedIn(viewModelScope) - fun deleteSensorHistory(){ -// deleteSensorHistoryUseCase() + private val _historyList: MutableStateFlow> = + MutableStateFlow>(PagingData.empty()) + val historyList: StateFlow> = _historyList.asStateFlow() + + fun sensorHistoryList() { + viewModelScope.launch { + getSensorHistoryListUseCase.invoke().cachedIn(viewModelScope).collectLatest { + _historyList.emit(it) + } + } + } + + fun deleteSensorHistory(sensorHistory: SensorHistory){ + viewModelScope.launch { + deleteSensorHistoryUseCase(sensorHistory) + } } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sensor_history_list.xml b/app/src/main/res/layout/fragment_sensor_history_list.xml index c1fcf3e..21a8883 100644 --- a/app/src/main/res/layout/fragment_sensor_history_list.xml +++ b/app/src/main/res/layout/fragment_sensor_history_list.xml @@ -57,6 +57,7 @@ android:id="@+id/history_list_rv" android:layout_width="match_parent" android:layout_height="0dp" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/cl_main" tools:listitem="@layout/item_history_rv" /> diff --git a/app/src/main/res/layout/item_history_rv.xml b/app/src/main/res/layout/item_history_rv.xml index 53803bf..1f757e4 100644 --- a/app/src/main/res/layout/item_history_rv.xml +++ b/app/src/main/res/layout/item_history_rv.xml @@ -2,9 +2,15 @@ + + + android:layout_marginVertical="20dp" + android:id="@+id/rv_item"> @@ -31,8 +38,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{data.type}" - android:layout_marginStart="30dp" - android:textSize="30sp" + android:layout_marginStart="20dp" + android:textSize="20sp" app:layout_constraintTop_toBottomOf="@id/rv_date" app:layout_constraintStart_toStartOf="parent" tools:text="Gyro"/> @@ -42,11 +49,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{String.valueOf(data.period)}" - android:textSize="40sp" - android:layout_marginStart="10dp" + android:textSize="25sp" + android:layout_marginEnd="15dp" android:layout_marginTop="10dp" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintStart_toEndOf="@id/rv_date" + app:layout_constraintEnd_toStartOf="@id/rv_btn_play" tools:text="20.0"/>