Skip to content

Commit e3d4eaa

Browse files
authored
Merge pull request #272 from Team-Clody/feat/#268-draft-alarm-home
[Feat/#268] 이어쓰기 알림 설정을 유도하는 기능을 구현합니다.
2 parents 91e35d0 + 116ac9e commit e3d4eaa

File tree

16 files changed

+293
-27
lines changed

16 files changed

+293
-27
lines changed

app/src/main/java/com/sopt/clody/data/datastore/TokenDataStoreImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.sopt.clody.data.datastore
22

33
import android.content.SharedPreferences
4+
import com.sopt.clody.di.qualifier.TokenPrefs
45
import javax.inject.Inject
56

67
class TokenDataStoreImpl @Inject constructor(
7-
private val sharedPreferences: SharedPreferences,
8+
@TokenPrefs private val sharedPreferences: SharedPreferences,
89
) : TokenDataStore {
910
override var accessToken: String
1011
get() = sharedPreferences.getString(ACCESS_TOKEN, "") ?: ""
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.sopt.clody.data.local.datasource
2+
3+
/**
4+
* 임시 저장 최초 사용 여부 판단을 위한 SharedPreferences
5+
* @property isDraftUsed 임시 저장 사용 여부
6+
* @property isFirstUse 임시 저장 최초 사용 여부
7+
*/
8+
interface FirstDraftLocalDataSource {
9+
var isDraftUsed: Boolean
10+
var isFirstUse: Boolean
11+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.sopt.clody.data.local.datasourceimpl
2+
3+
import android.content.SharedPreferences
4+
import androidx.core.content.edit
5+
import com.sopt.clody.data.local.datasource.FirstDraftLocalDataSource
6+
import com.sopt.clody.di.qualifier.FirstDraftPrefs
7+
import javax.inject.Inject
8+
9+
class FirstDraftLocalDataSourceImpl @Inject constructor(
10+
@FirstDraftPrefs private val sharedPreferences: SharedPreferences,
11+
) : FirstDraftLocalDataSource {
12+
override var isDraftUsed: Boolean
13+
get() = sharedPreferences.getBoolean(IS_DRAFT_USED, false)
14+
set(value) = sharedPreferences.edit { putBoolean(IS_DRAFT_USED, value) }
15+
16+
override var isFirstUse: Boolean
17+
get() = sharedPreferences.getBoolean(IS_FIRST_USE, false)
18+
set(value) = sharedPreferences.edit { putBoolean(IS_FIRST_USE, value) }
19+
20+
companion object {
21+
private const val IS_DRAFT_USED = "IS_DRAFT_USED"
22+
private const val IS_FIRST_USE = "IS_FIRST_USE"
23+
}
24+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.sopt.clody.data.repositoryimpl
2+
3+
import com.sopt.clody.data.local.datasource.FirstDraftLocalDataSource
4+
import com.sopt.clody.domain.repository.DraftRepository
5+
import javax.inject.Inject
6+
7+
class DraftRepositoryImpl @Inject constructor(
8+
private val firstDraftLocalDataSource: FirstDraftLocalDataSource,
9+
) : DraftRepository {
10+
override fun getIsDraftUsed(): Boolean = firstDraftLocalDataSource.isDraftUsed
11+
12+
override fun setIsDraftUsed(state: Boolean) {
13+
firstDraftLocalDataSource.isDraftUsed = state
14+
}
15+
16+
override fun getIsFirstUse(): Boolean = firstDraftLocalDataSource.isFirstUse
17+
18+
override fun setIsFirstUse(state: Boolean) {
19+
firstDraftLocalDataSource.isFirstUse = state
20+
}
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.sopt.clody.di
2+
3+
import android.content.SharedPreferences
4+
import com.sopt.clody.data.datastore.TokenDataStore
5+
import com.sopt.clody.data.datastore.TokenDataStoreImpl
6+
import com.sopt.clody.data.local.datasource.FirstDraftLocalDataSource
7+
import com.sopt.clody.data.local.datasourceimpl.FirstDraftLocalDataSourceImpl
8+
import com.sopt.clody.di.qualifier.FirstDraftPrefs
9+
import com.sopt.clody.di.qualifier.TokenPrefs
10+
import dagger.Module
11+
import dagger.Provides
12+
import dagger.hilt.InstallIn
13+
import dagger.hilt.components.SingletonComponent
14+
import javax.inject.Singleton
15+
16+
@Module
17+
@InstallIn(SingletonComponent::class)
18+
object LocalDataSourceModule {
19+
20+
@Provides
21+
@Singleton
22+
fun provideTokenDataStore(@TokenPrefs sharedPreferences: SharedPreferences): TokenDataStore =
23+
TokenDataStoreImpl(sharedPreferences)
24+
25+
@Provides
26+
@Singleton
27+
fun provideFirstDraftLocalDataSource(@FirstDraftPrefs sharedPreferences: SharedPreferences): FirstDraftLocalDataSource =
28+
FirstDraftLocalDataSourceImpl(sharedPreferences)
29+
}

app/src/main/java/com/sopt/clody/di/DataSourceModule.kt renamed to app/src/main/java/com/sopt/clody/di/RemoteDataSourceModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import javax.inject.Singleton
1818

1919
@Module
2020
@InstallIn(SingletonComponent::class)
21-
abstract class DataSourceModule {
21+
abstract class RemoteDataSourceModule {
2222
@Binds
2323
@Singleton
2424
abstract fun bindAuthDataSource(

app/src/main/java/com/sopt/clody/di/RepositoryModule.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import com.sopt.clody.data.repositoryimpl.AccountManagementRepositoryImpl
44
import com.sopt.clody.data.repositoryimpl.AdRepositoryImpl
55
import com.sopt.clody.data.repositoryimpl.AuthRepositoryImpl
66
import com.sopt.clody.data.repositoryimpl.DiaryRepositoryImpl
7+
import com.sopt.clody.data.repositoryimpl.DraftRepositoryImpl
78
import com.sopt.clody.data.repositoryimpl.NotificationRepositoryImpl
89
import com.sopt.clody.data.repositoryimpl.TokenReissueRepositoryImpl
910
import com.sopt.clody.data.repositoryimpl.TokenRepositoryImpl
1011
import com.sopt.clody.domain.repository.AccountManagementRepository
1112
import com.sopt.clody.domain.repository.AdRepository
1213
import com.sopt.clody.domain.repository.AuthRepository
1314
import com.sopt.clody.domain.repository.DiaryRepository
15+
import com.sopt.clody.domain.repository.DraftRepository
1416
import com.sopt.clody.domain.repository.NotificationRepository
1517
import com.sopt.clody.domain.repository.TokenReissueRepository
1618
import com.sopt.clody.domain.repository.TokenRepository
@@ -64,4 +66,10 @@ abstract class RepositoryModule {
6466
abstract fun bindAdRepository(
6567
adRepositoryImpl: AdRepositoryImpl,
6668
): AdRepository
69+
70+
@Binds
71+
@Singleton
72+
abstract fun bindDraftRepository(
73+
draftRepositoryImpl: DraftRepositoryImpl,
74+
): DraftRepository
6775
}

app/src/main/java/com/sopt/clody/di/SharedPreferencesModule.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package com.sopt.clody.di
22

33
import android.content.Context
44
import android.content.SharedPreferences
5+
import com.sopt.clody.di.qualifier.FirstDraftPrefs
6+
import com.sopt.clody.di.qualifier.TokenPrefs
57
import dagger.Module
68
import dagger.Provides
79
import dagger.hilt.InstallIn
@@ -12,9 +14,18 @@ import javax.inject.Singleton
1214
@Module
1315
@InstallIn(SingletonComponent::class)
1416
object SharedPreferencesModule {
17+
18+
@TokenPrefs
1519
@Provides
1620
@Singleton
17-
fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
21+
fun provideTokenSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
1822
return context.getSharedPreferences("token_prefs", Context.MODE_PRIVATE)
1923
}
24+
25+
@FirstDraftPrefs
26+
@Provides
27+
@Singleton
28+
fun provideFirstDraftSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
29+
return context.getSharedPreferences("first_draft_prefs", Context.MODE_PRIVATE)
30+
}
2031
}

app/src/main/java/com/sopt/clody/di/TokenDataStoreModule.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.sopt.clody.di.qualifier
2+
3+
import javax.inject.Qualifier
4+
5+
@Qualifier
6+
@Retention(AnnotationRetention.BINARY)
7+
annotation class TokenPrefs
8+
9+
@Qualifier
10+
@Retention(AnnotationRetention.BINARY)
11+
annotation class FirstDraftPrefs

0 commit comments

Comments
 (0)