Skip to content

Commit 2d74b90

Browse files
committed
[Update] remove search for characters and comics
1 parent 9f4567c commit 2d74b90

32 files changed

Lines changed: 162 additions & 387 deletions

File tree

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeCharactersNetwork.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
3+
import com.rumosoft.characters.data.repository.CHARACTERS_LIMIT
44
import com.rumosoft.marvelapi.data.network.CharactersNetwork
55
import com.rumosoft.marvelapi.data.network.HeroesResult
66
import com.rumosoft.marvelapi.data.network.apimodels.HeroDto
77
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
88
import javax.inject.Inject
99

1010
class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
11-
override suspend fun searchHeroes(
11+
override suspend fun getHeroes(
1212
offset: Int,
1313
limit: Int,
14-
nameStartsWith: String
1514
): Result<HeroesResult> {
1615
val heroesResult = HeroesResult(
1716
paginationInfo = PaginationInfo(
1817
current = 0,
1918
total = 0,
2019
),
21-
characters = (offset .. offset + CHARACTERS_SEARCH_LIMIT).map {
20+
characters = (offset .. offset + CHARACTERS_LIMIT).map {
2221
HeroDto(
2322
id = it.toLong(),
2423
name = "character $it",
@@ -33,7 +32,7 @@ class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
3332
}
3433

3534
override suspend fun getHeroDetails(heroId: Long): Result<HeroDto?> {
36-
val hero = searchHeroes(0, 0, "").getOrNull()?.characters?.find { it.id == heroId }
35+
val hero = getHeroes(0, 0).getOrNull()?.characters?.find { it.id == heroId }
3736
return hero?.let {
3837
Result.success(it)
3938
} ?: Result.failure(Exception("Hero not found"))

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeComicsNetwork.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
43
import com.rumosoft.marvelapi.data.network.ComicsNetwork
54
import com.rumosoft.marvelapi.data.network.ComicsResult
65
import com.rumosoft.marvelapi.data.network.apimodels.ComicDto
76
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
87
import javax.inject.Inject
98

109
class FakeComicsNetwork @Inject constructor(): ComicsNetwork {
11-
override suspend fun searchComics(
10+
override suspend fun getComics(
1211
offset: Int,
1312
limit: Int,
14-
titleStartsWith: String
1513
): Result<ComicsResult> {
1614
val comicsResult = ComicsResult(
1715
paginationInfo = PaginationInfo(
1816
current = 0,
1917
total = 0,
2018
),
21-
comics = (offset..offset + CHARACTERS_SEARCH_LIMIT).map {
19+
comics = (offset..offset + limit).map {
2220
ComicDto(
2321
id = it,
2422
title = "comic $it",

feature-characters/src/main/java/com/rumosoft/characters/data/repository/SearchRepositoryImpl.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,28 @@ package com.rumosoft.characters.data.repository
22

33
import com.rumosoft.characters.data.mappers.toHero
44
import com.rumosoft.characters.domain.model.Character
5-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
5+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
66
import com.rumosoft.marvelapi.data.network.CallInProgressException
77
import com.rumosoft.marvelapi.data.network.CharactersNetwork
88
import timber.log.Timber
99
import javax.inject.Inject
1010

11-
const val CHARACTERS_SEARCH_LIMIT = 20
11+
const val CHARACTERS_LIMIT = 20
1212

13-
class SearchRepositoryImpl @Inject constructor(
13+
class CharactersRepositoryImpl @Inject constructor(
1414
private val network: CharactersNetwork,
15-
) : SearchRepository {
15+
) : CharactersRepository {
1616
private var isRequestInProgress = false
1717

18-
override suspend fun performSearch(
19-
nameStartsWith: String,
18+
override suspend fun getCharacters(
2019
page: Int,
2120
): Result<List<Character>> {
2221
if (isRequestInProgress) {
2322
Timber.d("Request is in progress")
2423
return Result.failure(CallInProgressException("Request is in progress"))
2524
}
26-
Timber.d("Performing Network Search")
27-
val networkResult = performNetworkSearch(nameStartsWith, page)
25+
Timber.d("Fetching characters")
26+
val networkResult = performNetworkFetch(page)
2827
if (networkResult.isSuccess) {
2928
Timber.d("Returned results")
3029
}
@@ -44,13 +43,12 @@ class SearchRepositoryImpl @Inject constructor(
4443
return network.getComicThumbnail(comicId)
4544
}
4645

47-
private suspend fun performNetworkSearch(
48-
nameStartsWith: String,
46+
private suspend fun performNetworkFetch(
4947
page: Int,
5048
): Result<List<Character>> {
5149
isRequestInProgress = true
52-
val offset = (page - 1) * CHARACTERS_SEARCH_LIMIT
53-
val networkResult = network.searchHeroes(offset, CHARACTERS_SEARCH_LIMIT, nameStartsWith)
50+
val offset = (page - 1) * CHARACTERS_LIMIT
51+
val networkResult = network.getHeroes(offset, CHARACTERS_LIMIT)
5452
isRequestInProgress = false
5553
return networkResult.map { result ->
5654
result.characters?.map { it.toHero() } ?: emptyList()

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetCharacterDetailsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

77
class GetCharacterDetailsUseCase @Inject constructor(
8-
private val repository: SearchRepository,
8+
private val repository: CharactersRepository,
99
) {
1010
suspend operator fun invoke(
1111
characterId: Long,

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetComicThumbnailUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.rumosoft.characters.domain.usecase
22

3-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
3+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
44
import javax.inject.Inject
55

66
class GetComicThumbnailUseCase @Inject constructor(
7-
private val repository: SearchRepository,
7+
private val repository: CharactersRepository,
88
) {
99
suspend operator fun invoke(comicId: Int): Result<String> =
1010
repository.getThumbnail(comicId)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

7-
class SearchUseCase @Inject constructor(
8-
private val repository: SearchRepository,
7+
class GetCharactersUseCase @Inject constructor(
8+
private val repository: CharactersRepository,
99
) {
10-
suspend operator fun invoke(nameStart: String, page: Int): Result<List<Character>> =
11-
repository.performSearch(nameStart, page)
10+
suspend operator fun invoke(page: Int): Result<List<Character>> =
11+
repository.getCharacters(page)
1212
}

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/interfaces/SearchRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package com.rumosoft.characters.domain.usecase.interfaces
22

33
import com.rumosoft.characters.domain.model.Character
44

5-
interface SearchRepository {
6-
suspend fun performSearch(nameStartsWith: String, page: Int): Result<List<Character>>
5+
interface CharactersRepository {
6+
suspend fun getCharacters(page: Int): Result<List<Character>>
77
suspend fun getCharacterDetails(heroId: Long): Result<Character?>
88
suspend fun getThumbnail(comicId: Int): Result<String>
99
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.rumosoft.characters.infrastructure.di
22

3-
import com.rumosoft.characters.data.repository.SearchRepositoryImpl
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
3+
import com.rumosoft.characters.data.repository.CharactersRepositoryImpl
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import dagger.Binds
66
import dagger.Module
77
import dagger.hilt.InstallIn
@@ -12,6 +12,6 @@ import dagger.hilt.components.SingletonComponent
1212
abstract class CharactersRepositoryModule {
1313
@Binds
1414
abstract fun bindCharacterRepository(
15-
searchRepository: SearchRepositoryImpl,
16-
): SearchRepository
15+
charactersRepository: CharactersRepositoryImpl,
16+
): CharactersRepository
1717
}

feature-characters/src/main/java/com/rumosoft/characters/presentation/navigation/CharactersNavModule.kt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ package com.rumosoft.characters.presentation.navigation
33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.LaunchedEffect
55
import androidx.compose.runtime.getValue
6-
import androidx.compose.runtime.mutableStateOf
7-
import androidx.compose.runtime.remember
8-
import androidx.compose.runtime.setValue
96
import androidx.hilt.navigation.compose.hiltViewModel
107
import androidx.lifecycle.compose.collectAsStateWithLifecycle
118
import androidx.navigation.NavGraphBuilder
@@ -38,21 +35,8 @@ fun NavGraphBuilder.charactersGraph(
3835
navController.navigate(CharacterDetails(selectedCharacter.id))
3936
}
4037
}
41-
var search by remember { mutableStateOf("") }
42-
val onToggleSearchClick = {
43-
viewModel.onToggleSearchClick()
44-
}
45-
val onValueChanged = { value: String ->
46-
search = value
47-
viewModel.onQueryChanged(value)
48-
}
4938
setTopBarContent {
50-
CharactersTopBar(
51-
search,
52-
heroListScreenState.showingSearchBar,
53-
onToggleSearchClick,
54-
onValueChanged,
55-
)
39+
CharactersTopBar()
5640
}
5741
HeroListScreenContent(
5842
heroListState = heroListScreenState.heroListState,

feature-characters/src/main/java/com/rumosoft/characters/presentation/screen/HeroListScreen.kt

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,23 @@
11
package com.rumosoft.characters.presentation.screen
22

33
import android.content.res.Configuration.UI_MODE_NIGHT_YES
4-
import androidx.compose.animation.AnimatedVisibility
5-
import androidx.compose.animation.fadeIn
6-
import androidx.compose.animation.fadeOut
7-
import androidx.compose.animation.slideOutVertically
84
import androidx.compose.foundation.layout.Box
95
import androidx.compose.foundation.layout.Column
106
import androidx.compose.foundation.layout.fillMaxSize
117
import androidx.compose.runtime.Composable
128
import androidx.compose.ui.Alignment
139
import androidx.compose.ui.Modifier
14-
import androidx.compose.ui.graphics.vector.ImageVector
15-
import androidx.compose.ui.res.stringResource
16-
import androidx.compose.ui.res.vectorResource
1710
import androidx.compose.ui.tooling.preview.Preview
1811
import com.rumosoft.characters.R
19-
import com.rumosoft.components.R as Rcomponents
2012
import com.rumosoft.characters.infrastructure.sampleData.SampleData
2113
import com.rumosoft.characters.presentation.screen.state.BuildUI
2214
import com.rumosoft.characters.presentation.viewmodel.state.HeroListState
23-
import com.rumosoft.components.presentation.component.SearchBar
2415
import com.rumosoft.components.presentation.component.SectionTopBar
2516
import com.rumosoft.components.presentation.theme.MarvelComposeTheme
2617

2718
@Composable
28-
fun CharactersTopBar(
29-
searchText: String,
30-
showSearchBar: Boolean,
31-
onToggleSearchClick: () -> Unit,
32-
onValueChanged: (String) -> Unit
33-
) {
34-
SearchableTitle(searchText, showSearchBar, onToggleSearchClick, onValueChanged)
19+
fun CharactersTopBar() {
20+
SectionTopBar(sectionName = R.string.characters)
3521
}
3622

3723
@Composable
@@ -46,36 +32,6 @@ fun HeroListScreenContent(
4632
}
4733
}
4834

49-
@Composable
50-
private fun SearchableTitle(
51-
searchText: String,
52-
showSearchBar: Boolean,
53-
onToggleSearchClick: () -> Unit = {},
54-
onValueChanged: (String) -> Unit = {},
55-
) {
56-
Column {
57-
SectionTopBar(
58-
sectionName = R.string.characters,
59-
icon = ImageVector.vectorResource(Rcomponents.drawable.ic_search),
60-
onIconClick = onToggleSearchClick,
61-
)
62-
AnimatedVisibility(
63-
showSearchBar,
64-
enter = fadeIn(),
65-
exit = slideOutVertically() + fadeOut(),
66-
) {
67-
if (showSearchBar) {
68-
SearchBar(
69-
search = searchText,
70-
hint = stringResource(id = com.rumosoft.components.R.string.search_hint),
71-
requestFocus = true,
72-
onValueChanged = onValueChanged,
73-
onLeadingClicked = onToggleSearchClick,
74-
)
75-
}
76-
}
77-
}
78-
}
7935

8036
@Composable
8137
private fun ResultBox(

0 commit comments

Comments
 (0)