From 73a058d69e26f10209cc2ea0af3cca067b8cbb62 Mon Sep 17 00:00:00 2001 From: junieberry Date: Sat, 16 Oct 2021 04:00:04 +0900 Subject: [PATCH 1/7] [Refactor] Convert to Repository Pattern --- .../mvvm2/data/repository/Repository.kt | 20 +++++++++++++++++++ .../repository/{ => remote}/BaseRetrofit.kt | 2 +- .../repository/{ => remote}/MovieRetrofit.kt | 2 +- .../repository/remote/RemoteDataSource.kt | 17 ++++++++++++++++ .../example/mvvm2/ui/main/MainViewModel.kt | 14 ++++++------- 5 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/example/mvvm2/data/repository/Repository.kt rename app/src/main/java/com/example/mvvm2/data/repository/{ => remote}/BaseRetrofit.kt (86%) rename app/src/main/java/com/example/mvvm2/data/repository/{ => remote}/MovieRetrofit.kt (90%) create mode 100644 app/src/main/java/com/example/mvvm2/data/repository/remote/RemoteDataSource.kt diff --git a/app/src/main/java/com/example/mvvm2/data/repository/Repository.kt b/app/src/main/java/com/example/mvvm2/data/repository/Repository.kt new file mode 100644 index 0000000..5ab71f5 --- /dev/null +++ b/app/src/main/java/com/example/mvvm2/data/repository/Repository.kt @@ -0,0 +1,20 @@ +package com.example.mvvm2.data.repository + +import com.example.mvvm2.data.model.MovieResponse +import com.example.mvvm2.data.repository.remote.RemoteDataSourceImpl +import retrofit2.Call + +interface Repository { + val remoteDataSource : RemoteDataSourceImpl + fun getMovieList(query: String) :Call +} + +class RepositoryImpl() : Repository { + override val remoteDataSource: RemoteDataSourceImpl + get() = RemoteDataSourceImpl() + + override fun getMovieList(query: String): Call { + return remoteDataSource.getMovieList(query) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/mvvm2/data/repository/BaseRetrofit.kt b/app/src/main/java/com/example/mvvm2/data/repository/remote/BaseRetrofit.kt similarity index 86% rename from app/src/main/java/com/example/mvvm2/data/repository/BaseRetrofit.kt rename to app/src/main/java/com/example/mvvm2/data/repository/remote/BaseRetrofit.kt index ff5fb24..2541979 100644 --- a/app/src/main/java/com/example/mvvm2/data/repository/BaseRetrofit.kt +++ b/app/src/main/java/com/example/mvvm2/data/repository/remote/BaseRetrofit.kt @@ -1,4 +1,4 @@ -package com.example.mvvm2.data.repository +package com.example.mvvm2.data.repository.remote import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory diff --git a/app/src/main/java/com/example/mvvm2/data/repository/MovieRetrofit.kt b/app/src/main/java/com/example/mvvm2/data/repository/remote/MovieRetrofit.kt similarity index 90% rename from app/src/main/java/com/example/mvvm2/data/repository/MovieRetrofit.kt rename to app/src/main/java/com/example/mvvm2/data/repository/remote/MovieRetrofit.kt index 4baa503..1f03a3f 100644 --- a/app/src/main/java/com/example/mvvm2/data/repository/MovieRetrofit.kt +++ b/app/src/main/java/com/example/mvvm2/data/repository/remote/MovieRetrofit.kt @@ -1,4 +1,4 @@ -package com.example.mvvm2.data.repository +package com.example.mvvm2.data.repository.remote import com.example.mvvm2.data.model.MovieResponse import retrofit2.Call diff --git a/app/src/main/java/com/example/mvvm2/data/repository/remote/RemoteDataSource.kt b/app/src/main/java/com/example/mvvm2/data/repository/remote/RemoteDataSource.kt new file mode 100644 index 0000000..6ecbab9 --- /dev/null +++ b/app/src/main/java/com/example/mvvm2/data/repository/remote/RemoteDataSource.kt @@ -0,0 +1,17 @@ +package com.example.mvvm2.data.repository.remote + +import com.example.mvvm2.data.model.Movie +import com.example.mvvm2.data.model.MovieResponse +import retrofit2.Call +import retrofit2.Response + +interface RemoteDataSource { + fun getMovieList(query: String):Call +} + +class RemoteDataSourceImpl() : RemoteDataSource { + + override fun getMovieList(query: String): Call { + return BaseRetrofit.retrofit.create(MovieRetrofit::class.java).getMovieList(query) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/mvvm2/ui/main/MainViewModel.kt b/app/src/main/java/com/example/mvvm2/ui/main/MainViewModel.kt index c67f559..711e045 100644 --- a/app/src/main/java/com/example/mvvm2/ui/main/MainViewModel.kt +++ b/app/src/main/java/com/example/mvvm2/ui/main/MainViewModel.kt @@ -1,23 +1,23 @@ package com.example.mvvm2.ui.main -import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.example.mvvm2.data.model.Movie import com.example.mvvm2.data.model.MovieResponse -import com.example.mvvm2.data.repository.BaseRetrofit -import com.example.mvvm2.data.repository.MovieRetrofit +import com.example.mvvm2.data.repository.Repository +import com.example.mvvm2.data.repository.RepositoryImpl +import com.example.mvvm2.data.repository.remote.BaseRetrofit +import com.example.mvvm2.data.repository.remote.MovieRetrofit import retrofit2.Call import retrofit2.Response class MainViewModel :ViewModel() { - var query:String = "Harry potter" + var query:String = "" val movieList: MutableLiveData> = MutableLiveData() + val repository: RepositoryImpl = RepositoryImpl() fun getMoveList () { - val api = BaseRetrofit.retrofit.create(MovieRetrofit::class.java).getMovieList(query) - - api.enqueue(object : retrofit2.Callback { + repository.getMovieList(query).enqueue(object : retrofit2.Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful){ movieList.value = response.body()!!.items From 0c30ca114a27a6a0599a6a8deb8b09bbdeb91579 Mon Sep 17 00:00:00 2001 From: junieberry Date: Sat, 16 Oct 2021 04:47:33 +0900 Subject: [PATCH 2/7] [Feat] Add Preference --- .idea/misc.xml | 2 +- .../mvvm2/data/repository/Repository.kt | 19 ++++++++++-- .../data/repository/local/LocalDataSource.kt | 19 ++++++++++++ .../data/repository/local/SharedPreference.kt | 29 +++++++++++++++++++ .../repository/remote/RemoteDataSource.kt | 2 -- app/src/main/res/layout/activity_main.xml | 10 +++++++ app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/example/mvvm2/data/repository/local/LocalDataSource.kt create mode 100644 app/src/main/java/com/example/mvvm2/data/repository/local/SharedPreference.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 3d451ac..da559e7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@