Skip to content

Commit b1b846e

Browse files
committed
fix bug not finished
1 parent 7809283 commit b1b846e

File tree

6 files changed

+70
-19
lines changed

6 files changed

+70
-19
lines changed

app/src/main/java/com/riyaldi/gamekuy/detail/DetailActivity.kt

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import androidx.activity.viewModels
66
import androidx.appcompat.app.AppCompatActivity
77
import androidx.core.content.ContextCompat
88
import androidx.core.view.isVisible
9+
import androidx.lifecycle.lifecycleScope
10+
import androidx.lifecycle.map
911
import com.bumptech.glide.Glide
1012
import com.google.android.material.appbar.AppBarLayout
1113
import com.riyaldi.core.data.Resource
1214
import com.riyaldi.core.domain.model.Game
1315
import com.riyaldi.gamekuy.R
1416
import com.riyaldi.gamekuy.databinding.ActivityDetailBinding
1517
import dagger.hilt.android.AndroidEntryPoint
18+
import kotlinx.coroutines.flow.map
19+
import kotlinx.coroutines.launch
1620
import kotlin.math.abs
1721

1822
@AndroidEntryPoint
@@ -21,6 +25,7 @@ class DetailActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListener
2125
private val detailViewModel: DetailViewModel by viewModels()
2226

2327
private lateinit var binding: ActivityDetailBinding
28+
private lateinit var dataGame: Game
2429

2530
companion object {
2631
const val EXTRA_GAME = "extra_game"
@@ -37,26 +42,66 @@ class DetailActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListener
3742
val game = intent.getParcelableExtra<Game>(EXTRA_GAME)
3843

3944
if (game != null) {
40-
detailViewModel.getDetailFilm(game.id).observe(this, { detailGame ->
41-
when(detailGame) {
42-
is Resource.Loading -> showLoading(true)
43-
is Resource.Success -> {
44-
val dataGame = detailGame.data as Game
45-
setFavoriteState(dataGame.isFavorite)
46-
populateData(dataGame)
47-
showLoading(false)
48-
binding.fabAddFavorite.setOnClickListener {
49-
detailViewModel.setFavoriteGame(dataGame)
45+
var isFav = true
46+
47+
lifecycleScope.launch {
48+
isFav = detailViewModel.isFavorite(game.id) as Boolean
49+
}
50+
Toast.makeText(this@DetailActivity, isFav.toString(), Toast.LENGTH_SHORT).show()
51+
52+
if (isFav) {
53+
var isChanged = false
54+
55+
detailViewModel.getDetailFilm(game.id).observe(this, { detailGame ->
56+
when (detailGame) {
57+
is Resource.Loading -> showLoading(true)
58+
is Resource.Success -> {
59+
dataGame = detailGame.data as Game
60+
61+
if (dataGame.isFavorite != isFav && !isChanged) {
62+
detailViewModel.setFavoriteGame(dataGame)
63+
setFavoriteState(dataGame.isFavorite)
64+
isChanged = true
65+
}
66+
67+
populateData(dataGame)
68+
showLoading(false)
69+
5070
setFavoriteState(dataGame.isFavorite)
71+
binding.fabAddFavorite.setOnClickListener {
72+
detailViewModel.setFavoriteGame(dataGame)
73+
setFavoriteState(dataGame.isFavorite)
74+
}
75+
}
76+
is Resource.Error -> {
77+
Toast.makeText(this, "error : ${detailGame.message}", Toast.LENGTH_SHORT).show()
78+
showLoading(false)
5179
}
5280
}
53-
is Resource.Error -> {
54-
Toast.makeText(this, "error : ${detailGame.message}", Toast.LENGTH_SHORT).show()
55-
showLoading(false)
56-
}
57-
}
58-
})
81+
})
82+
} else {
83+
detailViewModel.getDetailFilm(game.id).observe(this, { detailGame ->
84+
when (detailGame) {
85+
is Resource.Loading -> showLoading(true)
86+
is Resource.Success -> {
87+
dataGame = detailGame.data as Game
88+
89+
populateData(dataGame)
90+
showLoading(false)
5991

92+
setFavoriteState(dataGame.isFavorite)
93+
binding.fabAddFavorite.setOnClickListener {
94+
detailViewModel.setFavoriteGame(dataGame)
95+
setFavoriteState(dataGame.isFavorite)
96+
}
97+
}
98+
is Resource.Error -> {
99+
Toast.makeText(this, "error : ${detailGame.message}", Toast.LENGTH_SHORT).show()
100+
showLoading(false)
101+
}
102+
}
103+
})
104+
}
60105
}
61106
}
62107

app/src/main/java/com/riyaldi/gamekuy/detail/DetailViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ import com.riyaldi.core.domain.usecase.GameUseCase
99
class DetailViewModel @ViewModelInject constructor(private val gameUseCase: GameUseCase): ViewModel() {
1010
fun getDetailFilm(id: Int) = gameUseCase.getDetailGame(id).asLiveData()
1111
fun setFavoriteGame(game: Game) = gameUseCase.setFavoriteGame(game)
12+
suspend fun isFavorite(id: Int) = gameUseCase.isFavorite(id)
1213
}

core/src/main/java/com/riyaldi/core/data/GameRepositoryImpl.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.riyaldi.core.data
22

3-
import android.util.Log
43
import com.riyaldi.core.data.source.local.LocalDataSource
54
import com.riyaldi.core.data.source.local.entity.GameEntity
65
import com.riyaldi.core.data.source.remote.RemoteDataSource
@@ -63,7 +62,6 @@ class GameRepositoryImpl @Inject constructor(
6362
}
6463

6564
override fun shouldFetch(data: Game?): Boolean {
66-
Log.d("DetailActivity", "repository : ${data?.description == ""}")
6765
return data?.description == "" || data == null
6866
}
6967

@@ -76,6 +74,11 @@ class GameRepositoryImpl @Inject constructor(
7674
}
7775
}.asFlow() as Flow<Resource<Game>>
7876

77+
override suspend fun isFavorite(id: Int): Boolean? {
78+
79+
return localDataSource.getGameById(id)?.first()?.isFavorite
80+
}
81+
7982
override fun setFavoriteGame(game: Game) {
8083
val gameEntity = DataMapper.mapDomainToEntity(game)
8184
gameEntity.isFavorite = !gameEntity.isFavorite

core/src/main/java/com/riyaldi/core/domain/repository/GameRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.riyaldi.core.domain.repository
22

33
import com.riyaldi.core.data.Resource
4-
import com.riyaldi.core.data.source.local.entity.GameEntity
54
import com.riyaldi.core.domain.model.Game
65
import kotlinx.coroutines.flow.Flow
76

87
interface GameRepository {
98
fun getGames(): Flow<Resource<List<Game>>>
109
fun getFavoriteGames(): Flow<List<Game>>
1110
fun getDetailGame(id: Int): Flow<Resource<Game>>
11+
suspend fun isFavorite(id: Int): Boolean?
1212
fun setFavoriteGame(game: Game)
1313
suspend fun searchGames(query: String): Resource<List<Game>>
1414
suspend fun insertGame(game: Game)

core/src/main/java/com/riyaldi/core/domain/usecase/GameUseCase.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ interface GameUseCase {
99
fun getGames(): Flow<Resource<List<Game>>>
1010
fun getFavoriteGames(): Flow<List<Game>>
1111
fun getDetailGame(id: Int): Flow<Resource<Game>>
12+
suspend fun isFavorite(id: Int): Boolean?
1213
fun setFavoriteGame(game: Game)
1314
suspend fun searchGames(query: String): Resource<List<Game>>
1415
suspend fun insertGame(game: Game)

core/src/main/java/com/riyaldi/core/domain/usecase/GameUseCaseImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class GameUseCaseImpl @Inject constructor(private val gameRepository: GameReposi
1111
override fun getGames() = gameRepository.getGames()
1212
override fun getFavoriteGames() = gameRepository.getFavoriteGames()
1313
override fun getDetailGame(id: Int) = gameRepository.getDetailGame(id)
14+
override suspend fun isFavorite(id: Int): Boolean? = gameRepository.isFavorite(id)
1415
override fun setFavoriteGame(game: Game) = gameRepository.setFavoriteGame(game)
1516
override suspend fun searchGames(query: String): Resource<List<Game>> = gameRepository.searchGames(query)
1617
override suspend fun insertGame(game: Game) = gameRepository.insertGame(game)

0 commit comments

Comments
 (0)