Skip to content

Commit ace1fbd

Browse files
authored
Merge pull request #5482 from streetcomplete/viewmodels
ViewModels (a start)
2 parents 22b6179 + 14e9d2b commit ace1fbd

31 files changed

+699
-401
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ dependencies {
139139
implementation("androidx.viewpager:viewpager:1.0.0")
140140
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.1.0")
141141

142+
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
142143
// photos
143144
implementation("androidx.exifinterface:exifinterface:1.3.7")
144145

app/src/androidTest/java/de/westnordost/streetcomplete/data/osm/edits/ElementEditsDaoTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.westnordost.streetcomplete.data.osm.edits
22

3+
import de.westnordost.streetcomplete.data.AllEditTypes
34
import de.westnordost.streetcomplete.data.ApplicationDbTestCase
45
import de.westnordost.streetcomplete.data.osm.edits.create.CreateNodeAction
56
import de.westnordost.streetcomplete.data.osm.edits.create.RevertCreateNodeAction
@@ -43,7 +44,7 @@ class ElementEditsDaoTest : ApplicationDbTestCase() {
4344
@BeforeTest fun createDao() {
4445
val list = listOf(1 to TEST_QUEST_TYPE, 2 to TEST_QUEST_TYPE2)
4546
val list2 = listOf(1 to TestOverlay)
46-
dao = ElementEditsDao(database, QuestTypeRegistry(list), OverlayRegistry(list2))
47+
dao = ElementEditsDao(database, AllEditTypes(listOf(QuestTypeRegistry(list), OverlayRegistry(list2))))
4748
}
4849

4950
@Test fun addGet_UpdateElementTagsEdit() {

app/src/main/java/de/westnordost/streetcomplete/StreetCompleteApplication.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.work.WorkManager
99
import de.westnordost.streetcomplete.data.CacheTrimmer
1010
import de.westnordost.streetcomplete.data.CleanerWorker
1111
import de.westnordost.streetcomplete.data.Preloader
12+
import de.westnordost.streetcomplete.data.allEditTypesModule
1213
import de.westnordost.streetcomplete.data.dbModule
1314
import de.westnordost.streetcomplete.data.download.downloadModule
1415
import de.westnordost.streetcomplete.data.download.tiles.DownloadedTilesController
@@ -39,11 +40,13 @@ import de.westnordost.streetcomplete.data.visiblequests.questPresetsModule
3940
import de.westnordost.streetcomplete.overlays.overlaysModule
4041
import de.westnordost.streetcomplete.quests.oneway_suspects.data.trafficFlowSegmentsModule
4142
import de.westnordost.streetcomplete.quests.questsModule
43+
import de.westnordost.streetcomplete.screens.about.aboutScreenModule
4244
import de.westnordost.streetcomplete.screens.main.mainModule
4345
import de.westnordost.streetcomplete.screens.main.map.mapModule
4446
import de.westnordost.streetcomplete.screens.measure.arModule
4547
import de.westnordost.streetcomplete.screens.settings.ResurveyIntervalsUpdater
4648
import de.westnordost.streetcomplete.screens.settings.settingsModule
49+
import de.westnordost.streetcomplete.screens.user.userScreenModule
4750
import de.westnordost.streetcomplete.util.CrashReportExceptionHandler
4851
import de.westnordost.streetcomplete.util.getDefaultTheme
4952
import de.westnordost.streetcomplete.util.getSelectedLocale
@@ -92,6 +95,8 @@ class StreetCompleteApplication : Application() {
9295
modules(
9396
achievementsModule,
9497
appModule,
98+
aboutScreenModule,
99+
userScreenModule,
95100
createdElementsModule,
96101
dbModule,
97102
logsModule,
@@ -113,6 +118,7 @@ class StreetCompleteApplication : Application() {
113118
preferencesModule,
114119
questModule,
115120
questPresetsModule,
121+
allEditTypesModule,
116122
questsModule,
117123
settingsModule,
118124
statisticsModule,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package de.westnordost.streetcomplete.data
2+
3+
import de.westnordost.streetcomplete.data.osm.edits.EditType
4+
5+
class AllEditTypes(
6+
registries: List<ObjectTypeRegistry<out EditType>>
7+
) : AbstractCollection<EditType>() {
8+
9+
private val byName = registries.flatten().associateByTo(LinkedHashMap()) { it.name }
10+
11+
override val size: Int get() = byName.size
12+
13+
override fun iterator(): Iterator<EditType> = byName.values.iterator()
14+
15+
fun getByName(typeName: String): EditType? = byName[typeName]
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package de.westnordost.streetcomplete.data
2+
3+
import de.westnordost.streetcomplete.data.overlays.OverlayRegistry
4+
import de.westnordost.streetcomplete.data.quest.QuestTypeRegistry
5+
import org.koin.dsl.module
6+
7+
val allEditTypesModule = module {
8+
single {
9+
AllEditTypes(listOf(
10+
get<QuestTypeRegistry>(),
11+
get<OverlayRegistry>()
12+
))
13+
}
14+
}

app/src/main/java/de/westnordost/streetcomplete/data/logs/LogsFilters.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package de.westnordost.streetcomplete.data.logs
22

33
import de.westnordost.streetcomplete.util.ktx.toEpochMilli
44
import kotlinx.datetime.LocalDateTime
5-
import kotlinx.serialization.Serializable
65

7-
@Serializable
86
data class LogsFilters(
97
val levels: Set<LogLevel> = LogLevel.entries.toSet(),
108
val messageContains: String? = null,

app/src/main/java/de/westnordost/streetcomplete/data/osm/edits/ElementEditsDao.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.westnordost.streetcomplete.data.osm.edits
22

3+
import de.westnordost.streetcomplete.data.AllEditTypes
34
import de.westnordost.streetcomplete.data.CursorPosition
45
import de.westnordost.streetcomplete.data.Database
56
import de.westnordost.streetcomplete.data.osm.edits.ElementEditsTable.Columns.ACTION
@@ -23,9 +24,6 @@ import de.westnordost.streetcomplete.data.osm.edits.move.RevertMoveNodeAction
2324
import de.westnordost.streetcomplete.data.osm.edits.split_way.SplitWayAction
2425
import de.westnordost.streetcomplete.data.osm.edits.update_tags.RevertUpdateElementTagsAction
2526
import de.westnordost.streetcomplete.data.osm.edits.update_tags.UpdateElementTagsAction
26-
import de.westnordost.streetcomplete.data.osm.osmquests.OsmElementQuestType
27-
import de.westnordost.streetcomplete.data.overlays.OverlayRegistry
28-
import de.westnordost.streetcomplete.data.quest.QuestTypeRegistry
2927
import kotlinx.serialization.decodeFromString
3028
import kotlinx.serialization.encodeToString
3129
import kotlinx.serialization.json.Json
@@ -35,8 +33,7 @@ import kotlinx.serialization.modules.subclass
3533

3634
class ElementEditsDao(
3735
private val db: Database,
38-
private val questTypeRegistry: QuestTypeRegistry,
39-
private val overlayRegistry: OverlayRegistry
36+
private val allEditTypes: AllEditTypes,
4037
) {
4138
private val json = Json {
4239
serializersModule = SerializersModule {
@@ -111,8 +108,7 @@ class ElementEditsDao(
111108

112109
private fun CursorPosition.toElementEdit() = ElementEdit(
113110
getLong(ID),
114-
questTypeRegistry.getByName(getString(QUEST_TYPE)) as? OsmElementQuestType<*>
115-
?: overlayRegistry.getByName(getString(QUEST_TYPE))!!,
111+
allEditTypes.getByName(getString(QUEST_TYPE)) as ElementEditType,
116112
json.decodeFromString(getString(GEOMETRY)),
117113
getString(SOURCE),
118114
getLong(CREATED_TIMESTAMP),

app/src/main/java/de/westnordost/streetcomplete/data/osm/edits/ElementEditsModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ val elementEditsModule = module {
1414
factory { ChangesetAutoCloser(get()) }
1515
factory { ElementEditUploader(get(), get(), get()) }
1616

17-
factory { ElementEditsDao(get(), get(), get()) }
17+
factory { ElementEditsDao(get(), get()) }
1818
factory { ElementIdProviderDao(get()) }
1919
factory { LastEditTimeStore(get()) }
2020
factory { OpenChangesetsDao(get()) }

app/src/main/java/de/westnordost/streetcomplete/data/user/achievements/AchievementsController.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.westnordost.streetcomplete.data.user.achievements
22

3+
import de.westnordost.streetcomplete.data.AllEditTypes
34
import de.westnordost.streetcomplete.data.overlays.OverlayRegistry
45
import de.westnordost.streetcomplete.data.quest.QuestTypeRegistry
56
import de.westnordost.streetcomplete.data.user.statistics.StatisticsSource
@@ -11,8 +12,7 @@ class AchievementsController(
1112
private val statisticsSource: StatisticsSource,
1213
private val userAchievementsDao: UserAchievementsDao,
1314
private val userLinksDao: UserLinksDao,
14-
private val questTypeRegistry: QuestTypeRegistry,
15-
private val overlayRegistry: OverlayRegistry,
15+
private val allEditTypes: AllEditTypes,
1616
private val allAchievements: List<Achievement>,
1717
allLinks: List<Link>
1818
) : AchievementsSource {
@@ -159,12 +159,10 @@ class AchievementsController(
159159
}
160160

161161
private fun isContributingToAchievement(editType: String, achievementId: String): Boolean =
162-
(questTypeRegistry.getByName(editType) ?: overlayRegistry.getByName(editType))
163-
?.achievements?.anyHasId(achievementId) == true
162+
allEditTypes.getByName(editType)?.achievements?.anyHasId(achievementId) == true
164163

165164
private fun getEditTypesContributingToAchievement(achievementId: String): List<String> =
166-
questTypeRegistry.filter { it.achievements.anyHasId(achievementId) }.map { it.name } +
167-
overlayRegistry.filter { it.achievements.anyHasId(achievementId) }.map { it.name }
165+
allEditTypes.filter { it.achievements.anyHasId(achievementId) }.map { it.name }
168166
}
169167

170168
private fun List<EditTypeAchievement>.anyHasId(achievementId: String) = any { it.id == achievementId }

app/src/main/java/de/westnordost/streetcomplete/data/user/achievements/AchievementsModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ val achievementsModule = module {
4242
factory { UserLinksDao(get()) }
4343

4444
single<AchievementsSource> { get<AchievementsController>() }
45-
single { AchievementsController(get(), get(), get(), get(), get(), get(named("Achievements")), get(named("Links"))) }
45+
single { AchievementsController(get(), get(), get(), get(), get(named("Achievements")), get(named("Links"))) }
4646
}
4747

4848
// list of (quest) synonyms (this alternate name is mentioned to aid searching for this code)

0 commit comments

Comments
 (0)