From 2bebba5f496bd08883b000f3a09f808bd927b738 Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Fri, 7 Jun 2024 00:53:07 +0900 Subject: [PATCH 1/3] UIState --- app/src/main/java/com/sopt/now/util/UiState.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 app/src/main/java/com/sopt/now/util/UiState.kt diff --git a/app/src/main/java/com/sopt/now/util/UiState.kt b/app/src/main/java/com/sopt/now/util/UiState.kt new file mode 100644 index 0000000..926ddb2 --- /dev/null +++ b/app/src/main/java/com/sopt/now/util/UiState.kt @@ -0,0 +1,13 @@ +package com.sopt.now.util + +sealed interface UiState { + object Empty : UiState + data class Success( + val data: T + ) : UiState + + data class Failure( + val msg: String + ) : UiState + +} From a43427ce00a746e36c4dd7593fb3e5dcb2f30300 Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Fri, 7 Jun 2024 00:54:25 +0900 Subject: [PATCH 2/3] room repository --- .../sopt/now/data/database/FriendDatabase.kt | 21 +--------- .../now/data/datasource/FriendDataSource.kt | 10 +++++ .../datasourceImpl/FriendDataSourceImpl.kt | 27 ++++++++++++ .../com/sopt/now/data/di/DataBaseModule.kt | 26 ++++++++++++ .../com/sopt/now/data/di/DataSourceModule.kt | 23 +++++++++++ .../com/sopt/now/data/di/RepositoryModule.kt | 27 ++++++++++++ .../com/sopt/now/data/model/local/Friend.kt | 10 ----- .../sopt/now/data/model/local/FriendEntity.kt | 10 +---- .../now/data/repository/FriendRepository.kt | 10 +++++ .../data/repository/FriendRepositoryImpl.kt | 30 ++++++++++++++ .../main/friends/FriendAdapter.kt | 2 +- .../main/friends/FriendFragment.kt | 41 +++++++++++-------- .../main/friends/FriendViewHolder.kt | 2 +- .../main/friends/FriendViewModel.kt | 31 ++++++++++---- .../main/friends/FriendViewModelFactory.kt | 16 -------- .../friends/addfriend/AddFriendActivity.kt | 8 ++-- .../friends/addfriend/AddFriendViewModel.kt | 14 +++++-- .../addfriend/AddFriendViewModelFactory.kt | 16 -------- .../main/mypage/MyPageViewModel.kt | 4 +- .../com/sopt/now/presentation/model/Friend.kt | 23 +++++++++++ 20 files changed, 243 insertions(+), 108 deletions(-) create mode 100644 app/src/main/java/com/sopt/now/data/datasource/FriendDataSource.kt create mode 100644 app/src/main/java/com/sopt/now/data/datasourceImpl/FriendDataSourceImpl.kt create mode 100644 app/src/main/java/com/sopt/now/data/di/DataBaseModule.kt create mode 100644 app/src/main/java/com/sopt/now/data/di/DataSourceModule.kt create mode 100644 app/src/main/java/com/sopt/now/data/di/RepositoryModule.kt delete mode 100644 app/src/main/java/com/sopt/now/data/model/local/Friend.kt create mode 100644 app/src/main/java/com/sopt/now/data/repository/FriendRepository.kt create mode 100644 app/src/main/java/com/sopt/now/data/repository/FriendRepositoryImpl.kt delete mode 100644 app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModelFactory.kt delete mode 100644 app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModelFactory.kt create mode 100644 app/src/main/java/com/sopt/now/presentation/model/Friend.kt diff --git a/app/src/main/java/com/sopt/now/data/database/FriendDatabase.kt b/app/src/main/java/com/sopt/now/data/database/FriendDatabase.kt index 9ef4713..67fad4c 100644 --- a/app/src/main/java/com/sopt/now/data/database/FriendDatabase.kt +++ b/app/src/main/java/com/sopt/now/data/database/FriendDatabase.kt @@ -1,30 +1,11 @@ package com.sopt.now.data.database -import android.content.Context import androidx.room.Database -import androidx.room.Room import androidx.room.RoomDatabase import com.sopt.now.data.model.local.FriendDao import com.sopt.now.data.model.local.FriendEntity -@Database(entities = [FriendEntity::class], version = 2) +@Database(entities = [FriendEntity::class], version = 1) abstract class FriendDatabase : RoomDatabase() { abstract fun friendDao(): FriendDao - - companion object{ - @Volatile - private var INSTANCE: FriendDatabase? = null - - fun getDatabase(context: Context): FriendDatabase { - return INSTANCE ?: synchronized(this) { - val instance = Room.databaseBuilder( - context.applicationContext, - FriendDatabase::class.java, - "friend_database" - ).build() - INSTANCE = instance - instance - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/datasource/FriendDataSource.kt b/app/src/main/java/com/sopt/now/data/datasource/FriendDataSource.kt new file mode 100644 index 0000000..e97d48b --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/datasource/FriendDataSource.kt @@ -0,0 +1,10 @@ +package com.sopt.now.data.datasource + +import com.sopt.now.data.model.local.FriendEntity + +interface FriendDataSource { + suspend fun insertFriend(friendEntity: FriendEntity) + suspend fun getFriend(): List + suspend fun deleteFriend(id:Int) + suspend fun deleteAll() +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/datasourceImpl/FriendDataSourceImpl.kt b/app/src/main/java/com/sopt/now/data/datasourceImpl/FriendDataSourceImpl.kt new file mode 100644 index 0000000..f1039ac --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/datasourceImpl/FriendDataSourceImpl.kt @@ -0,0 +1,27 @@ +package com.sopt.now.data.datasourceImpl + +import com.sopt.now.data.database.FriendDatabase +import com.sopt.now.data.datasource.FriendDataSource +import com.sopt.now.data.model.local.FriendEntity +import javax.inject.Inject + +class FriendDataSourceImpl @Inject constructor( + private val friendDatabase: FriendDatabase +) : FriendDataSource { + override suspend fun insertFriend(friendEntity: FriendEntity) { + friendDatabase.friendDao().insertFriend(friendEntity) + } + + override suspend fun getFriend(): List { + return friendDatabase.friendDao().getFriend() + } + + override suspend fun deleteFriend(id: Int) { + friendDatabase.friendDao().deleteFriend(id) + } + + override suspend fun deleteAll() { + friendDatabase.friendDao().deleteAll() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/di/DataBaseModule.kt b/app/src/main/java/com/sopt/now/data/di/DataBaseModule.kt new file mode 100644 index 0000000..9775a2a --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/di/DataBaseModule.kt @@ -0,0 +1,26 @@ +package com.sopt.now.data.di + +import android.content.Context +import androidx.room.Room +import com.sopt.now.data.database.FriendDatabase +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 DataBaseModule { + @Singleton + @Provides + fun provideDataBase( + @ApplicationContext context: Context + ): FriendDatabase = Room.databaseBuilder(context, FriendDatabase::class.java, "friend.db") + .createFromAsset("database/friend.db").build() + + @Singleton + @Provides + fun provideFriendDao(friendDataBase: FriendDatabase) = friendDataBase.friendDao() +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/di/DataSourceModule.kt b/app/src/main/java/com/sopt/now/data/di/DataSourceModule.kt new file mode 100644 index 0000000..a7ba607 --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/di/DataSourceModule.kt @@ -0,0 +1,23 @@ +package com.sopt.now.data.di + +import com.sopt.now.data.datasource.FriendDataSource +import com.sopt.now.data.datasource.SharedPrefDataSource +import com.sopt.now.data.datasourceImpl.FriendDataSourceImpl +import com.sopt.now.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 bindsFriendDataSource(friendDataSource: FriendDataSourceImpl): FriendDataSource + + @Singleton + @Binds + abstract fun bindsSharedPRefDataSource(sharedPrefDataSource: SharedPrefDataSourceImpl): SharedPrefDataSource +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/di/RepositoryModule.kt b/app/src/main/java/com/sopt/now/data/di/RepositoryModule.kt new file mode 100644 index 0000000..6b77d1d --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/di/RepositoryModule.kt @@ -0,0 +1,27 @@ +package com.sopt.now.data.di + +import com.sopt.now.data.repository.FriendRepository +import com.sopt.now.data.repository.FriendRepositoryImpl +import com.sopt.now.data.repository.SharedPrefRepository +import com.sopt.now.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 bindsFriendRepository( + friendRepository: FriendRepositoryImpl + ): FriendRepository + + @Singleton + @Binds + abstract fun bindsSharedPrefRepository( + sharedPrefRepository: SharedPrefRepositoryImpl + ): SharedPrefRepository +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/model/local/Friend.kt b/app/src/main/java/com/sopt/now/data/model/local/Friend.kt deleted file mode 100644 index 5b2cb96..0000000 --- a/app/src/main/java/com/sopt/now/data/model/local/Friend.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.sopt.now.data.model.local - -import androidx.annotation.DrawableRes - -data class Friend( - val id:Int?, - @DrawableRes val profileImage: Int, - val name: String = "", - val music:String = "" -) diff --git a/app/src/main/java/com/sopt/now/data/model/local/FriendEntity.kt b/app/src/main/java/com/sopt/now/data/model/local/FriendEntity.kt index 51b2613..db0898a 100644 --- a/app/src/main/java/com/sopt/now/data/model/local/FriendEntity.kt +++ b/app/src/main/java/com/sopt/now/data/model/local/FriendEntity.kt @@ -3,6 +3,7 @@ package com.sopt.now.data.model.local import androidx.annotation.DrawableRes import androidx.room.Entity import androidx.room.PrimaryKey +import com.sopt.now.presentation.model.Friend @Entity(tableName = "friend_table") data class FriendEntity( @@ -22,14 +23,5 @@ data class FriendEntity( ) } - - fun toFriend(friendEntityList:List) = friendEntityList.map { data-> - Friend( - id = data.id, - profileImage = data.profileImage, - name = data.name, - music = data.music - ) - } } } diff --git a/app/src/main/java/com/sopt/now/data/repository/FriendRepository.kt b/app/src/main/java/com/sopt/now/data/repository/FriendRepository.kt new file mode 100644 index 0000000..c75ec86 --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/repository/FriendRepository.kt @@ -0,0 +1,10 @@ +package com.sopt.now.data.repository + +import com.sopt.now.data.model.local.FriendEntity + +interface FriendRepository { + suspend fun insertFriend(friendEntity: FriendEntity) + suspend fun getFriend(): Result> + suspend fun deleteFriend(id:Int) + suspend fun deleteAll() +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/repository/FriendRepositoryImpl.kt b/app/src/main/java/com/sopt/now/data/repository/FriendRepositoryImpl.kt new file mode 100644 index 0000000..5770dd4 --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/repository/FriendRepositoryImpl.kt @@ -0,0 +1,30 @@ +package com.sopt.now.data.repository + +import com.sopt.now.data.datasource.FriendDataSource +import com.sopt.now.data.model.local.FriendEntity +import javax.inject.Inject + +class FriendRepositoryImpl @Inject constructor( + private val friendDataSource: FriendDataSource +) : FriendRepository { + override suspend fun insertFriend(friendEntity: FriendEntity) { + friendDataSource.insertFriend(friendEntity) + + } + + override suspend fun getFriend(): Result> = + runCatching { + friendDataSource.getFriend() + } + + + override suspend fun deleteFriend(id: Int) { + friendDataSource.deleteFriend(id) + + } + + override suspend fun deleteAll() { + friendDataSource.deleteAll() + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendAdapter.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendAdapter.kt index 8bfc0b1..fcb1dd9 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendAdapter.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendAdapter.kt @@ -3,7 +3,7 @@ package com.sopt.now.presentation.main.friends import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter -import com.sopt.now.data.model.local.Friend +import com.sopt.now.presentation.model.Friend import com.sopt.now.databinding.ItemFriendBinding import com.sopt.now.util.DiffUtilCallBack diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendFragment.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendFragment.kt index ec6cd86..550d8d6 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendFragment.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendFragment.kt @@ -12,20 +12,16 @@ import androidx.fragment.app.viewModels import androidx.recyclerview.widget.ConcatAdapter import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.sopt.now.R -import com.sopt.now.data.database.FriendDatabase import com.sopt.now.data.model.local.MyProfile import com.sopt.now.databinding.FragmentFriendBinding import com.sopt.now.presentation.main.friends.addfriend.AddFriendActivity +import com.sopt.now.util.UiState +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainFragment : Fragment() { - private val viewModel by viewModels { - FriendViewModelFactory( - FriendDatabase.getDatabase( - requireContext() - ) - ) - } + private val viewModel by viewModels() lateinit var myProfileAdapter: MyProfileAdapter lateinit var friendAdapter: FriendAdapter private var _binding: FragmentFriendBinding? = null @@ -46,8 +42,7 @@ class MainFragment : Fragment() { initFloatingBtnClickListener() initAdapter() - viewModel.getFriend() - FriendListObserver() + initFriendListObserver() //TODO 고쳐야됨 val dummyProfile = mutableListOf( @@ -66,6 +61,7 @@ class MainFragment : Fragment() { super.onResume() viewModel.getFriend() } + override fun onDestroyView() { super.onDestroyView() _binding = null @@ -113,15 +109,26 @@ class MainFragment : Fragment() { } } - private fun FriendListObserver() { - viewModel.friendList.observe(viewLifecycleOwner) { - if (viewModel.friendList.value.isNullOrEmpty()) { - Toast.makeText(requireContext(), "데이터없음", Toast.LENGTH_SHORT).show() - } else { - friendAdapter.submitList(viewModel.friendList.value) - submitFriendList() + private fun initFriendListObserver() { + viewModel.friendList.observe(viewLifecycleOwner) { state -> + when (state) { + is UiState.Success -> { + submitFriendList() + friendAdapter.submitList(state.data) + } + + is UiState.Failure -> { + Toast.makeText(requireContext(), "친구없음", Toast.LENGTH_SHORT).show() + } + + is UiState.Empty -> { + Toast.makeText(requireContext(), "친구없음", Toast.LENGTH_SHORT).show() + } + else -> {} } } + + } private fun submitFriendList() { diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewHolder.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewHolder.kt index f79612e..c326789 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewHolder.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewHolder.kt @@ -1,7 +1,7 @@ package com.sopt.now.presentation.main.friends import androidx.recyclerview.widget.RecyclerView -import com.sopt.now.data.model.local.Friend +import com.sopt.now.presentation.model.Friend import com.sopt.now.databinding.ItemFriendBinding class FriendViewHolder( diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModel.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModel.kt index e183974..b593bd3 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModel.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModel.kt @@ -4,21 +4,38 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.sopt.now.data.database.FriendDatabase -import com.sopt.now.data.model.local.Friend import com.sopt.now.data.model.local.FriendEntity +import com.sopt.now.data.repository.FriendRepository +import com.sopt.now.presentation.model.Friend +import com.sopt.now.util.UiState +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch +import javax.inject.Inject -class FriendViewModel(private val friendDatabase: FriendDatabase) : ViewModel() { - private val _friendList = MutableLiveData>() - val friendList: LiveData> get() = _friendList +@HiltViewModel +class FriendViewModel @Inject constructor( + private val friendRepository: FriendRepository +) : + ViewModel() { + private val _friendList = MutableLiveData>>(UiState.Empty) + val friendList: LiveData>> get() = _friendList + + init { + getFriend() + } fun getFriend() = viewModelScope.launch { - _friendList.value = FriendEntity.toFriend(friendDatabase.friendDao().getFriend()) + friendRepository.getFriend() + .onSuccess { + _friendList.value = UiState.Success(Friend.toFriend(it)) + } + .onFailure { + _friendList.value = UiState.Failure("room 에러") + } } fun deleteFriend(id: Int) = viewModelScope.launch { - friendDatabase.friendDao().deleteFriend(id) + friendRepository.deleteFriend(id) } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModelFactory.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModelFactory.kt deleted file mode 100644 index 478c18e..0000000 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/FriendViewModelFactory.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.sopt.now.presentation.main.friends - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.sopt.now.data.database.FriendDatabase - -class FriendViewModelFactory(private val friendDatabase: FriendDatabase) : - ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(FriendViewModel::class.java)) { - return FriendViewModel(friendDatabase) as T - } else { - throw IllegalArgumentException("unknown") - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendActivity.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendActivity.kt index d977474..1e89c71 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendActivity.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendActivity.kt @@ -6,14 +6,12 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.doAfterTextChanged import com.sopt.now.data.database.FriendDatabase import com.sopt.now.databinding.ActivityAddFriendBinding +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class AddFriendActivity : AppCompatActivity() { lateinit var binding: ActivityAddFriendBinding - private val viewmodel by viewModels { - AddFriendViewModelFactory( - FriendDatabase.getDatabase(this) - ) - } + private val viewmodel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModel.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModel.kt index 91bbd37..b0a0efd 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModel.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModel.kt @@ -4,12 +4,18 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopt.now.R -import com.sopt.now.data.database.FriendDatabase -import com.sopt.now.data.model.local.Friend import com.sopt.now.data.model.local.FriendEntity +import com.sopt.now.data.repository.FriendRepository +import com.sopt.now.presentation.model.Friend +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch +import javax.inject.Inject -class AddFriendViewModel(private val friendDatabase: FriendDatabase) : ViewModel() { +@HiltViewModel +class AddFriendViewModel @Inject constructor( + private val friendRepository: FriendRepository +) : + ViewModel() { private val name: MutableLiveData = MutableLiveData("") private val music: MutableLiveData = MutableLiveData("") @@ -20,7 +26,7 @@ class AddFriendViewModel(private val friendDatabase: FriendDatabase) : ViewModel name = name.value.toString(), music = music.value.toString() ) - friendDatabase.friendDao().insertFriend(FriendEntity.toFriendEntity(friend)) + friendRepository.insertFriend(FriendEntity.toFriendEntity(friend)) } fun updateName(msg: String) { diff --git a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModelFactory.kt b/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModelFactory.kt deleted file mode 100644 index 2d0aa16..0000000 --- a/app/src/main/java/com/sopt/now/presentation/main/friends/addfriend/AddFriendViewModelFactory.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.sopt.now.presentation.main.friends.addfriend - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.sopt.now.data.database.FriendDatabase - -class AddFriendViewModelFactory(private val friendDatabase: FriendDatabase) : - ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(AddFriendViewModel::class.java)) { - return AddFriendViewModel(friendDatabase) as T - } else { - throw IllegalArgumentException("unknown") - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/presentation/main/mypage/MyPageViewModel.kt b/app/src/main/java/com/sopt/now/presentation/main/mypage/MyPageViewModel.kt index a7f4bf9..10ed9f3 100644 --- a/app/src/main/java/com/sopt/now/presentation/main/mypage/MyPageViewModel.kt +++ b/app/src/main/java/com/sopt/now/presentation/main/mypage/MyPageViewModel.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.sopt.now.data.SharedPreferenceUtil +import com.sopt.now.data.datasourceImpl.SharedPrefDataSourceImpl import com.sopt.now.data.model.remote.response.ResponseUserInfoDto import com.sopt.now.data.ServicePool import com.sopt.now.presentation.model.UserInfo @@ -15,7 +15,7 @@ import retrofit2.Response import javax.inject.Inject @HiltViewModel -class MyPageViewModel @Inject constructor(private val sharedPreferences: SharedPreferenceUtil) : +class MyPageViewModel @Inject constructor(private val sharedPreferences: SharedPrefDataSourceImpl) : ViewModel() { private var _userInfo: MutableLiveData = MutableLiveData(UserInfo("", "", "")) val userInfo: LiveData get() = _userInfo diff --git a/app/src/main/java/com/sopt/now/presentation/model/Friend.kt b/app/src/main/java/com/sopt/now/presentation/model/Friend.kt new file mode 100644 index 0000000..fc1fc5c --- /dev/null +++ b/app/src/main/java/com/sopt/now/presentation/model/Friend.kt @@ -0,0 +1,23 @@ +package com.sopt.now.presentation.model + +import androidx.annotation.DrawableRes +import com.sopt.now.data.model.local.FriendEntity + +data class Friend( + val id: Int?, + @DrawableRes val profileImage: Int, + val name: String = "", + val music: String = "" +) { + companion object { + fun toFriend(friendList: List) = friendList.map { data -> + Friend( + id = data.id, + profileImage = data.profileImage, + name = data.name, + music = data.music + ) + + } + } +} From a24bb655f7c42b6ea0db12dc70704e764bda411e Mon Sep 17 00:00:00 2001 From: leeseokchan00 <112953135+leeseokchan00@users.noreply.github.com> Date: Fri, 7 Jun 2024 00:54:32 +0900 Subject: [PATCH 3/3] sharedpref repository --- .../com/sopt/now/data/SharedPreferenceUtil.kt | 27 ----------------- .../data/datasource/SharedPrefDataSource.kt | 9 ++++++ .../SharedPrefDataSourceImpl.kt | 30 +++++++++++++++++++ ...eferencesModule.kt => SharedPrefModule.kt} | 2 +- .../data/repository/SharedPrefRepository.kt | 9 ++++++ .../repository/SharedPrefRepositoryImpl.kt | 28 +++++++++++++++++ .../presentation/signin/SignInViewModel.kt | 5 ++-- .../presentation/signup/SignUpViewModel.kt | 5 ++-- 8 files changed, 83 insertions(+), 32 deletions(-) delete mode 100644 app/src/main/java/com/sopt/now/data/SharedPreferenceUtil.kt create mode 100644 app/src/main/java/com/sopt/now/data/datasource/SharedPrefDataSource.kt create mode 100644 app/src/main/java/com/sopt/now/data/datasourceImpl/SharedPrefDataSourceImpl.kt rename app/src/main/java/com/sopt/now/data/di/{SharedPreferencesModule.kt => SharedPrefModule.kt} (94%) create mode 100644 app/src/main/java/com/sopt/now/data/repository/SharedPrefRepository.kt create mode 100644 app/src/main/java/com/sopt/now/data/repository/SharedPrefRepositoryImpl.kt diff --git a/app/src/main/java/com/sopt/now/data/SharedPreferenceUtil.kt b/app/src/main/java/com/sopt/now/data/SharedPreferenceUtil.kt deleted file mode 100644 index aa10365..0000000 --- a/app/src/main/java/com/sopt/now/data/SharedPreferenceUtil.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.sopt.now.data - -import android.content.SharedPreferences -import javax.inject.Inject - -class SharedPreferenceUtil @Inject constructor(private val sharedPreferences: SharedPreferences) { - - fun setUserId(key: String, value: Int) { - return sharedPreferences.edit().putInt(key, value).apply() - } - - fun getUserId(key: String): Int { - return sharedPreferences.getInt(key, 0) - } - - fun getBoolean(key: String): Boolean { - return sharedPreferences.getBoolean(key, false) - } - - fun setBoolean(key: String, value: Boolean) { - sharedPreferences.edit().putBoolean(key, value).apply() - } - - fun clearUserData() { - sharedPreferences.edit().clear().apply() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/datasource/SharedPrefDataSource.kt b/app/src/main/java/com/sopt/now/data/datasource/SharedPrefDataSource.kt new file mode 100644 index 0000000..907f27a --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/datasource/SharedPrefDataSource.kt @@ -0,0 +1,9 @@ +package com.sopt.now.data.datasource + +interface SharedPrefDataSource { + fun setUserId(key: String, value: Int) + fun getUserId(key: String): Int + fun getBoolean(key: String): Boolean + fun setBoolean(key: String, value: Boolean) + fun clearUserData() +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/datasourceImpl/SharedPrefDataSourceImpl.kt b/app/src/main/java/com/sopt/now/data/datasourceImpl/SharedPrefDataSourceImpl.kt new file mode 100644 index 0000000..e33b786 --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/datasourceImpl/SharedPrefDataSourceImpl.kt @@ -0,0 +1,30 @@ +package com.sopt.now.data.datasourceImpl + +import android.content.SharedPreferences +import com.sopt.now.data.datasource.SharedPrefDataSource +import javax.inject.Inject + +class SharedPrefDataSourceImpl @Inject constructor( + private val sharedPreferences: SharedPreferences +) : SharedPrefDataSource { + + override fun setUserId(key: String, value: Int) { + return sharedPreferences.edit().putInt(key, value).apply() + } + + override fun getUserId(key: String): Int { + return sharedPreferences.getInt(key, 0) + } + + override fun getBoolean(key: String): Boolean { + return sharedPreferences.getBoolean(key, false) + } + + override fun setBoolean(key: String, value: Boolean) { + sharedPreferences.edit().putBoolean(key, value).apply() + } + + override fun clearUserData() { + sharedPreferences.edit().clear().apply() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/di/SharedPreferencesModule.kt b/app/src/main/java/com/sopt/now/data/di/SharedPrefModule.kt similarity index 94% rename from app/src/main/java/com/sopt/now/data/di/SharedPreferencesModule.kt rename to app/src/main/java/com/sopt/now/data/di/SharedPrefModule.kt index f6bba85..1cd742d 100644 --- a/app/src/main/java/com/sopt/now/data/di/SharedPreferencesModule.kt +++ b/app/src/main/java/com/sopt/now/data/di/SharedPrefModule.kt @@ -11,7 +11,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object SharedPreferencesModule { +object SharedPrefModule { @Provides @Singleton fun provideSharedPreferences(@ApplicationContext context: Context):SharedPreferences { diff --git a/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepository.kt b/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepository.kt new file mode 100644 index 0000000..815d67a --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepository.kt @@ -0,0 +1,9 @@ +package com.sopt.now.data.repository + +interface SharedPrefRepository { + fun setUserId(key: String, value: Int) + fun getUserId(key: String): Int + fun getBoolean(key: String): Boolean + fun setBoolean(key: String, value: Boolean) + fun clearUserData() +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepositoryImpl.kt b/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepositoryImpl.kt new file mode 100644 index 0000000..f3780bd --- /dev/null +++ b/app/src/main/java/com/sopt/now/data/repository/SharedPrefRepositoryImpl.kt @@ -0,0 +1,28 @@ +package com.sopt.now.data.repository + +import com.sopt.now.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 getBoolean(key: String): Boolean { + return sharedPrefDataSource.getBoolean(key) + } + + override fun setBoolean(key: String, value: Boolean) { + sharedPrefDataSource.setBoolean(key, value) + } + + override fun clearUserData() { + sharedPrefDataSource.clearUserData() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/presentation/signin/SignInViewModel.kt b/app/src/main/java/com/sopt/now/presentation/signin/SignInViewModel.kt index cee0e23..7cd5d4c 100644 --- a/app/src/main/java/com/sopt/now/presentation/signin/SignInViewModel.kt +++ b/app/src/main/java/com/sopt/now/presentation/signin/SignInViewModel.kt @@ -4,10 +4,11 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.sopt.now.R -import com.sopt.now.data.SharedPreferenceUtil +import com.sopt.now.data.datasourceImpl.SharedPrefDataSourceImpl import com.sopt.now.data.model.remote.request.RequestSignInDto import com.sopt.now.data.model.remote.response.ResponseSignInDto import com.sopt.now.data.ServicePool +import com.sopt.now.data.repository.SharedPrefRepository import dagger.hilt.android.lifecycle.HiltViewModel import retrofit2.Call import retrofit2.Callback @@ -15,7 +16,7 @@ import retrofit2.Response import javax.inject.Inject @HiltViewModel -class SignInViewModel @Inject constructor(private val sharedPreferences: SharedPreferenceUtil) : +class SignInViewModel @Inject constructor(private val sharedPreferences: SharedPrefRepository) : ViewModel() { private val _loginState: MutableLiveData = MutableLiveData(SignInState.Empty) val loginState: LiveData get() = _loginState diff --git a/app/src/main/java/com/sopt/now/presentation/signup/SignUpViewModel.kt b/app/src/main/java/com/sopt/now/presentation/signup/SignUpViewModel.kt index 1b0acb4..8fa5f20 100644 --- a/app/src/main/java/com/sopt/now/presentation/signup/SignUpViewModel.kt +++ b/app/src/main/java/com/sopt/now/presentation/signup/SignUpViewModel.kt @@ -4,10 +4,11 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.sopt.now.R -import com.sopt.now.data.SharedPreferenceUtil +import com.sopt.now.data.datasourceImpl.SharedPrefDataSourceImpl import com.sopt.now.data.model.remote.request.RequestSignUpDto import com.sopt.now.data.model.remote.response.ResponseSignUpDto import com.sopt.now.data.ServicePool +import com.sopt.now.data.repository.SharedPrefRepository import dagger.hilt.android.lifecycle.HiltViewModel import retrofit2.Call import retrofit2.Callback @@ -15,7 +16,7 @@ import retrofit2.Response import javax.inject.Inject @HiltViewModel -class SignUpViewModel @Inject constructor(private val sharedPreferences: SharedPreferenceUtil) : +class SignUpViewModel @Inject constructor(private val sharedPreferences: SharedPrefRepository) : ViewModel() { private val _signUpState: MutableLiveData = MutableLiveData(SignUpState.Empty) val signupState: MutableLiveData get() = _signUpState