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
22 changes: 14 additions & 8 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ plugins {
alias(libs.plugins.compose.compiler)
}

kotlin {
compilerOptions {
jvmTarget.set(
org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21,
)
}
}

android {
namespace = "dev.arkbuilders.rate"
compileSdk = libs.versions.compileSdk.get().toInt()
Expand Down Expand Up @@ -102,9 +110,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlinOptions {
jvmTarget = "21"
}

buildFeatures {
buildConfig = true
Expand Down Expand Up @@ -142,6 +147,7 @@ dependencies {
implementation(libs.androidx.appcompat)

implementation(libs.androidx.glance.appwidget)
implementation(libs.androidx.concurrent.futures.ktx)

implementation(libs.dagger)
ksp(libs.dagger.compiler)
Expand All @@ -168,10 +174,6 @@ dependencies {
implementation(libs.compose.destinations.core)
ksp(libs.compose.destinations.compiler)

implementation(libs.retrofit)
implementation(libs.converter.gson)
implementation(libs.logging.interceptor)

implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
Expand All @@ -190,7 +192,11 @@ tasks.getByPath(":app:preBuild").dependsOn("ktlintFormat")

fun collectCurrencyIcons(moduleDir: File): List<String> {
val drawableDir = moduleDir.resolve("src/main/res/drawable")
return drawableDir.listFiles()!!
if (!drawableDir.exists()) {
return emptyList()
}
return drawableDir
.listFiles()
.map { it.nameWithoutExtension.uppercase() }
.map {
when {
Expand Down
34 changes: 0 additions & 34 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -19,37 +19,3 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

##---------------Begin: proguard configuration for Gson ----------
# https://github.com/google/gson/blob/main/examples/android-proguard-example/proguard.cfg
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

##---------------End: proguard configuration for Gson ----------
31 changes: 16 additions & 15 deletions app/src/main/java/dev/arkbuilders/rate/presentation/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import androidx.work.ListenableWorker
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequest
import androidx.work.WorkManager
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.Firebase
import com.google.firebase.crashlytics.crashlytics
import dev.arkbuilders.rate.BuildConfig
import dev.arkbuilders.rate.core.di.CoreComponent
import dev.arkbuilders.rate.core.di.CoreComponentProvider
Expand All @@ -30,8 +30,12 @@ class App : Application(), Configuration.Provider, CoreComponentProvider {
override fun onCreate() {
super.onCreate()
Timber.plant(Timber.DebugTree())
coreComponent = DaggerCoreComponent.factory().create(this, applicationContext)
initBuildConfigFields()
coreComponent =
DaggerCoreComponent.factory().create(
this,
applicationContext,
buildConfigFields(),
)
instance = this

initCrashlytics()
Expand All @@ -41,17 +45,14 @@ class App : Application(), Configuration.Provider, CoreComponentProvider {
)
}

private fun initBuildConfigFields() {
coreComponent.buildConfigFieldsProvider().init(
BuildConfigFields(
buildType = BuildConfig.BUILD_TYPE,
versionCode = BuildConfig.VERSION_CODE,
versionName = BuildConfig.VERSION_NAME,
isGooglePlayBuild = BuildConfig.GOOGLE_PLAY_BUILD,
availableIconCodes = BuildConfig.ICON_CODES.toSet(),
),
private fun buildConfigFields() =
BuildConfigFields(
buildType = BuildConfig.BUILD_TYPE,
versionCode = BuildConfig.VERSION_CODE,
versionName = BuildConfig.VERSION_NAME,
isGooglePlayBuild = BuildConfig.GOOGLE_PLAY_BUILD,
availableIconCodes = BuildConfig.ICON_CODES.toSet(),
)
}

private fun initCrashlytics() =
CoroutineScope(Dispatchers.IO).launch {
Expand Down Expand Up @@ -90,7 +91,7 @@ class App : Application(), Configuration.Provider, CoreComponentProvider {
)
}

override fun getWorkManagerConfiguration() =
override val workManagerConfiguration: Configuration =
Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.setWorkerFactory(AppWorkerFactory())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ fun SplashScreen(navigator: DestinationsNavigator) {
quickComponent.quickRepo(),
portfolioComponent.assetsRepo(),
coreComponent.prefs(),
coreComponent.buildConfigFieldsProvider().provide(),
coreComponent.buildConfigFields(),
coreComponent.currencyRepo(),
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,21 @@ package dev.arkbuilders.rate.presentation.splash

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import dev.arkbuilders.rate.core.domain.BuildConfigFields
import dev.arkbuilders.rate.core.domain.repo.CurrencyRepo
import dev.arkbuilders.rate.core.domain.repo.PreferenceKey
import dev.arkbuilders.rate.core.domain.repo.Prefs
import dev.arkbuilders.rate.feature.portfolio.domain.repo.PortfolioRepo
import dev.arkbuilders.rate.feature.quick.domain.repo.QuickRepo
import kotlinx.coroutines.async
import kotlinx.coroutines.withTimeoutOrNull
import org.orbitmvi.orbit.Container
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.viewmodel.container

private const val UPDATE_RATES_TIMEOUT_MS = 1_500L

sealed class SplashScreenEffect {
data object NavigateOnboarding : SplashScreenEffect()

Expand All @@ -30,6 +35,7 @@ class SplashViewModel(
init {
intent {
currencyRepo.initialize()
val updateRates = updateRatesAsync()

val currentVersionCode = buildConfigFields.versionCode
val previousVersionCode = prefs.get(PreferenceKey.CurrentVersionCode)
Expand All @@ -49,13 +55,23 @@ class SplashViewModel(
prefs.set(PreferenceKey.CurrentVersionCode, currentVersionCode)

val needToShowOnboarding = prefs.get(PreferenceKey.IsOnboardingCompleted).not()

updateRates.await()

if (needToShowOnboarding)
postSideEffect(SplashScreenEffect.NavigateOnboarding)
else
postSideEffect(SplashScreenEffect.NavigateQuick)
}
}

private fun updateRatesAsync() =
viewModelScope.async {
withTimeoutOrNull(UPDATE_RATES_TIMEOUT_MS) {
currencyRepo.updateRates()
}
}

private suspend fun skipOnboardingIfUserHasData() {
if (quickRepo.getAll().isNotEmpty() || portfolioRepo.allAssets().isNotEmpty()) {
prefs.set(PreferenceKey.IsOnboardingCompleted, true)
Expand Down
6 changes: 3 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ plugins {
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.ksp)
id("com.google.gms.google-services") version "4.4.2" apply false
id("com.google.firebase.crashlytics") version "3.0.1" apply false
id("com.google.gms.google-services") version "4.5.0" apply false
id("com.google.firebase.crashlytics") version "3.0.7" apply false
id("org.jlleitschuh.gradle.ktlint") version "12.1.1"
id("com.google.dagger.hilt.android") version "2.56.2" apply false
id("com.google.dagger.hilt.android") version "2.58" apply false
}

allprojects {
Expand Down
21 changes: 15 additions & 6 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.ksp)
}

kotlin {
compilerOptions {
jvmTarget.set(
org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21,
)
}
}

android {
namespace = "dev.arkbuilders.rate.core.data"
compileSdk = libs.versions.compileSdk.get().toInt()
Expand All @@ -28,9 +37,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
kotlinOptions {
jvmTarget = "21"
}
}

dependencies {
Expand All @@ -56,9 +62,12 @@ dependencies {
implementation(libs.arrow.core)
implementation(libs.arrow.fx.coroutines)

implementation(libs.retrofit)
implementation(libs.converter.gson)
implementation(libs.logging.interceptor)
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.okhttp)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.client.logging)
implementation(libs.kotlinx.serialization.json)

implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package dev.arkbuilders.rate.core.data

import kotlinx.serialization.json.Json

internal val appJson =
Json {
ignoreUnknownKeys = true
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class CryptoRateResponseMapper @Inject constructor() {
CurrencyRate(
CurrencyType.CRYPTO,
it.symbol.uppercase(),
BigDecimal.valueOf(it.current_price),
BigDecimal.valueOf(it.currentPrice),
)
}
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading