Skip to content

Commit b05a9e1

Browse files
authored
Merge pull request #12 from dessalines/add_stat_clearing
Add stat clearing
2 parents 00b7566 + 9560404 commit b05a9e1

File tree

5 files changed

+51
-3
lines changed

5 files changed

+51
-3
lines changed

app/src/main/java/com/dessalines/rankmyfavs/MainActivity.kt

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class MainActivity : AppCompatActivity() {
101101
navController = navController,
102102
favListViewModel = favListViewModel,
103103
favListItemViewModel = favListItemViewModel,
104+
favListMatchViewModel = favListMatchViewModel,
104105
id = id,
105106
)
106107
}

app/src/main/java/com/dessalines/rankmyfavs/db/FavListItem.kt

+16-3
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,6 @@ interface FavListItemDao {
133133
@Query("SELECT * FROM FavListItem where id = :favListItemId")
134134
fun getById(favListItemId: Int): FavListItem
135135

136-
// TODO
137-
// @Query("SELECT * FROM FavListItem where fav_list_id = :favListId ORDER BY RANDOM() LIMIT 2")
138-
// The deviation decreases after each
139136
// The first option is the one with the lowest glicko_deviation, and a stop gap.
140137
// The second option is a random one.
141138

@@ -173,6 +170,18 @@ interface FavListItemDao {
173170
@Update(entity = FavListItem::class)
174171
suspend fun updateStats(favListItem: FavListItemUpdateStats)
175172

173+
@Query(
174+
"""
175+
UPDATE FavListItem
176+
SET win_rate = $DEFAULT_WIN_RATE,
177+
glicko_rating = $DEFAULT_GLICKO_RATING,
178+
glicko_deviation = $DEFAULT_GLICKO_DEVIATION,
179+
glicko_volatility = $DEFAULT_GLICKO_VOLATILITY
180+
WHERE fav_list_id = :favListId
181+
""",
182+
)
183+
fun clearStatsForList(favListId: Int)
184+
176185
@Delete
177186
suspend fun delete(favListItem: FavListItem)
178187
}
@@ -203,6 +212,8 @@ class FavListItemRepository(
203212
@WorkerThread
204213
suspend fun updateStats(favListItem: FavListItemUpdateStats) = favListItemDao.updateStats(favListItem)
205214

215+
fun clearStatsForList(favListId: Int) = favListItemDao.clearStatsForList(favListId)
216+
206217
@WorkerThread
207218
suspend fun delete(favListItem: FavListItem) = favListItemDao.delete(favListItem)
208219
}
@@ -233,6 +244,8 @@ class FavListItemViewModel(
233244
repository.updateStats(favListItem)
234245
}
235246

247+
fun clearStatsForList(favListId: Int) = repository.clearStatsForList(favListId)
248+
236249
fun delete(favListItem: FavListItem) =
237250
viewModelScope.launch {
238251
repository.delete(favListItem)

app/src/main/java/com/dessalines/rankmyfavs/db/FavListMatch.kt

+17
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ interface FavListMatchDao {
8989

9090
@Delete
9191
suspend fun delete(match: FavListMatch)
92+
93+
@Query(
94+
"""
95+
DELETE FROM FavListMatch
96+
WHERE item_id_1 in ( select id from FavListItem WHERE fav_list_id = :favListId)
97+
or item_id_2 in ( select id from FavListItem WHERE fav_list_id = :favListId)
98+
""",
99+
)
100+
suspend fun deleteMatchesForList(favListId: Int)
92101
}
93102

94103
// Declares the DAO as a private property in the constructor. Pass in the DAO
@@ -104,6 +113,9 @@ class FavListMatchRepository(
104113

105114
@WorkerThread
106115
suspend fun delete(match: FavListMatch) = favListDao.delete(match)
116+
117+
@WorkerThread
118+
suspend fun deleteMatchesForList(favListId: Int) = favListDao.deleteMatchesForList(favListId)
107119
}
108120

109121
class FavListMatchViewModel(
@@ -117,6 +129,11 @@ class FavListMatchViewModel(
117129
viewModelScope.launch {
118130
repository.delete(match)
119131
}
132+
133+
fun deleteMatchesForList(favListId: Int) =
134+
viewModelScope.launch {
135+
repository.deleteMatchesForList(favListId)
136+
}
120137
}
121138

122139
class FavListMatchViewModelFactory(

app/src/main/java/com/dessalines/rankmyfavs/ui/components/favlist/FavListDetailScreen.kt

+16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.items
99
import androidx.compose.foundation.shape.CircleShape
1010
import androidx.compose.material.icons.Icons
1111
import androidx.compose.material.icons.outlined.Add
12+
import androidx.compose.material.icons.outlined.ClearAll
1213
import androidx.compose.material.icons.outlined.Delete
1314
import androidx.compose.material.icons.outlined.Edit
1415
import androidx.compose.material.icons.outlined.Reviews
@@ -36,6 +37,7 @@ import com.dessalines.rankmyfavs.R
3637
import com.dessalines.rankmyfavs.db.FavList
3738
import com.dessalines.rankmyfavs.db.FavListItem
3839
import com.dessalines.rankmyfavs.db.FavListItemViewModel
40+
import com.dessalines.rankmyfavs.db.FavListMatchViewModel
3941
import com.dessalines.rankmyfavs.db.FavListViewModel
4042
import com.dessalines.rankmyfavs.db.sampleFavListItem
4143
import com.dessalines.rankmyfavs.ui.components.common.LARGE_PADDING
@@ -50,6 +52,7 @@ fun FavListDetailScreen(
5052
navController: NavController,
5153
favListViewModel: FavListViewModel,
5254
favListItemViewModel: FavListItemViewModel,
55+
favListMatchViewModel: FavListMatchViewModel,
5356
id: Int,
5457
) {
5558
val ctx = LocalContext.current
@@ -118,6 +121,19 @@ fun FavListDetailScreen(
118121
contentDescription = stringResource(R.string.edit_list),
119122
)
120123
}
124+
val clearStatsMessage = stringResource(R.string.clear_stats)
125+
IconButton(
126+
onClick = {
127+
favListItemViewModel.clearStatsForList(favListId = id)
128+
favListMatchViewModel.deleteMatchesForList(favListId = id)
129+
Toast.makeText(ctx, clearStatsMessage, Toast.LENGTH_SHORT).show()
130+
},
131+
) {
132+
Icon(
133+
Icons.Outlined.ClearAll,
134+
contentDescription = stringResource(R.string.clear_stats),
135+
)
136+
}
121137
val deletedMessage = stringResource(R.string.list_deleted)
122138
IconButton(
123139
onClick = {

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,5 @@
4444
<string name="no_items">No Items. Create one to get started.</string>
4545
<string name="no_lists">No lists. Create one to get started.</string>
4646
<string name="what_do_these_numbers_mean">What do these numbers mean?</string>
47+
<string name="clear_stats">Clear Stats</string>
4748
</resources>

0 commit comments

Comments
 (0)