Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차/필수] Compose repository 패턴 #19

Open
wants to merge 1 commit into
base: develop-compose
Choose a base branch
from
Open
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
1 change: 1 addition & 0 deletions app/src/main/java/com/sopt/now/compose/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.sopt.now.compose.screen.main.MainScreen
import com.sopt.now.compose.ui.theme.NOWSOPTAndroidTheme
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

어떤 어노테이션인가 했더니 이것도 Dagger-Hilt 모듈과 관련된 어노테이션이군요 !

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.sopt.now.compose.data.datasource

interface SharedPrefDataSource {
fun setUserId(key: String, value: Int)
fun getUserId(key: String): Int
fun clearUserData()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.sopt.now.compose.data.datasourceImpl

import android.content.SharedPreferences
import com.sopt.now.compose.data.datasource.SharedPrefDataSource
import javax.inject.Inject

class SharedPrefDataSourceImpl @Inject constructor(
private val sharedPreferences: SharedPreferences
) : SharedPrefDataSource{

override fun setUserId(key: String, value: Int) {
sharedPreferences.edit().putInt(key,value).apply()
}

override fun getUserId(key: String): Int {
return sharedPreferences.getInt(key, 0)
}

override fun clearUserData() {
sharedPreferences.edit().clear().apply()
}
}
17 changes: 17 additions & 0 deletions app/src/main/java/com/sopt/now/compose/data/di/DataSourceModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sopt.now.compose.data.di

import com.sopt.now.compose.data.datasource.SharedPrefDataSource
import com.sopt.now.compose.data.datasourceImpl.SharedPrefDataSourceImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class DataSourceModule {
@Singleton
@Binds
abstract fun bindsSharedPrefDataSource(sharedPrefDataSource: SharedPrefDataSourceImpl): SharedPrefDataSource
}
19 changes: 19 additions & 0 deletions app/src/main/java/com/sopt/now/compose/data/di/RepositoryModule.kt

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이제 힐트까지 ㄷ.ㄷ 야무지십니당

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.sopt.now.compose.data.di

import com.sopt.now.compose.data.repository.SharedPrefRepository
import com.sopt.now.compose.data.repository.SharedPrefRepositoryImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class RepositoryModule {
@Singleton
@Binds
abstract fun bindsSharedPrefRepository(
sharedPrefRepository: SharedPrefRepositoryImpl
): SharedPrefRepository
}
20 changes: 20 additions & 0 deletions app/src/main/java/com/sopt/now/compose/data/di/SharedPrefModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.sopt.now.compose.data.di

import android.content.Context
import android.content.SharedPreferences
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object SharedPrefModule {
@Provides
@Singleton
fun provideSharedPref(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("userData", Context.MODE_PRIVATE)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

키값도 상수로 만들어주면 좋을 것 같네요

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.sopt.now.compose.data.repository

interface SharedPrefRepository {
fun setUserId(key: String, value: Int)
fun getUserId(key: String): Int
fun clearUserData()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.sopt.now.compose.data.repository

import com.sopt.now.compose.data.datasource.SharedPrefDataSource
import javax.inject.Inject

class SharedPrefRepositoryImpl @Inject constructor(
private val sharedPrefDataSource: SharedPrefDataSource
) : SharedPrefRepository {
override fun setUserId(key: String, value: Int) {
sharedPrefDataSource.setUserId(key, value)
}

override fun getUserId(key: String): Int {
return sharedPrefDataSource.getUserId(key)
}

override fun clearUserData() {
sharedPrefDataSource.clearUserData()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,17 @@ import com.sopt.now.compose.R
import com.sopt.now.compose.data.model.RequestSignInDto
import com.sopt.now.compose.data.model.ResponseSignInDto
import com.sopt.now.compose.data.model.ServicePool
import com.sopt.now.compose.data.repository.SharedPrefRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import javax.inject.Inject

class SignInViewModel : ViewModel() {
@HiltViewModel
class SignInViewModel @Inject constructor(
private val sharedPreferences: SharedPrefRepository
) : ViewModel() {
private val _loginState: MutableLiveData<SignInState> = MutableLiveData(SignInState.Empty)
val loginState: LiveData<SignInState> get() = _loginState

Expand Down