Skip to content

Commit 5ccaa6b

Browse files
Refactored PreferencesManager (#42)
* Refactored PreferencesManager * Fixed tests * Minor refactoring and JUnit changes * Minor DI changes
1 parent a3252ab commit 5ccaa6b

File tree

47 files changed

+163
-166
lines changed

Some content is hidden

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

47 files changed

+163
-166
lines changed

app/src/main/java/org/openedx/app/AppActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import androidx.core.view.WindowInsetsCompat
1313
import androidx.core.view.WindowInsetsControllerCompat
1414
import androidx.window.layout.WindowMetricsCalculator
1515
import org.openedx.auth.presentation.signin.SignInFragment
16-
import org.openedx.core.data.storage.PreferencesManager
1716
import org.openedx.core.extension.requestApplyInsetsWhenAttached
1817
import org.openedx.core.presentation.global.AppData
1918
import org.openedx.core.presentation.global.AppDataHolder
@@ -25,6 +24,7 @@ import org.openedx.profile.presentation.ProfileRouter
2524
import org.koin.android.ext.android.inject
2625
import org.koin.androidx.viewmodel.ext.android.viewModel
2726
import org.openedx.app.databinding.ActivityAppBinding
27+
import org.openedx.core.data.storage.CorePreferences
2828

2929
class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder, AppDataHolder {
3030

@@ -40,7 +40,7 @@ class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder, AppDataH
4040
get() = AppData(BuildConfig.VERSION_NAME)
4141

4242
private lateinit var binding: ActivityAppBinding
43-
private val preferencesManager by inject<PreferencesManager>()
43+
private val preferencesManager by inject<CorePreferences>()
4444
private val viewModel by viewModel<AppViewModel>()
4545
private val profileRouter by inject<ProfileRouter>()
4646

@@ -57,7 +57,7 @@ class AppActivity : AppCompatActivity(), InsetHolder, WindowSizeHolder, AppDataH
5757

5858
override fun onCreate(savedInstanceState: Bundle?) {
5959
super.onCreate(savedInstanceState)
60-
val splashScreen = installSplashScreen()
60+
installSplashScreen()
6161
binding = ActivityAppBinding.inflate(layoutInflater)
6262
lifecycle.addObserver(viewModel)
6363
setContentView(binding.root)

app/src/main/java/org/openedx/app/AppRouter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.openedx.auth.presentation.restore.RestorePasswordFragment
88
import org.openedx.auth.presentation.signin.SignInFragment
99
import org.openedx.auth.presentation.signup.SignUpFragment
1010
import org.openedx.core.FragmentViewType
11-
import org.openedx.core.domain.model.Account
11+
import org.openedx.profile.domain.model.Account
1212
import org.openedx.core.domain.model.CoursewareAccess
1313
import org.openedx.core.presentation.course.CourseViewMode
1414
import org.openedx.course.presentation.CourseRouter

app/src/main/java/org/openedx/app/AppViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import androidx.lifecycle.viewModelScope
66
import androidx.room.RoomDatabase
77
import org.openedx.core.BaseViewModel
88
import org.openedx.core.SingleEventLiveData
9-
import org.openedx.core.data.storage.PreferencesManager
109
import org.openedx.app.system.notifier.AppNotifier
1110
import org.openedx.app.system.notifier.LogoutEvent
1211
import kotlinx.coroutines.CoroutineDispatcher
1312
import kotlinx.coroutines.launch
1413
import kotlinx.coroutines.withContext
14+
import org.openedx.core.data.storage.CorePreferences
1515

1616
class AppViewModel(
1717
private val notifier: AppNotifier,
1818
private val room: RoomDatabase,
19-
private val preferencesManager: PreferencesManager,
19+
private val preferencesManager: CorePreferences,
2020
private val dispatcher: CoroutineDispatcher,
2121
private val analytics: AppAnalytics
2222
) : BaseViewModel() {

app/src/main/java/org/openedx/app/data/networking/HeadersInterceptor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package org.openedx.app.data.networking
22

33
import org.openedx.core.ApiConstants
4-
import org.openedx.core.data.storage.PreferencesManager
54
import okhttp3.Interceptor
65
import okhttp3.Response
6+
import org.openedx.core.data.storage.CorePreferences
77

8-
class HeadersInterceptor(private val preferencesManager: PreferencesManager) : Interceptor {
8+
class HeadersInterceptor(private val preferencesManager: CorePreferences) : Interceptor {
99

1010
override fun intercept(chain: Interceptor.Chain): Response = chain.run {
1111
proceed(

app/src/main/java/org/openedx/app/data/networking/OauthRefreshTokenAuthenticator.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.google.gson.Gson
55
import org.openedx.auth.data.api.AuthApi
66
import org.openedx.auth.data.model.AuthResponse
77
import org.openedx.core.ApiConstants
8-
import org.openedx.core.data.storage.PreferencesManager
98
import org.openedx.app.system.notifier.AppNotifier
109
import org.openedx.app.system.notifier.LogoutEvent
1110
import kotlinx.coroutines.runBlocking
@@ -14,13 +13,14 @@ import okhttp3.logging.HttpLoggingInterceptor
1413
import org.json.JSONException
1514
import org.json.JSONObject
1615
import org.openedx.core.BuildConfig
16+
import org.openedx.core.data.storage.CorePreferences
1717
import retrofit2.Retrofit
1818
import retrofit2.converter.gson.GsonConverterFactory
1919
import java.io.IOException
2020
import java.util.concurrent.TimeUnit
2121

2222
class OauthRefreshTokenAuthenticator(
23-
private val preferencesManager: PreferencesManager,
23+
private val preferencesManager: CorePreferences,
2424
private val appNotifier: AppNotifier,
2525
) : Authenticator {
2626

@@ -35,7 +35,7 @@ class OauthRefreshTokenAuthenticator(
3535
}
3636
}.build()
3737
authApi = Retrofit.Builder()
38-
.baseUrl(org.openedx.core.BuildConfig.BASE_URL)
38+
.baseUrl(BuildConfig.BASE_URL)
3939
.client(okHttpClient)
4040
.addConverterFactory(GsonConverterFactory.create(Gson()))
4141
.build()
@@ -113,7 +113,7 @@ class OauthRefreshTokenAuthenticator(
113113
private fun refreshAccessToken(refreshToken: String): AuthResponse? {
114114
val response = authApi.refreshAccessToken(
115115
ApiConstants.TOKEN_TYPE_REFRESH,
116-
org.openedx.core.BuildConfig.CLIENT_ID,
116+
BuildConfig.CLIENT_ID,
117117
refreshToken
118118
).execute()
119119
val authResponse = response.body()

core/src/main/java/org/openedx/core/data/storage/PreferencesManager.kt renamed to app/src/main/java/org/openedx/app/data/storage/PreferencesManager.kt

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package org.openedx.core.data.storage
1+
package org.openedx.app.data.storage
22

33
import android.content.Context
44
import com.google.gson.Gson
5-
import org.openedx.core.domain.model.Account
5+
import org.openedx.core.data.storage.CorePreferences
6+
import org.openedx.profile.domain.model.Account
67
import org.openedx.core.domain.model.User
78
import org.openedx.core.domain.model.VideoSettings
9+
import org.openedx.profile.data.storage.ProfilePreferences
810

11+
class PreferencesManager(context: Context) : CorePreferences, ProfilePreferences {
912

10-
class PreferencesManager(private val context: Context) {
11-
12-
private val sharedPreferences =
13-
context.getSharedPreferences("org.openedx.app", Context.MODE_PRIVATE)
13+
private val sharedPreferences = context.getSharedPreferences("org.openedx.app", Context.MODE_PRIVATE)
1414

1515
private fun saveString(key: String, value: String) {
1616
sharedPreferences.edit().apply {
@@ -20,28 +20,27 @@ class PreferencesManager(private val context: Context) {
2020

2121
private fun getString(key: String): String = sharedPreferences.getString(key, "") ?: ""
2222

23-
fun clear() {
23+
override fun clear() {
2424
sharedPreferences.edit().apply {
2525
remove(ACCESS_TOKEN)
2626
remove(REFRESH_TOKEN)
2727
remove(USER)
2828
}.apply()
2929
}
3030

31-
32-
var accessToken: String
31+
override var accessToken: String
3332
set(value) {
3433
saveString(ACCESS_TOKEN, value)
3534
}
3635
get() = getString(ACCESS_TOKEN)
3736

38-
var refreshToken: String
37+
override var refreshToken: String
3938
set(value) {
4039
saveString(REFRESH_TOKEN, value)
4140
}
4241
get() = getString(REFRESH_TOKEN)
4342

44-
var user: User?
43+
override var user: User?
4544
set(value) {
4645
val userJson = Gson().toJson(value)
4746
saveString(USER, userJson)
@@ -51,7 +50,7 @@ class PreferencesManager(private val context: Context) {
5150
return Gson().fromJson(userString, User::class.java)
5251
}
5352

54-
var profile: Account?
53+
override var profile: Account?
5554
set(value) {
5655
val accountJson = Gson().toJson(value)
5756
saveString(ACCOUNT, accountJson)
@@ -61,7 +60,7 @@ class PreferencesManager(private val context: Context) {
6160
return Gson().fromJson(accountString, Account::class.java)
6261
}
6362

64-
var videoSettings: VideoSettings
63+
override var videoSettings: VideoSettings
6564
set(value) {
6665
val videoSettingsJson = Gson().toJson(value)
6766
saveString(VIDEO_SETTINGS, videoSettingsJson)
@@ -72,7 +71,6 @@ class PreferencesManager(private val context: Context) {
7271
?: VideoSettings.default
7372
}
7473

75-
7674
companion object {
7775
private const val ACCESS_TOKEN = "access_token"
7876
private const val REFRESH_TOKEN = "refresh_token"

app/src/main/java/org/openedx/app/di/AppModule.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.google.gson.Gson
66
import com.google.gson.GsonBuilder
77
import org.openedx.auth.presentation.AuthAnalytics
88
import org.openedx.auth.presentation.AuthRouter
9-
import org.openedx.core.data.storage.PreferencesManager
9+
import org.openedx.app.data.storage.PreferencesManager
1010
import org.openedx.core.module.DownloadWorkerController
1111
import org.openedx.core.module.TranscriptManager
1212
import org.openedx.core.module.download.FileDownloader
@@ -36,10 +36,14 @@ import kotlinx.coroutines.Dispatchers
3636
import org.koin.android.ext.koin.androidApplication
3737
import org.koin.core.qualifier.named
3838
import org.koin.dsl.module
39+
import org.openedx.core.data.storage.CorePreferences
40+
import org.openedx.profile.data.storage.ProfilePreferences
3941

4042
val appModule = module {
4143

4244
single { PreferencesManager(get()) }
45+
single<CorePreferences> { get<PreferencesManager>() }
46+
single<ProfilePreferences> { get<PreferencesManager>() }
4347

4448
single { ResourceManager(get()) }
4549

app/src/main/java/org/openedx/app/di/ScreenModule.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.openedx.auth.presentation.restore.RestorePasswordViewModel
66
import org.openedx.auth.presentation.signin.SignInViewModel
77
import org.openedx.auth.presentation.signup.SignUpViewModel
88
import org.openedx.core.Validator
9-
import org.openedx.core.domain.model.Account
9+
import org.openedx.profile.domain.model.Account
1010
import org.openedx.core.presentation.dialog.SelectDialogViewModel
1111
import org.openedx.course.data.repository.CourseRepository
1212
import org.openedx.course.domain.interactor.CourseInteractor
@@ -82,7 +82,7 @@ val screenModule = module {
8282
viewModel { (courseId: String) -> CourseSectionViewModel(get(), get(), get(), get(), get(), get(), get(), get(), courseId) }
8383
viewModel { (courseId: String) -> CourseUnitContainerViewModel(get(), get(), get(), courseId) }
8484
viewModel { (courseId: String) -> CourseVideoViewModel(courseId, get(), get(), get(), get(), get(), get(), get()) }
85-
viewModel { (courseId: String) -> VideoViewModel(courseId, get(), get(), get()) }
85+
viewModel { (courseId: String) -> VideoViewModel(courseId, get(), get()) }
8686
viewModel { (courseId: String) -> VideoUnitViewModel(courseId, get(), get(), get(), get()) }
8787
viewModel { (courseId:String, handoutsType: String) -> HandoutsViewModel(courseId, handoutsType, get()) }
8888
viewModel { CourseSearchViewModel(get(), get(), get()) }
@@ -92,8 +92,8 @@ val screenModule = module {
9292
factory { DiscussionInteractor(get()) }
9393
viewModel { (courseId: String) -> DiscussionTopicsViewModel(get(), get(), get(), courseId) }
9494
viewModel { (courseId: String, topicId: String, threadType: String) -> DiscussionThreadsViewModel(get(), get(), get(), courseId, topicId, threadType) }
95-
viewModel { (thread: org.openedx.discussion.domain.model.Thread) -> DiscussionCommentsViewModel(get(), get(), get(), get(), thread) }
96-
viewModel { (comment: DiscussionComment) -> DiscussionResponsesViewModel(get(), get(), get(), get(), comment) }
95+
viewModel { (thread: org.openedx.discussion.domain.model.Thread) -> DiscussionCommentsViewModel(get(), get(), get(), thread) }
96+
viewModel { (comment: DiscussionComment) -> DiscussionResponsesViewModel(get(), get(), get(), comment) }
9797
viewModel { (courseId: String) -> DiscussionAddThreadViewModel(get(), get(), get(), courseId) }
9898
viewModel { (courseId: String) -> DiscussionSearchThreadViewModel(get(), get(), get(), courseId) }
9999
}

app/src/test/java/org/openedx/AppViewModelTest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
44
import androidx.lifecycle.Lifecycle
55
import androidx.lifecycle.LifecycleOwner
66
import androidx.lifecycle.LifecycleRegistry
7-
import org.openedx.core.data.storage.PreferencesManager
7+
import org.openedx.app.data.storage.PreferencesManager
88
import org.openedx.core.domain.model.User
99
import org.openedx.app.room.AppDatabase
1010
import org.openedx.app.system.notifier.AppNotifier
@@ -18,7 +18,6 @@ import kotlinx.coroutines.Dispatchers
1818
import kotlinx.coroutines.ExperimentalCoroutinesApi
1919
import kotlinx.coroutines.flow.flow
2020
import kotlinx.coroutines.test.StandardTestDispatcher
21-
import kotlinx.coroutines.test.UnconfinedTestDispatcher
2221
import kotlinx.coroutines.test.advanceUntilIdle
2322
import kotlinx.coroutines.test.resetMain
2423
import kotlinx.coroutines.test.runTest

auth/src/main/java/org/openedx/auth/data/repository/AuthRepository.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ package org.openedx.auth.data.repository
33
import org.openedx.auth.data.api.AuthApi
44
import org.openedx.auth.data.model.ValidationFields
55
import org.openedx.core.ApiConstants
6-
import org.openedx.core.BuildConfig
7-
import org.openedx.core.data.storage.PreferencesManager
6+
import org.openedx.core.data.storage.CorePreferences
87
import org.openedx.core.domain.model.RegistrationField
98
import org.openedx.core.system.EdxError
109

1110
class AuthRepository(
1211
private val api: AuthApi,
13-
private val preferencesManager: PreferencesManager,
12+
private val preferencesManager: CorePreferences,
1413
) {
1514

1615
suspend fun login(

0 commit comments

Comments
 (0)