Skip to content

Commit ceadd66

Browse files
committed
fix di issues
1 parent 9c249df commit ceadd66

File tree

10 files changed

+78
-38
lines changed

10 files changed

+78
-38
lines changed

commonApp/src/commonMain/kotlin/com/stslex/atten/di/AppModules.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.stslex.atten.core.core.di.ModuleCore
55
import com.stslex.atten.core.database.di.ModuleCoreDatabase
66
import com.stslex.atten.core.network.client.di.ModuleCoreNetwork
77
import com.stslex.atten.core.paging.di.ModuleCorePaging
8+
import com.stslex.atten.core.store.di.ModuleCoreStore
89
import com.stslex.atten.core.todo.di.ModuleCoreToDo
910
import com.stslex.atten.core.ui.kit.utils.ModuleCoreUiUtils
1011
import com.stslex.atten.feature.details.di.ModuleFeatureDetails
@@ -20,6 +21,7 @@ val appModules: List<Module> = listOf(
2021
ModuleCorePaging().module,
2122
ModuleCoreUiUtils().module,
2223
ModuleCoreAuth().module,
24+
ModuleCoreStore().module,
2325
ModuleCoreNetwork().module,
2426
ModuleFeatureHome().module,
2527
ModuleFeatureDetails().module,

core/auth/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ kotlin {
88
implementation(project(":core:core"))
99
implementation(project(":core:ui:kit"))
1010
implementation(project(":core:network:api"))
11+
implementation(project(":core:network:client"))
1112
}
1213
androidMain.dependencies {
1314
implementation(libs.gms.auth)

core/auth/src/androidMain/kotlin/com/stslex/atten/core/auth/controller/GoogleAuthControllerImpl.android.kt

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.google.android.gms.auth.api.identity.Identity
1414
import com.google.android.gms.common.Scopes
1515
import com.google.android.gms.common.api.Scope
1616
import com.stslex.atten.core.auth.callback.GoogleAuthCallback
17+
import com.stslex.atten.core.auth.model.GoogleAuthData
1718
import com.stslex.atten.core.auth.model.GoogleAuthResult
1819
import com.stslex.atten.core.core.logger.Log
1920
import com.stslex.atten.core.ui.kit.utils.ActivityHolder
@@ -34,18 +35,28 @@ internal actual class GoogleAuthControllerImpl actual constructor(
3435
) { result ->
3536
logger.d("activity_result: $result, ${result.data}")
3637
val activity = checkNotNull(activityHolder.activity as? ComponentActivity)
37-
val result = if (result.resultCode == Activity.RESULT_OK) {
38-
val authorizationResult = Identity
39-
.getAuthorizationClient(activity)
40-
.getAuthorizationResultFromIntent(result.data)
41-
val uiResult = GoogleAuthResult(
42-
accessToken = authorizationResult.accessToken,
43-
serverAuthCode = authorizationResult.serverAuthCode
44-
)
45-
Result.success(uiResult)
46-
} else {
47-
val msg = "auth fail with ${result.resultCode} code"
48-
Result.failure(IllegalStateException(msg))
38+
val result = when (result.resultCode) {
39+
Activity.RESULT_OK -> {
40+
val authorizationResult = Identity
41+
.getAuthorizationClient(activity)
42+
.getAuthorizationResultFromIntent(result.data)
43+
val uiResult = GoogleAuthData(
44+
accessToken = authorizationResult.accessToken,
45+
serverAuthCode = authorizationResult.serverAuthCode
46+
)
47+
Result.success(GoogleAuthResult.Success(uiResult))
48+
}
49+
50+
Activity.RESULT_CANCELED -> {
51+
logger.i("auth cancelled by user")
52+
Result.success(GoogleAuthResult.Cancelled)
53+
return@rememberLauncherForActivityResult
54+
}
55+
56+
else -> {
57+
val msg = "auth fail with ${result.resultCode} code"
58+
Result.failure(IllegalStateException(msg))
59+
}
4960
}
5061
callback.process(result)
5162
}
@@ -73,11 +84,11 @@ internal actual class GoogleAuthControllerImpl actual constructor(
7384
logger.e(e, "Couldn't start Authorization UI: " + e.localizedMessage)
7485
}
7586
} else {
76-
val uiResult = GoogleAuthResult(
87+
val uiResult = GoogleAuthData(
7788
accessToken = result.accessToken,
7889
serverAuthCode = result.serverAuthCode
7990
)
80-
callback.process(Result.success(uiResult))
91+
callback.process(Result.success(GoogleAuthResult.Success(uiResult)))
8192
}
8293
}
8394
.addOnFailureListener {
@@ -91,4 +102,5 @@ internal actual class GoogleAuthControllerImpl actual constructor(
91102
private val logger = Log.tag(TAG)
92103
private const val TAG = "GOOGLE_AUTH_CONTROLLER"
93104
}
105+
94106
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.stslex.atten.core.auth.model
2+
3+
import androidx.compose.runtime.Stable
4+
5+
@Stable
6+
data class GoogleAuthData(
7+
val serverAuthCode: String?,
8+
val accessToken: String?,
9+
)
10+
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.stslex.atten.core.auth.model
22

3-
import androidx.compose.runtime.Stable
3+
sealed interface GoogleAuthResult {
44

5-
@Stable
6-
data class GoogleAuthResult(
7-
val serverAuthCode: String?,
8-
val accessToken: String?,
9-
)
5+
data class Success(val data: GoogleAuthData) : GoogleAuthResult
6+
7+
data object Cancelled : GoogleAuthResult
8+
}

core/core/src/commonMain/kotlin/com/stslex/atten/core/core/result/ResultUtils.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@ object ResultUtils {
3030
onError: suspend (AppError) -> Unit = { logger.e(it, it.message) },
3131
onLoading: suspend () -> Unit = {},
3232
onSuccess: suspend (T) -> Unit,
33-
): Job = scope.launch(this) { result ->
34-
when (result) {
35-
is AppResult.Success -> onSuccess(result.data)
36-
is AppResult.Error -> onError(result.error)
37-
AppResult.Loading -> onLoading()
33+
): Job = scope
34+
.launch(
35+
flow = this,
36+
onError = { onError(UnresolveError(it.message, it)) }) { result ->
37+
when (result) {
38+
is AppResult.Success -> onSuccess(result.data)
39+
is AppResult.Error -> onError(result.error)
40+
AppResult.Loading -> onLoading()
41+
}
3842
}
39-
}
4043

4144
fun <T : Any, R : Any> flowRunCatching(
4245
mapper: Mapping<T, R>,

core/network/client/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ kotlin {
1212
commonMain {
1313
dependencies {
1414
implementation(project(":core:core"))
15-
implementation(project(":core:network:api"))
15+
api(project(":core:network:api"))
1616
implementation(project(":core:store"))
1717
implementation(libs.bundles.ktor)
1818
}

core/network/client/src/commonMain/kotlin/com/stslex/atten/core/network/client/client/AppHttpApiImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import org.koin.core.annotation.Singleton
1010

1111
@Single
1212
@Singleton
13-
class AppHttpApiImpl(
13+
internal class AppHttpApiImpl(
1414
private val appDispatcher: AppDispatcher,
1515
private val appHttpClient: AppHttpClient
1616
) : AppHttpApi {

core/network/client/src/commonMain/kotlin/com/stslex/atten/core/network/client/client/AuthApiClientImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import org.koin.core.annotation.Singleton
1616

1717
@Single
1818
@Singleton
19-
class AuthApiClientImpl(
19+
internal class AuthApiClientImpl(
2020
private val appHttpApi: AppHttpApi,
2121
private val userStore: UserStore,
2222
) : AuthApiClient {

feature/settings/src/commonMain/kotlin/com/stslex/atten/feature/settings/mvi/handlers/ClickHandler.kt

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import org.koin.core.annotation.Scoped
1919
class ClickHandler(
2020
private val authController: GoogleAuthController,
2121
private val repository: AuthRepository,
22-
private val store: SettingsHandlerStore
23-
) : Handler<Action.Click, SettingsHandlerStore>, SettingsHandlerStore by store {
22+
// private val store: SettingsHandlerStore
23+
) : Handler<Action.Click, SettingsHandlerStore> {
2424

2525
private var loginJob: Job? = null
2626

@@ -31,21 +31,34 @@ class ClickHandler(
3131
}
3232
}
3333

34-
private fun actionBack() {
35-
store.consume(Action.Navigation.NavBack)
34+
private fun SettingsHandlerStore.actionBack() {
35+
consume(Action.Navigation.NavBack)
3636
}
3737

38-
private fun actionLogin() {
38+
private fun SettingsHandlerStore.actionLogin() {
3939
authController.auth { result ->
4040
result
4141
.onSuccess { consumeLogin(it) }
4242
.onFailure { logger.e(it, "auth error") }
4343
}
4444
}
4545

46-
private fun consumeLogin(googleInfo: GoogleAuthResult) {
47-
logger.i("consumeLogin: $googleInfo")
48-
val token = googleInfo.accessToken
46+
private fun SettingsHandlerStore.consumeLogin(result: GoogleAuthResult) {
47+
logger.i("consumeLogin: $result")
48+
val token = when (result) {
49+
GoogleAuthResult.Cancelled -> {
50+
logger.i("Google auth cancelled by user")
51+
return
52+
}
53+
54+
is GoogleAuthResult.Success -> result.data.accessToken.also {
55+
if (it.isNullOrBlank()) {
56+
logger.e("Access token is null or empty")
57+
return
58+
}
59+
}
60+
}
61+
4962
if (token.isNullOrEmpty()) {
5063
logger.e(message = "Access token is null or empty")
5164
// todo handle error, show message to user
@@ -56,6 +69,6 @@ class ClickHandler(
5669
.onSuccess { logger.i("login success: $it") }
5770
.onError { logger.e(it, "login error") }
5871
.onLoading { logger.i("login loading...") }
59-
.collect(store.scope)
72+
.collect(scope)
6073
}
6174
}

0 commit comments

Comments
 (0)