Skip to content

Commit

Permalink
#14: Add option to Delete/Cancel game
Browse files Browse the repository at this point in the history
  • Loading branch information
Entreco committed Nov 23, 2018
1 parent 414033c commit 36fad17
Show file tree
Hide file tree
Showing 15 changed files with 89 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,21 @@ class DialogHelper @Inject constructor(private val builder: AlertDialog.Builder,
.inflate(R.layout.dialog_connect_stream, null, false)
}

fun showConfirmDeleteDialog(onConfirmed: ()->Unit){
builder
.setTitle(R.string.confirm_delete_title)
.setMessage(R.string.confirm_delete_message)
.setPositiveButton(android.R.string.ok) { dialog, _ ->
dialog.dismiss()
onConfirmed()
}
.setNegativeButton(R.string.cancel) { dialog, _ ->
dialog.dismiss()
}
.create()
.show()
}

fun showRatingDialog() {
builder
.setTitle(R.string.rating_title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@ import nl.entreco.dartsscorecard.di.play.Play01Module
import nl.entreco.dartsscorecard.play.input.InputViewModel
import nl.entreco.dartsscorecard.play.live.LiveStatViewModel
import nl.entreco.dartsscorecard.play.score.ScoreViewModel
import nl.entreco.dartsscorecard.play.stream.StreamFragment
import nl.entreco.dartsscorecard.play.stream.ControlStreamViewModel
import nl.entreco.dartsscorecard.play.stream.StreamFragment
import nl.entreco.domain.play.finish.GetFinishUsecase
import nl.entreco.domain.play.start.Play01Request
import nl.entreco.domain.setup.game.CreateGameResponse
import nl.entreco.domain.streaming.Connected
import nl.entreco.domain.streaming.ConnectionState
import org.webrtc.PeerConnection

class Play01Activity : ViewModelActivity(), StreamFragment.Listener {

Expand Down Expand Up @@ -68,7 +67,7 @@ class Play01Activity : ViewModelActivity(), StreamFragment.Listener {

override fun onConnectionStateChanged(connectionState: ConnectionState) {
controlStreamViewModel.connectionState(connectionState)
when(connectionState) {
when (connectionState) {
// Add DataMessenger to ScoreViewModel
is Connected -> {
controlStreamViewModel.setStreamController(navigator.streamController())
Expand Down Expand Up @@ -122,6 +121,11 @@ class Play01Activity : ViewModelActivity(), StreamFragment.Listener {
R.id.menu_sound_settings -> {
viewModel.toggleMasterCaller(item)
}
R.id.menu_delete_match -> {
viewModel.askToDeleteMatch {
onBackPressed()
}
}
}
return super.onOptionsItemSelected(item)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@ import nl.entreco.domain.play.mastercaller.ToggleSoundUsecase
import nl.entreco.domain.play.revanche.RevancheRequest
import nl.entreco.domain.play.revanche.RevancheResponse
import nl.entreco.domain.play.revanche.RevancheUsecase
import nl.entreco.domain.play.start.MarkGameAsFinishedRequest
import nl.entreco.domain.play.start.Play01Request
import nl.entreco.domain.play.start.Play01Response
import nl.entreco.domain.play.start.Play01Usecase
import nl.entreco.domain.play.start.*
import nl.entreco.domain.play.stats.StoreTurnRequest
import nl.entreco.domain.play.stats.UndoTurnRequest
import nl.entreco.domain.play.stats.UndoTurnResponse
Expand Down Expand Up @@ -233,6 +230,16 @@ class Play01ViewModel @Inject constructor(private val playGameUsecase: Play01Use
toggleSoundUsecase.toggle()
}

fun askToDeleteMatch(onConfirm: ()->Unit){
dialogHelper.showConfirmDeleteDialog{
loading.set(true)
playGameUsecase.deleteMatch(DeleteGameRequest(game.id)) {
loading.set(false)
onConfirm()
}
}
}

override fun onCleared() {
load = null
loaders = null
Expand Down
3 changes: 3 additions & 0 deletions android/DartsScorecard/app/src/main/res/menu/play.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
<item
android:id="@+id/menu_play_settings"
android:title="@string/menu_title_swap" />
<item
android:id="@+id/menu_delete_match"
android:title="@string/menu_title_delete" />
<item
android:id="@+id/menu_faq"
android:icon="@drawable/ic_wtf"
Expand Down
2 changes: 2 additions & 0 deletions android/DartsScorecard/app/src/main/res/values-nl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@
<string name="rating_message">Heb je even om de app te beoordelen?\nDat zouden we enorm waarderen</string>
<string name="rating_never_ask_again">Nee</string>
<string name="rating_not_now">Nu ff niet</string>
<string name="confirm_delete_title">Deze Game verwijderen?</string>
<string name="confirm_delete_message">Je voortgang en statistieken voor deze Wedstrijd zullen worden verwijderd</string>

<!-- Game States -->
<string name="to_throw">to throw</string>
Expand Down
2 changes: 2 additions & 0 deletions android/DartsScorecard/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
<string name="rating_message">Do you have a second to rate our app?\nWe would really appreciate that</string>
<string name="rating_never_ask_again">Nope</string>
<string name="rating_not_now">Not now</string>
<string name="confirm_delete_title">Delete this Game?</string>
<string name="confirm_delete_message">All progress and stats for this Game will be removed</string>

<!-- Game States -->
<string name="to_throw">to throw</string>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="menu_title_delete" translatable="false">Delete Game</string>
<string name="menu_title_swap" translatable="false">Swap Theme</string>
<string name="menu_sound_swap" translatable="false">Master Caller</string>
<string name="menu_title_done" translatable="false">Done</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class LiveStatSlideAnimatorTest {
}

private fun givenSubject() {
subject = LiveStatSlideAnimator.MatchStatSlideAnimatorHandler(mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView)
subject = LiveStatSlideAnimator.MatchStatSlideAnimatorHandler(mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView, mockView)
}

private fun whenSliding() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ interface GameDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun create(game: GameTable): Long

@Delete
fun delete(vararg games: GameTable)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ import nl.entreco.domain.repository.GameRepository
/**
* Created by Entreco on 15/11/2017.
*/
class LocalGameRepository(db: DscDatabase, private val mapper: Mapper<GameTable, Game>) : GameRepository {
class LocalGameRepository(db: DscDatabase, private val mapper: Mapper<GameTable, Game>) :
GameRepository {

private val gameDao: GameDao = db.gameDao()

@Throws
@WorkerThread
override fun create(teams: String, startScore: Int, startIndex: Int, numLegs: Int, numSets: Int): Long {
override fun create(teams: String, startScore: Int, startIndex: Int, numLegs: Int,
numSets: Int): Long {
val table = GameTable()

table.teams = teams
Expand Down Expand Up @@ -46,8 +48,7 @@ class LocalGameRepository(db: DscDatabase, private val mapper: Mapper<GameTable,
@Throws
@WorkerThread
override fun fetchBy(id: Long): Game {
val gameTable = gameDao.fetchBy(id)
?: throw IllegalStateException("Game $id does not exist")
val gameTable = gameDao.fetchBy(id) ?: throw IllegalStateException("Game $id does not exist")
return mapper.to(gameTable)
}

Expand All @@ -71,4 +72,11 @@ class LocalGameRepository(db: DscDatabase, private val mapper: Mapper<GameTable,
override fun countFinishedGames(): Int {
return gameDao.fetchAll().count { it.finished }
}

@Throws
@WorkerThread
override fun delete(id: Long) {
val gameTable = gameDao.fetchBy(id) ?: throw IllegalStateException("Game $id does not exist")
gameDao.delete(gameTable)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package nl.entreco.domain.play.start

data class DeleteGameRequest(val gameId: Long)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package nl.entreco.domain.play.start

import nl.entreco.domain.Analytics
import nl.entreco.domain.BaseUsecase
import nl.entreco.domain.repository.GameRepository
import nl.entreco.shared.threading.Background
import nl.entreco.shared.threading.Foreground
import javax.inject.Inject

class DeleteGameUsecase @Inject constructor(private val gameRepository: GameRepository, private val analytics: Analytics, bg: Background, fg: Foreground) : BaseUsecase(bg, fg) {
fun exec(request: DeleteGameRequest, done: ()->Unit) {
onBackground({
analytics.trackAchievement("Game Abandoned & Deleted")
gameRepository.delete(request.gameId)
onUi { done() }
}, { onUi { done() }})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class Play01Usecase @Inject constructor(private val retrieveGameUsecase: Retriev
private val storeMetaUsecase: StoreMetaUsecase,
private val undoTurnUsecase: UndoTurnUsecase,
private val markGameAsFinishedUsecase: MarkGameAsFinishedUsecase,
private val deleteGameUsecase: DeleteGameUsecase,
private val logger: Logger) {

fun loadGameAndStart(req: Play01Request, done: (Play01Response) -> Unit, fail: (Throwable) -> Unit) {
Expand All @@ -36,6 +37,10 @@ class Play01Usecase @Inject constructor(private val retrieveGameUsecase: Retriev
markGameAsFinishedUsecase.exec(finishRequest)
}

fun deleteMatch(deleteRequest: DeleteGameRequest, done: ()->Unit){
deleteGameUsecase.exec(deleteRequest, done)
}

private fun onStoreTurnSuccess(gameId: Long, turnMeta: TurnMeta, done: (Long, Long) -> Unit) = { response: StoreTurnResponse ->
val metaRequest = StoreMetaRequest(response.turnId, gameId, response.turn, turnMeta)
storeMetaUsecase.exec(metaRequest, done, onFailed("Storing Stat failed $turnMeta"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,8 @@ interface GameRepository {
@Throws
@WorkerThread
fun countFinishedGames(): Int

@Throws
@WorkerThread
fun delete(id: Long)
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class Play01UsecaseTest {
@Mock private lateinit var mockStatsUc: StoreMetaUsecase
@Mock private lateinit var mockUndo: UndoTurnUsecase
@Mock private lateinit var mockMarkUc: MarkGameAsFinishedUsecase
@Mock private lateinit var mockDelUc: DeleteGameUsecase
@Mock private lateinit var mockLogger: Logger
@Mock private lateinit var mockGame: Game
@Mock private lateinit var mockDone: (Long, Long) -> Unit
Expand All @@ -56,7 +57,7 @@ class Play01UsecaseTest {

@Before
fun setUp() {
subject = Play01Usecase(mockGameUc, mockTurnsUc, mockTeamUc, mockTurnUc, mockStatsUc, mockUndo, mockMarkUc, mockLogger)
subject = Play01Usecase(mockGameUc, mockTurnsUc, mockTeamUc, mockTurnUc, mockStatsUc, mockUndo, mockMarkUc, mockDelUc, mockLogger)
}

@Test
Expand Down

0 comments on commit 36fad17

Please sign in to comment.