Skip to content

Commit

Permalink
fix(android): show full list of opponents in opponent picker
Browse files Browse the repository at this point in the history
  • Loading branch information
autoreleasefool committed Sep 4, 2024
1 parent 3c1342e commit e77d930
Show file tree
Hide file tree
Showing 12 changed files with 50 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ca.josephroque.bowlingcompanion.navigation.graph

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.feature.accessoriesoverview.navigation.accessoriesScreen
import ca.josephroque.bowlingcompanion.feature.accessoriesoverview.navigation.navigateToAccessoriesOnboarding
import ca.josephroque.bowlingcompanion.feature.alleyform.navigation.alleyFormScreen
Expand Down Expand Up @@ -57,6 +58,7 @@ fun NavGraphBuilder.accessoriesGraph(navController: NavController) {
selectedIds = owner?.let { setOf(it) } ?: emptySet(),
limit = 1,
navResultCallback = result,
kind = BowlerKind.PLAYABLE,
)
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ca.josephroque.bowlingcompanion.navigation.graph

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.LeagueRecurrence
import ca.josephroque.bowlingcompanion.core.navigation.popBackStackWithResult
import ca.josephroque.bowlingcompanion.feature.accessoriesoverview.navigation.accessoriesOnboardingSheet
Expand Down Expand Up @@ -41,6 +42,7 @@ fun NavGraphBuilder.bottomSheetGraph(navController: NavController) {
hiddenIds = excluded,
limit = 1,
navResultCallback = result,
kind = BowlerKind.PLAYABLE,
)
},
onPickLeague = { bowler, league, result ->
Expand All @@ -64,6 +66,7 @@ fun NavGraphBuilder.bottomSheetGraph(navController: NavController) {
selectedIds = bowler?.let { setOf(it) } ?: emptySet(),
limit = 1,
navResultCallback = result,
kind = BowlerKind.PLAYABLE,
)
},
onPickLeague = { bowler, league, result ->
Expand Down Expand Up @@ -111,6 +114,7 @@ fun NavGraphBuilder.bottomSheetGraph(navController: NavController) {
selectedIds = opponent?.let { setOf(it) } ?: emptySet(),
limit = 1,
navResultCallback = result,
kind = BowlerKind.OPPONENT,
)
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,7 @@ class SQLiteMigrationService @Inject constructor(
.getMatchPlaysForGames(gameIdMappings.values)
.associateBy { it.gameId }
val existingBowlers = bowlerDao
.getBowlersList(sortOrder = BowlerSortOrder.ALPHABETICAL)
.getBowlersList(kind = BowlerKind.PLAYABLE, sortOrder = BowlerSortOrder.ALPHABETICAL)
.first()
.associateBy { it.name.lowercase() }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ca.josephroque.bowlingcompanion.core.model.ArchivedBowler
import ca.josephroque.bowlingcompanion.core.model.BowlerCreate
import ca.josephroque.bowlingcompanion.core.model.BowlerDetails
import ca.josephroque.bowlingcompanion.core.model.BowlerID
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.BowlerListItem
import ca.josephroque.bowlingcompanion.core.model.BowlerSortOrder
import ca.josephroque.bowlingcompanion.core.model.BowlerSummary
Expand All @@ -16,6 +17,7 @@ import kotlinx.coroutines.flow.Flow

interface BowlersRepository {
fun getBowlersList(
kind: BowlerKind?,
sortOrder: BowlerSortOrder = BowlerSortOrder.ALPHABETICAL,
): Flow<List<BowlerListItem>>
fun getOpponentsList(): Flow<List<OpponentListItem>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,10 @@ class OfflineFirstBowlersRepository @Inject constructor(
.map(SeriesBowlerSummary::asSummary)
}

override fun getBowlersList(sortOrder: BowlerSortOrder): Flow<List<BowlerListItem>> =
bowlerDao.getBowlersList(sortOrder = sortOrder)
override fun getBowlersList(
kind: BowlerKind?,
sortOrder: BowlerSortOrder,
): Flow<List<BowlerListItem>> = bowlerDao.getBowlersList(kind = kind, sortOrder = sortOrder)

override fun getOpponentsList(): Flow<List<OpponentListItem>> = bowlerDao.getOpponentsList()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import ca.josephroque.bowlingcompanion.core.data.queries.statistics.perFrameConf
import ca.josephroque.bowlingcompanion.core.data.queries.statistics.perGameConfiguration
import ca.josephroque.bowlingcompanion.core.data.queries.statistics.perSeriesConfiguration
import ca.josephroque.bowlingcompanion.core.database.dao.StatisticsDao
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.TrackableFilter
import ca.josephroque.bowlingcompanion.core.model.UserData
import ca.josephroque.bowlingcompanion.core.statistics.R
Expand Down Expand Up @@ -47,7 +48,7 @@ class OfflineFirstStatisticsRepository @Inject constructor(
override suspend fun getDefaultSource(): TrackableFilter.SourceSummaries? = withContext(
ioDispatcher,
) {
val bowlers = bowlersRepository.getBowlersList().first()
val bowlers = bowlersRepository.getBowlersList(kind = BowlerKind.PLAYABLE).first()
if (bowlers.size != 1) return@withContext null

TrackableFilter.SourceSummaries(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import ca.josephroque.bowlingcompanion.core.database.model.BowlerUpdateEntity
import ca.josephroque.bowlingcompanion.core.model.ArchivedBowler
import ca.josephroque.bowlingcompanion.core.model.BowlerDetails
import ca.josephroque.bowlingcompanion.core.model.BowlerID
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.BowlerListItem
import ca.josephroque.bowlingcompanion.core.model.BowlerSortOrder
import ca.josephroque.bowlingcompanion.core.model.BowlerSummary
Expand Down Expand Up @@ -79,14 +80,17 @@ abstract class BowlerDao : LegacyMigratingDao<BowlerEntity> {
AND (games.exclude_from_statistics = 'INCLUDE' OR games.exclude_from_statistics IS NULL)
AND (games.score > 0 OR games.score IS NULL)
AND games.archived_on IS NULL
WHERE bowlers.kind = 'PLAYABLE' AND bowlers.archived_on IS NULL
WHERE (:kind IS NULL OR bowlers.kind = :kind) AND bowlers.archived_on IS NULL
GROUP BY bowlers.id
ORDER BY
CASE WHEN :sortOrder = 'MOST_RECENTLY_USED' THEN lastSeriesDate END DESC,
CASE WHEN :sortOrder = 'ALPHABETICAL' THEN bowlers.name END ASC
""",
)
abstract fun getBowlersList(sortOrder: BowlerSortOrder): Flow<List<BowlerListItem>>
abstract fun getBowlersList(
kind: BowlerKind?,
sortOrder: BowlerSortOrder,
): Flow<List<BowlerListItem>>

@Query(
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class OverviewViewModel @Inject constructor(
private val bowlerSortOrder = MutableStateFlow(BowlerSortOrder.MOST_RECENTLY_USED)

private val bowlers = bowlerSortOrder.flatMapLatest { sortOrder ->
bowlersRepository.getBowlersList(sortOrder)
bowlersRepository.getBowlersList(kind = BowlerKind.PLAYABLE, sortOrder)
}

private val bowlersListState: Flow<BowlersListUiState> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import ca.josephroque.bowlingcompanion.core.data.repository.LanesRepository
import ca.josephroque.bowlingcompanion.core.data.repository.LeaguesRepository
import ca.josephroque.bowlingcompanion.core.data.repository.SeriesRepository
import ca.josephroque.bowlingcompanion.core.model.AlleyID
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.GearKind
import ca.josephroque.bowlingcompanion.core.model.ResourcePickerType
import ca.josephroque.bowlingcompanion.core.model.SeriesID
Expand Down Expand Up @@ -66,12 +67,16 @@ class ResourcePickerViewModel @Inject constructor(
ResourcePickerType.LANE -> ResourcePickerFilter.Alley(AlleyID.fromString(it))
ResourcePickerType.SERIES -> ResourcePickerFilter.Str(it)
ResourcePickerType.GAME -> ResourcePickerFilter.Series(SeriesID.fromString(it))
ResourcePickerType.BOWLER, ResourcePickerType.ALLEY -> null
ResourcePickerType.BOWLER -> ResourcePickerFilter.BowlerKind(BowlerKind.valueOf(it))
ResourcePickerType.ALLEY -> null
}
}

private val dataProvider: ResourcePickerDataProvider = when (resourceType) {
ResourcePickerType.BOWLER -> BowlerPickerDataProvider(bowlersRepository)
ResourcePickerType.BOWLER -> BowlerPickerDataProvider(
bowlersRepository,
(filter as? ResourcePickerFilter.BowlerKind)?.kind,
)
ResourcePickerType.LEAGUE -> LeaguePickerDataProvider(
leaguesRepository,
(filter as? ResourcePickerFilter.Str)?.value ?: "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
package ca.josephroque.bowlingcompanion.feature.resourcepicker.data

import ca.josephroque.bowlingcompanion.core.data.repository.BowlersRepository
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.BowlerSummary
import ca.josephroque.bowlingcompanion.feature.resourcepicker.ui.ResourceItem
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map

class BowlerPickerDataProvider @Inject constructor(
private val bowlersRepository: BowlersRepository,
bowlersRepository: BowlersRepository,
kind: BowlerKind?,
) : ResourcePickerDataProvider {
override suspend fun loadResources(): List<ResourceItem> = bowlersRepository.getBowlersList()
private val bowlers: Flow<List<BowlerSummary>> = when (kind) {
BowlerKind.OPPONENT -> bowlersRepository.getOpponentsList().map { opponents ->
opponents.map { BowlerSummary(it.id, it.name) }
}
BowlerKind.PLAYABLE, null -> bowlersRepository.getBowlersList(kind).map { bowlers ->
bowlers.map { BowlerSummary(it.id, it.name) }
}
}

override suspend fun loadResources(): List<ResourceItem> = bowlers
.map { bowlers -> bowlers.map { ResourceItem.Bowler(it.id, it.name) } }
.first()
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.navigation.NavType
import androidx.navigation.navArgument
import ca.josephroque.bowlingcompanion.core.model.AlleyID
import ca.josephroque.bowlingcompanion.core.model.BowlerID
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.GameID
import ca.josephroque.bowlingcompanion.core.model.GearID
import ca.josephroque.bowlingcompanion.core.model.GearKind
Expand All @@ -29,13 +30,15 @@ fun NavController.navigateToBowlerPickerForResult(
selectedIds: Set<BowlerID>,
hiddenIds: Set<BowlerID> = emptySet(),
limit: Int = 0,
kind: BowlerKind? = null,
navResultCallback: NavResultCallback<Set<BowlerID>>,
navOptions: NavOptions? = null,
) {
this.navigateToResourcePickerForResult(
selectedIds = selectedIds.map { it.value }.toSet(),
hiddenIds = hiddenIds.map { it.value }.toSet(),
limit = limit,
filter = kind?.name,
resourceType = ResourcePickerType.BOWLER,
navResultCallback = @JvmSerializableLambda { ids ->
navResultCallback(ids.map { BowlerID(it) }.toSet())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ca.josephroque.bowlingcompanion.core.common.utils.simpleFormat
import ca.josephroque.bowlingcompanion.core.model.AlleyID
import ca.josephroque.bowlingcompanion.core.model.Avatar
import ca.josephroque.bowlingcompanion.core.model.BowlerID
import ca.josephroque.bowlingcompanion.core.model.BowlerKind
import ca.josephroque.bowlingcompanion.core.model.GameID
import ca.josephroque.bowlingcompanion.core.model.GearKind
import ca.josephroque.bowlingcompanion.core.model.LaneID
Expand All @@ -21,6 +22,8 @@ sealed interface ResourcePickerFilter {
data class Series(val id: SeriesID) : ResourcePickerFilter
data class Gear(val kind: GearKind) : ResourcePickerFilter
data class Alley(val id: AlleyID) : ResourcePickerFilter
data class BowlerKind(val kind: ca.josephroque.bowlingcompanion.core.model.BowlerKind) :
ResourcePickerFilter
}

sealed interface ResourceItem {
Expand Down

0 comments on commit e77d930

Please sign in to comment.