Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.github.chrisimx.scanbridge

import io.github.chrisimx.scanbridge.buildinfo.BuildInfoProvider
import io.github.chrisimx.scanbridge.buildinfo.ScanBridgeEdition
import io.github.chrisimx.scanbridge.model.Platform

class AndroidBuildInfoProvider : BuildInfoProvider {
override val versionName: String = BuildConfig.VERSION_NAME
override val versionCode: Int = BuildConfig.VERSION_CODE
override val commit: String = BuildConfig.GIT_COMMIT_HASH
override val edition: ScanBridgeEdition = when (BuildConfig.FLAVOR) {
"play" -> ScanBridgeEdition.PLAYSTORE
"fdroid" -> ScanBridgeEdition.FDROID
else -> throw IllegalStateException("Unknown build flavor: ${BuildConfig.FLAVOR}")
}
override val isDebugBuild: Boolean = BuildConfig.DEBUG
override val platform = Platform.ANDROID
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import io.github.chrisimx.scanbridge.startupmessages.ShownStartupMessagesRepository
import io.github.chrisimx.scanbridge.startupmessages.StartupMessage
import io.github.chrisimx.scanbridge.theme.ScanBridgeTheme
import io.github.chrisimx.scanbridge.uicomponents.CrashFileHandler
import kotlinx.coroutines.launch
Expand All @@ -59,10 +61,10 @@ fun ScanBridgeApp() {
val typedRoute = currentBackStackEntry?.toTypedRoute()

val lastRouteRepository = koinInject<LastRouteRepository>()
val shownMessagesRepository = koinInject<ShownMessagesRepository>()
val shownMessagesRepository = koinInject<ShownStartupMessagesRepository>()

val thanksForPurchaseAlreadyShown by shownMessagesRepository
.getWasShownFlow(UserInformationMessage.THANKS_FOR_PURCHASE)
.getWasShownFlow(StartupMessage.THANKS_FOR_PURCHASE)
.collectAsState(true)

LaunchedEffect(Unit) {
Expand Down Expand Up @@ -96,7 +98,7 @@ fun ScanBridgeApp() {

val markThanksMessageAsRead = {
coroutineScope.launch {
shownMessagesRepository.setShown(UserInformationMessage.THANKS_FOR_PURCHASE, true)
shownMessagesRepository.setShown(StartupMessage.THANKS_FOR_PURCHASE, true)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import coil3.ImageLoader
import coil3.network.ktor3.KtorNetworkFetcherFactory
import io.github.chrisimx.scanbridge.adapters.KoinBasedScanningProtocolManager
import io.github.chrisimx.scanbridge.adapters.RoomBackedCustomScannerRepository
import io.github.chrisimx.scanbridge.buildinfo.BuildInfoProvider
import io.github.chrisimx.scanbridge.data.ui.ScanSettingsComposableStateHolder
import io.github.chrisimx.scanbridge.data.ui.ScanningScreenViewModel
import io.github.chrisimx.scanbridge.datastore.appSettingsStore
Expand All @@ -19,6 +20,7 @@ import io.github.chrisimx.scanbridge.db.DefaultScanBridgeDbFactory
import io.github.chrisimx.scanbridge.db.ScanBridgeDb
import io.github.chrisimx.scanbridge.db.ScanBridgeDbBuilderFactory
import io.github.chrisimx.scanbridge.db.ScanBridgeDbFactory
import io.github.chrisimx.scanbridge.db.migrations.ROOM_MIGRATIONS
import io.github.chrisimx.scanbridge.infrastructure.KmLogScanBridgeLoggerFactory
import io.github.chrisimx.scanbridge.migrations.MigrationExecutor
import io.github.chrisimx.scanbridge.migrations.RoomBackedMigrationExecutor
Expand All @@ -44,6 +46,8 @@ import io.github.chrisimx.scanbridge.services.AndroidLocaleProvider
import io.github.chrisimx.scanbridge.services.DebugLogService
import io.github.chrisimx.scanbridge.services.FileDebugLogService
import io.github.chrisimx.scanbridge.services.ScanJobRepository
import io.github.chrisimx.scanbridge.startupmessages.RoomShownStartupMessagesRepository
import io.github.chrisimx.scanbridge.startupmessages.ShownStartupMessagesRepository
import io.github.chrisimx.scanbridge.usecases.StartScanUseCase
import io.ktor.client.HttpClient
import kotlinx.coroutines.CoroutineScope
Expand Down Expand Up @@ -114,9 +118,13 @@ val appModule = module {
factory<AndroidMdnsDiscoverService>() bind MdnsDiscoverService::class
single<DatastoreLastRouteRepository>()
single<RoomLastRouteRepository>() bind LastRouteRepository::class
single<DatastoreShownMessagesRepository> {
DatastoreShownMessagesRepository(get(named<ShownMessages>()))
} bind ShownMessagesRepository::class
single<DatastoreShownMessagesRepository>(named("legacyDatastoreShownMessages")) {
DatastoreShownMessagesRepository(
get(named<ShownMessages>()),
get()
)
} bind ShownStartupMessagesRepository::class
single<RoomShownStartupMessagesRepository>() bind ShownStartupMessagesRepository::class
single<KoinBasedScanningProtocolManager>() bind ScanningProtocolManager::class
single<DefaultInitialScanSettingsProvider>() bind InitialScanSettingsProvider::class
single<DefaultPaperFormatProvider>() bind PaperFormatProvider::class
Expand All @@ -127,7 +135,10 @@ val appModule = module {
viewModel<ScannerDiscoveryScreenViewModel>()
single<AndroidMulticastLockHandler>() bind MulticastLockHandler::class
single<AndroidStartScanUseCase>() bind StartScanUseCase::class
includes(scanProtocols)

single<AndroidBuildInfoProvider>() bind BuildInfoProvider::class

includes(SCAN_PROTOCOLS, ROOM_MIGRATIONS)
}

class ScanBridgeApplication : Application() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
package io.github.chrisimx.scanbridge.repositories

import androidx.datastore.core.DataStore
import io.github.chrisimx.scanbridge.BuildConfig
import io.github.chrisimx.scanbridge.ShownMessagesRepository
import io.github.chrisimx.scanbridge.UserInformationMessage
import io.github.chrisimx.scanbridge.buildinfo.BuildInfoProvider
import io.github.chrisimx.scanbridge.proto.ShownMessages
import io.github.chrisimx.scanbridge.proto.copy
import io.github.chrisimx.scanbridge.startupmessages.ShownStartupMessagesRepository
import io.github.chrisimx.scanbridge.startupmessages.StartupMessage
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

class DatastoreShownMessagesRepository(val shownMessagesDataStore: DataStore<ShownMessages>) : ShownMessagesRepository {
override fun getWasShownFlow(message: UserInformationMessage): Flow<Boolean> = shownMessagesDataStore.data.map {
(BuildConfig.FLAVOR != "play" && message.playOnly) || !when (message) {
UserInformationMessage.THANKS_FOR_PURCHASE -> it.thankPlayOne
class DatastoreShownMessagesRepository(val shownMessagesDataStore: DataStore<ShownMessages>, val buildInfoProvider: BuildInfoProvider) :
ShownStartupMessagesRepository {
override fun getWasShownFlow(message: StartupMessage): Flow<Boolean> = shownMessagesDataStore.data.map {
!message.editions.contains(buildInfoProvider.edition) || when (message) {
StartupMessage.THANKS_FOR_PURCHASE -> it.thankPlayOne
}
}

override suspend fun setShown(message: UserInformationMessage, shown: Boolean) {
override suspend fun setShown(message: StartupMessage, shown: Boolean) {
shownMessagesDataStore.updateData {
it.copy {
when (message) {
UserInformationMessage.THANKS_FOR_PURCHASE -> {
StartupMessage.THANKS_FOR_PURCHASE -> {
thankPlayOne = shown
}
}
Expand Down
Loading
Loading