Skip to content

Commit

Permalink
app: add delete saved news 3
Browse files Browse the repository at this point in the history
  • Loading branch information
FireLord committed Apr 22, 2023
1 parent 1ac3674 commit 8313df4
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 6 deletions.
33 changes: 33 additions & 0 deletions app/src/main/java/com/firelord/slidenews/SavedFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.firelord.slidenews.databinding.FragmentSavedBinding
import com.firelord.slidenews.presentation.adapter.NewsAdapter
import com.firelord.slidenews.presentation.viewModel.NewsViewModel
import com.google.android.material.snackbar.Snackbar

class SavedFragment : Fragment() {
private lateinit var fragmentSavedBinding: FragmentSavedBinding
Expand Down Expand Up @@ -42,6 +45,36 @@ class SavedFragment : Fragment() {
newsAdapter.differ.submitList(it)

}

val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(
ItemTouchHelper.UP or ItemTouchHelper.DOWN,
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
){
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return true
}

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.adapterPosition
val article = newsAdapter.differ.currentList[position]
viewModel.deleteArticle(article)
Snackbar.make(view,"Deleted Successfully",Snackbar.LENGTH_LONG)
.apply {
setAction("Undo"){
viewModel.saveArticle(article)
}
show()
}
}

}
ItemTouchHelper(itemTouchHelperCallback).apply {
attachToRecyclerView(fragmentSavedBinding.rvSaved)
}
}

private fun initRecyclerView(){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.firelord.slidenews.data.db

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
Expand All @@ -15,4 +16,7 @@ interface ArticleDAO {

@Query("SELECT * FROM articles")
fun getAllArticles():Flow<List<Article>>

@Delete
suspend fun deleteArticle(article: Article)
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class NewsRepositoryImpl(
}

override suspend fun deleteNews(article: Article) {
TODO("Not yet implemented")
newsLocalDataSource.deleteArticlesFromDB(article)
}

override fun getSavedNews(): Flow<List<Article>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ import kotlinx.coroutines.flow.Flow
interface NewsLocalDataSource {
suspend fun saveArticleToDB(article: Article)
fun getSavedArticles():Flow<List<Article>>
suspend fun deleteArticlesFromDB(article: Article)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ class NewsLocalDataSourceImpl(
return articleDAO.getAllArticles()
}

override suspend fun deleteArticlesFromDB(article: Article) {
articleDAO.deleteArticle(article)
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.firelord.slidenews.presentation.di

import android.app.Application
import com.firelord.slidenews.domain.usecase.DeleteSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetNewsHeadlinesUseCase
import com.firelord.slidenews.domain.usecase.GetSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetSearchedNewsUseCase
Expand All @@ -23,14 +24,16 @@ class FactoryModule {
getNewsHeadlinesUseCase: GetNewsHeadlinesUseCase,
getSearchedNewsUseCase: GetSearchedNewsUseCase,
saveNewsUseCase: SaveNewsUseCase,
getSavedNewsUseCase: GetSavedNewsUseCase
getSavedNewsUseCase: GetSavedNewsUseCase,
deleteSavedNewsUseCase: DeleteSavedNewsUseCase
):NewsViewModelFactory{
return NewsViewModelFactory(
application,
getNewsHeadlinesUseCase,
getSearchedNewsUseCase,
saveNewsUseCase,
getSavedNewsUseCase
getSavedNewsUseCase,
deleteSavedNewsUseCase
)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.firelord.slidenews.presentation.di

import com.firelord.slidenews.domain.repository.NewsRepository
import com.firelord.slidenews.domain.usecase.DeleteSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetNewsHeadlinesUseCase
import com.firelord.slidenews.domain.usecase.GetSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetSearchedNewsUseCase
Expand Down Expand Up @@ -46,4 +47,12 @@ class UseCaseModule {
): GetSavedNewsUseCase {
return GetSavedNewsUseCase(newsRepository)
}

@Singleton
@Provides
fun provideDeleteSavedNewsUseCase(
newsRepository: NewsRepository
): DeleteSavedNewsUseCase {
return DeleteSavedNewsUseCase(newsRepository)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import androidx.lifecycle.viewModelScope
import com.firelord.slidenews.data.model.APIResponse
import com.firelord.slidenews.data.model.Article
import com.firelord.slidenews.data.util.Resource
import com.firelord.slidenews.domain.usecase.DeleteSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetNewsHeadlinesUseCase
import com.firelord.slidenews.domain.usecase.GetSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetSearchedNewsUseCase
Expand All @@ -27,7 +28,8 @@ class NewsViewModel(
private val getNewsHeadlinesUseCase: GetNewsHeadlinesUseCase,
private val getSearchedNewsUseCase: GetSearchedNewsUseCase,
private val saveNewsUseCase: SaveNewsUseCase,
private val getSavedNewsUseCase: GetSavedNewsUseCase
private val getSavedNewsUseCase: GetSavedNewsUseCase,
private val deleteSavedNewsUseCase: DeleteSavedNewsUseCase
) : AndroidViewModel(app) {
val newsHeadLines : MutableLiveData<Resource<APIResponse>> = MutableLiveData()

Expand Down Expand Up @@ -108,4 +110,8 @@ class NewsViewModel(
emit(it)
}
}

fun deleteArticle(article: Article) = viewModelScope.launch {
deleteSavedNewsUseCase.execute(article)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.firelord.slidenews.presentation.viewModel
import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.firelord.slidenews.domain.usecase.DeleteSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetNewsHeadlinesUseCase
import com.firelord.slidenews.domain.usecase.GetSavedNewsUseCase
import com.firelord.slidenews.domain.usecase.GetSearchedNewsUseCase
Expand All @@ -13,9 +14,10 @@ class NewsViewModelFactory(
private val getNewsHeadlinesUseCase: GetNewsHeadlinesUseCase,
private val getSearchedNewsUseCase: GetSearchedNewsUseCase,
private val saveNewsUseCase: SaveNewsUseCase,
private val getSavedNewsUseCase: GetSavedNewsUseCase
private val getSavedNewsUseCase: GetSavedNewsUseCase,
private val deleteSavedNewsUseCase: DeleteSavedNewsUseCase
):ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return NewsViewModel(app, getNewsHeadlinesUseCase, getSearchedNewsUseCase, saveNewsUseCase, getSavedNewsUseCase) as T
return NewsViewModel(app, getNewsHeadlinesUseCase, getSearchedNewsUseCase, saveNewsUseCase, getSavedNewsUseCase, deleteSavedNewsUseCase) as T
}
}

0 comments on commit 8313df4

Please sign in to comment.