Skip to content

Commit

Permalink
Merge branch 'main' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
likppi10 committed Aug 26, 2023
2 parents 6d822b9 + 6cfdc7c commit 8c5cf4d
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/android-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
# Fastlane 위한 Ruby Setting
- uses: ruby/setup-ruby@v1
with:
bundler: "Gemfile.lock"
bundler: Gemfile.lock
bundler-cache: true

# Fastlane Setting
Expand Down
98 changes: 98 additions & 0 deletions app/src/main/kotlin/com/nexters/bandalart/android/MainViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.nexters.bandalart.android

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.nexters.bandalart.android.core.domain.usecase.bandalart.CreateBandalartUseCase
import com.nexters.bandalart.android.core.domain.usecase.login.CreateGuestLoginTokenUseCase
import com.nexters.bandalart.android.core.domain.usecase.login.GetGuestLoginTokenUseCase
import com.nexters.bandalart.android.core.domain.usecase.login.SetGuestLoginTokenUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import timber.log.Timber

/**
* MainUiState
*
* @param isLoggedIn 로그인 완료
* @param isNetworkErrorAlertDialogOpened 네트워크 에러 발생
* @param isLoading 서버와의 통신 중 로딩 상태
* @param error 서버와의 통신을 실패
*/

data class MainUiState(
val isLoggedIn: Boolean = false,
val isNetworkErrorAlertDialogOpened: Boolean = false,
val isLoading: Boolean = true,
val error: Throwable? = null,
)

@HiltViewModel
class MainViewModel @Inject constructor(
private val getGuestLoginTokenUseCase: GetGuestLoginTokenUseCase,
private val createGuestLoginTokenUseCase: CreateGuestLoginTokenUseCase,
private val setGuestLoginTokenUseCase: SetGuestLoginTokenUseCase,
private val createBandalartUseCase: CreateBandalartUseCase,
) : ViewModel() {

private val _uiState = MutableStateFlow(MainUiState())
val uiState: StateFlow<MainUiState> = _uiState.asStateFlow()

init {
getGuestLoginToken()
}

private fun getGuestLoginToken() {
viewModelScope.launch {
val guestLoginToken = getGuestLoginTokenUseCase()
Timber.d(guestLoginToken)
if (guestLoginToken.isEmpty()) {
createGuestLoginToken()
} else {
_uiState.value = _uiState.value.copy(
isLoggedIn = true,
isLoading = false,
)
}
}
}

fun createGuestLoginToken() {
viewModelScope.launch {
val result = createGuestLoginTokenUseCase()
when {
result.isSuccess && result.getOrNull() != null -> {
val newGuestLoginToken = result.getOrNull()!!
setGuestLoginTokenUseCase(newGuestLoginToken.key)
_uiState.value = _uiState.value.copy(
isLoggedIn = false,
isLoading = false,
)
createBandalartUseCase()
}
result.isSuccess && result.getOrNull() == null -> {
Timber.e("Request succeeded but data validation failed")
}
result.isFailure -> {
val exception = result.exceptionOrNull()
_uiState.value = _uiState.value.copy(
isNetworkErrorAlertDialogOpened = true,
isLoading = false,
)
Timber.e(exception)
}
}
}
}

fun openNetworkErrorAlertDialog(state: Boolean) {
viewModelScope.launch {
_uiState.value = _uiState.value.copy(
isNetworkErrorAlertDialogOpened = state,
)
}
}
}
20 changes: 20 additions & 0 deletions build-logic/src/main/kotlin/internal/android.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ internal fun Project.configureAndroid(extension: CommonExtension<*, *, *, *>) {
minSdk = ApplicationConstants.MinSdk
}


sourceSets {
getByName("main").java.srcDir("src/main/kotlin")
getByName("test").java.srcDir("src/test/kotlin")
Expand All @@ -41,6 +42,25 @@ internal fun Project.configureAndroid(extension: CommonExtension<*, *, *, *>) {
}

dependencies.add("detektPlugins", libs.findLibrary("detekt-plugin-formatting").get())

buildTypes {
getByName("debug") {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro",
"proguard-debug.pro"
)
}

getByName("release") {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.nexters.bandalart.android.feature.home.util

import android.content.Context
import androidx.annotation.StringRes

sealed class UiText {
class StringResource(@StringRes val resId: Int) : UiText()
data class DirectString(val value: String) : UiText()

fun asString(context: Context) = when (this) {
is StringResource -> context.getString(resId)
is DirectString -> value
}
}
1 change: 1 addition & 0 deletions feature/splash/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
}

android {

namespace = "com.nexters.bandalart.android.feature.splash"

buildFeatures {
Expand Down

0 comments on commit 8c5cf4d

Please sign in to comment.