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
6 changes: 6 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.yapp.app.setNamespace

plugins {
id("yapp.android.application")
alias(libs.plugins.google.services)
}

android {
Expand All @@ -15,6 +16,11 @@ dependencies {
implementation(project(":feature:login"))
implementation(project(":core:designsystem"))
implementation(project(":core:data")) // For di
implementation(project(":core:domain"))

implementation(platform(libs.firebase.bom))
implementation(libs.firebase.analytics)
implementation(libs.firebase.messaging)

implementation(libs.androidx.activity.compose)
implementation(libs.androidx.navigation.runtime.ktx)
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/com/yapp/app/official/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,20 @@ import androidx.activity.enableEdgeToEdge
import com.yapp.app.official.ui.YappApp
import com.yapp.app.official.ui.rememberNavigator
import com.yapp.core.designsystem.theme.YappTheme
import com.yapp.domain.UpdateDeviceAlarmUseCase
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import javax.inject.Inject


@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var updateDeviceAlarmUseCase: UpdateDeviceAlarmUseCase

private val scope = MainScope()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
Expand All @@ -22,5 +31,13 @@ class MainActivity : ComponentActivity() {
}
}
}

override fun onResume() {
super.onResume()

scope.launch {
updateDeviceAlarmUseCase()
}
}
}

24 changes: 21 additions & 3 deletions app/src/main/java/com/yapp/app/official/navigation/YappNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package com.yapp.app.official.navigation

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavOptions
import androidx.navigation.compose.NavHost
import com.yapp.app.official.ui.NavigatorState
import com.yapp.app.official.ui.clearBackStackNavOptions
import com.yapp.feature.home.navigation.homeNavGraph
import com.yapp.feature.home.navigation.settingNavGraph
import com.yapp.feature.login.navigation.loginNavGraph
Expand All @@ -22,16 +24,32 @@ fun YappNavHost(
) {
loginNavGraph(
navigateSignUp = { navigator.navigateSignUpScreen() },
navigateHome = { navigator.navigateHomeScreen() }
navigateHome = {
navigator.navigateHomeScreen(
navOptions = clearBackStackNavOptions
)
}
)
signupNavGraph(
navigateBack = { navigator.popBackStack() }
navigateBack = { navigator.popBackStack() },
navigateHome = {
navigator.navigateHomeScreen(
navOptions = clearBackStackNavOptions
)
}
)
homeNavGraph(
navigateNotice = { navigator.navigateNoticeScreen() },
navigateSetting = { navigator.navigateSettingScreen() }
)
settingNavGraph()
settingNavGraph(
navigateLogin = {
navigator.navigateLoginScreen(
navOptions = clearBackStackNavOptions
)
},
navigateBack = { navigator.popBackStack() }
)
noticeNavGraph()
}
}
11 changes: 7 additions & 4 deletions app/src/main/java/com/yapp/app/official/ui/Navigator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.NavOptions
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.yapp.feature.home.navigation.navigateToHome
Expand Down Expand Up @@ -33,16 +34,16 @@ class NavigatorState(

val startDestination = LoginRoute

fun navigateLoginScreen() {
navController.navigateToLogin()
fun navigateLoginScreen(navOptions: NavOptions? = null) {
navController.navigateToLogin(navOptions)
}

fun navigateSignUpScreen() {
navController.navigateToSignUp()
}

fun navigateHomeScreen() {
navController.navigateToHome()
fun navigateHomeScreen(navOptions: NavOptions? = null) {
navController.navigateToHome(navOptions = navOptions)
}

fun navigateSettingScreen(){
Expand All @@ -57,3 +58,5 @@ class NavigatorState(
navController.popBackStack()
}
}

val clearBackStackNavOptions = NavOptions.Builder().setPopUpTo(0, true).build()
2 changes: 1 addition & 1 deletion build-logic/src/main/java/yapp.android.feature.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ dependencies {
implementation(project(":core:designsystem"))
implementation(project(":core:model"))
implementation(project(":core:domain"))

implementation(project(":core:data-api"))
}
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ plugins {
alias(libs.plugins.hilt) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.protobuf) apply false
alias(libs.plugins.google.services) apply false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.yapp.dataapi

interface AlarmRepository {
suspend fun updateFcmToken(fcmToken: String)
suspend fun updateDeviceAlarmStatus()
suspend fun getMasterAlarmStatus(): Boolean
suspend fun updateMasterAlarmStatus(): Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@ package com.yapp.dataapi
import com.yapp.model.SignUpInfo
import com.yapp.model.SignUpResult

interface UnAuthorizedUserRepository {
interface AuthRepository {
suspend fun signUp(
request: SignUpInfo,
): SignUpResult

suspend fun clearTokens()

suspend fun login(
email : String,
password : String
)
}

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.yapp.dataapi

import com.yapp.model.UserInfo

interface UserRepository {
suspend fun deleteAccount()
suspend fun getUserProfile(): UserInfo
}
4 changes: 4 additions & 0 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ dependencies {
implementation(libs.encrypted.datastore.preference.ksp.annotations)
implementation(libs.encrypted.datastore.preference.security)

implementation(platform(libs.firebase.bom))
implementation(libs.firebase.messaging)
implementation(libs.coroutines.play.services)

implementation(libs.androidx.core.ktx)
implementation(libs.retrofit.core)
implementation(libs.retrofit.kotlin.serialization)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.yapp.core.data.data.di

import com.yapp.core.data.data.repository.AuthorizedUserRepositoryImpl
import com.yapp.core.data.data.repository.AlarmRepositoryImpl
import com.yapp.core.data.data.repository.UserRepositoryImpl
import com.yapp.core.data.data.repository.ConfigRepositoryImpl
import com.yapp.core.data.data.repository.LoginRepositoryImpl
import com.yapp.core.data.data.repository.UnAuthorizedUserRepositoryImpl
import com.yapp.core.data.data.repository.UserProfileRepositoryImpl
import com.yapp.dataapi.AuthorizedUserRepository
import com.yapp.core.data.data.repository.AuthRepositoryImpl
import com.yapp.dataapi.AlarmRepository
import com.yapp.dataapi.UserRepository
import com.yapp.dataapi.ConfigRepository
import com.yapp.dataapi.LoginRepository
import com.yapp.dataapi.UnAuthorizedUserRepository
import com.yapp.dataapi.UserProfileRepository
import com.yapp.dataapi.AuthRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
Expand All @@ -20,27 +18,22 @@ import dagger.hilt.components.SingletonComponent
internal abstract class RepositoryModule {

@Binds
abstract fun bindUnAuthorizedUserRepositoryImpl(
repositoryImpl: UnAuthorizedUserRepositoryImpl,
): UnAuthorizedUserRepository
abstract fun bindAuthRepositoryImpl(
repositoryImpl: AuthRepositoryImpl,
): AuthRepository

@Binds
abstract fun bindAuthorizedUserRepositoryImpl(
repositoryImpl: AuthorizedUserRepositoryImpl,
): AuthorizedUserRepository
abstract fun bindUserRepositoryImpl(
repositoryImpl: UserRepositoryImpl,
): UserRepository

@Binds
abstract fun bindConfigRepositoryImpl(
repositoryImpl: ConfigRepositoryImpl,
): ConfigRepository

@Binds
abstract fun bindLoginRepositoryImpl(
repositoryImpl: LoginRepositoryImpl,
): LoginRepository

@Binds
abstract fun bindUserProfileRepositoryImpl(
repositoryImpl: UserProfileRepositoryImpl
): UserProfileRepository
abstract fun bindAlarmRepositoryImpl(
repositoryImpl: AlarmRepositoryImpl,
): AlarmRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.yapp.core.data.data.repository

import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import com.yapp.core.data.remote.api.AlarmApi
import com.yapp.core.data.remote.model.request.DeviceAlarmRequest
import com.yapp.core.data.remote.model.request.FcmTokenRequest
import com.yapp.dataapi.AlarmRepository
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject

internal class AlarmRepositoryImpl @Inject constructor(
@ApplicationContext private val context: Context,
private val alarmApi: AlarmApi,
) : AlarmRepository {

override suspend fun updateFcmToken(fcmToken: String) {
alarmApi.putFcmToken(FcmTokenRequest(fcmToken))
}

override suspend fun updateDeviceAlarmStatus() {
val deviceAlarmStatus = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED
} else {
true // Android 12 ์ดํ•˜์—์„œ๋Š” ์ž๋™ ํ—ˆ์šฉ
}

alarmApi.putDeviceAlarmStatus(
request = DeviceAlarmRequest(deviceAlarmStatus)
)
}

override suspend fun getMasterAlarmStatus(): Boolean {
return alarmApi.getMasterAlarmStatus().isMasterEnabled
}

override suspend fun updateMasterAlarmStatus(): Boolean {
return alarmApi.patchMasterAlarmStatus().isEnabled
}
}
Loading