Skip to content

Commit d0dd34c

Browse files
authored
Merge pull request #86 from Nexters/dev
Release 1.1.0
2 parents ff24d45 + 343318c commit d0dd34c

File tree

64 files changed

+917
-109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+917
-109
lines changed

app/build.gradle.kts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
33

44
plugins {
55
id("missionmate.android.application")
6+
alias(libs.plugins.google.service)
67
}
78

89
android {
@@ -11,8 +12,8 @@ android {
1112
defaultConfig {
1213
applicationId = "com.goalpanzi.mission_mate"
1314
targetSdk = 34
14-
versionCode = 6
15-
versionName = "1.0.3"
15+
versionCode = 7
16+
versionName = "1.1.0"
1617

1718
vectorDrawables {
1819
useSupportLibrary = true
@@ -47,6 +48,8 @@ dependencies {
4748
ksp(libs.hilt.compiler)
4849
implementation(libs.hilt.android)
4950
implementation(platform(libs.firebase.bom))
51+
implementation(libs.firebase.messaging)
52+
implementation(libs.firebase.analytics)
5053

5154
implementation(project(":feature:main"))
5255
implementation(project(":feature:login"))
@@ -58,4 +61,6 @@ dependencies {
5861
implementation(project(":core:data:onboarding"))
5962
implementation(project(":core:data:setting"))
6063
implementation(project(":core:data:user"))
64+
implementation(project(":core:push"))
65+
implementation(project(":core:notification"))
6166
}

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<uses-permission android:name="android.permission.INTERNET" />
66
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
77
android:maxSdkVersion="32" />
8-
8+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
99
<application
1010
android:name=".MainApplication"
1111
android:allowBackup="true"
@@ -30,4 +30,4 @@
3030
</service>
3131

3232
</application>
33-
</manifest>
33+
</manifest>
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package com.goalpanzi.mission_mate
22

33
import android.app.Application
4+
import com.google.firebase.FirebaseApp
45
import dagger.hilt.android.HiltAndroidApp
56

67
@HiltAndroidApp
7-
class MainApplication : Application()
8+
class MainApplication : Application() {
9+
override fun onCreate() {
10+
super.onCreate()
11+
FirebaseApp.initializeApp(this)
12+
}
13+
}

build-logic/src/main/kotlin/missionmate.android.feature.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
implementation(project(":core:domain:mission"))
2929
implementation(project(":core:domain:common"))
3030
implementation(project(":core:domain:auth"))
31+
implementation(project(":core:domain:onboarding"))
3132
implementation(project(":core:ui"))
3233

33-
}
34+
}

core/data/auth/src/main/java/com/goalpanzi/mission_mate/core/data/auth/repository/AuthRepositoryImpl.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.goalpanzi.mission_mate.core.data.auth.repository
22

33
import com.goalpanzi.mission_mate.core.data.auth.mapper.toModel
4+
import com.goalpanzi.mission_mate.core.data.common.DeviceInfoProvider
45
import com.goalpanzi.mission_mate.core.data.common.handleResult
56
import com.goalpanzi.mission_mate.core.datastore.datasource.AuthDataSource
67
import com.goalpanzi.mission_mate.core.domain.auth.repository.AuthRepository
@@ -13,11 +14,15 @@ import javax.inject.Inject
1314

1415
class AuthRepositoryImpl @Inject constructor(
1516
private val loginService: LoginService,
16-
private val authDataSource: AuthDataSource
17-
): AuthRepository {
17+
private val authDataSource: AuthDataSource,
18+
private val deviceInfoProvider: DeviceInfoProvider
19+
) : AuthRepository {
1820

1921
override suspend fun requestGoogleLogin(email: String) = handleResult {
20-
val request = GoogleLoginRequest(email = email)
22+
val request = GoogleLoginRequest(
23+
email = email,
24+
deviceIdentifier = deviceInfoProvider.getDeviceSSAID()
25+
)
2126
loginService.requestGoogleLogin(request)
2227
}.convert {
2328
it.toModel()
@@ -35,7 +40,9 @@ class AuthRepositoryImpl @Inject constructor(
3540

3641
override fun getRefreshToken(): Flow<String?> = authDataSource.getRefreshToken()
3742

38-
override fun setAccessToken(accessToken: String): Flow<Unit> = authDataSource.setAccessToken(accessToken)
43+
override fun setAccessToken(accessToken: String): Flow<Unit> =
44+
authDataSource.setAccessToken(accessToken)
3945

40-
override fun setRefreshToken(refreshToken: String): Flow<Unit> = authDataSource.setRefreshToken(refreshToken)
46+
override fun setRefreshToken(refreshToken: String): Flow<Unit> =
47+
authDataSource.setRefreshToken(refreshToken)
4148
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.goalpanzi.mission_mate.core.data.common
2+
3+
import android.annotation.SuppressLint
4+
import android.content.Context
5+
import android.provider.Settings
6+
import javax.inject.Inject
7+
8+
class DeviceInfoProvider @Inject constructor(
9+
private val context: Context
10+
) {
11+
@SuppressLint("HardwareIds")
12+
fun getDeviceSSAID(): String {
13+
return Settings.Secure.getString(context.contentResolver,Settings.Secure.ANDROID_ID)
14+
}
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.goalpanzi.mission_mate.core.data.common.di
2+
3+
import android.content.Context
4+
import com.goalpanzi.mission_mate.core.data.common.DeviceInfoProvider
5+
import dagger.Module
6+
import dagger.Provides
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.android.qualifiers.ApplicationContext
9+
import dagger.hilt.components.SingletonComponent
10+
import javax.inject.Singleton
11+
12+
@InstallIn(SingletonComponent::class)
13+
@Module
14+
object DeviceInfoProviderModule {
15+
@Singleton
16+
@Provides
17+
fun provideADeviceInfoProvider(
18+
@ApplicationContext context: Context
19+
): DeviceInfoProvider {
20+
return DeviceInfoProvider(context)
21+
}
22+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.goalpanzi.mission_mate.core.data.user
2+
3+
import kotlinx.coroutines.flow.Flow
4+
5+
interface FcmTokenManager {
6+
fun getFcmToken() : Flow<String>
7+
}

core/data/user/src/main/java/com/goalpanzi/mission_mate/core/data/user/repository/UserRepositoryImpl.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.goalpanzi.mission_mate.core.data.user.repository
22

3+
import com.goalpanzi.mission_mate.core.data.common.DeviceInfoProvider
34
import com.goalpanzi.mission_mate.core.data.common.handleResult
45
import com.goalpanzi.mission_mate.core.data.common.mapper.toResponse
6+
import com.goalpanzi.mission_mate.core.data.user.FcmTokenManager
57
import com.goalpanzi.mission_mate.core.data.user.mapper.toDto
68
import com.goalpanzi.mission_mate.core.data.user.mapper.toModel
79
import com.goalpanzi.mission_mate.core.datastore.datasource.DefaultDataSource
@@ -10,14 +12,17 @@ import com.goalpanzi.mission_mate.core.domain.common.model.user.CharacterType
1012
import com.goalpanzi.mission_mate.core.domain.common.model.user.UserProfile
1113
import com.goalpanzi.mission_mate.core.domain.user.repository.UserRepository
1214
import com.goalpanzi.mission_mate.core.network.model.request.SaveProfileRequest
15+
import com.goalpanzi.mission_mate.core.network.model.request.UpdateDeviceTokenRequest
1316
import com.goalpanzi.mission_mate.core.network.service.ProfileService
1417
import kotlinx.coroutines.flow.Flow
1518
import kotlinx.coroutines.flow.map
1619
import javax.inject.Inject
1720

1821
class UserRepositoryImpl @Inject constructor(
1922
private val profileService: ProfileService,
20-
private val defaultDataSource: DefaultDataSource
23+
private val defaultDataSource: DefaultDataSource,
24+
private val fcmTokenManager: FcmTokenManager,
25+
private val deviceInfoProvider: DeviceInfoProvider
2126
) : UserRepository {
2227
override suspend fun saveProfile(
2328
nickname: String,
@@ -31,6 +36,17 @@ class UserRepositoryImpl @Inject constructor(
3136
profileService.saveProfile(request)
3237
}
3338

39+
override suspend fun updateFcmToken(fcmToken: String): DomainResult<Unit> = handleResult {
40+
val request = UpdateDeviceTokenRequest(
41+
deviceToken = fcmToken,
42+
deviceIdentifier = deviceInfoProvider.getDeviceSSAID(),
43+
osType = "AOS"
44+
)
45+
profileService.updateDeviceToken(request)
46+
}
47+
48+
override fun getFcmToken(): Flow<String> = fcmTokenManager.getFcmToken()
49+
3450
override fun clearUserData(): Flow<Unit> = defaultDataSource.clearUserData()
3551

3652
override fun setUserProfile(data: UserProfile): Flow<Unit> = defaultDataSource.setUserProfile(data.toDto())
@@ -41,4 +57,8 @@ class UserRepositoryImpl @Inject constructor(
4157

4258
override fun getMemberId(): Flow<Long?> = defaultDataSource.getMemberId()
4359

60+
override fun setCachedFcmToken(data: String): Flow<Unit> = defaultDataSource.setFcmToken(data)
61+
62+
override fun getCachedFcmToken(): Flow<String?> = defaultDataSource.getFcmToken()
63+
4464
}

core/datastore/src/main/java/com/goalpanzi/mission_mate/core/datastore/datasource/DefaultDataSource.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ interface DefaultDataSource {
1111
fun setViewedTooltip() : Flow<Unit>
1212
fun setMemberId(data: Long) : Flow<Unit>
1313
fun getMemberId() : Flow<Long?>
14-
}
14+
fun setFcmToken(data: String) : Flow<Unit>
15+
fun getFcmToken() : Flow<String?>
16+
}

0 commit comments

Comments
 (0)