fix: implement in-memory token caching to avoid redundant prefs decryptions (#320)
* fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. * fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. * fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. - Fixed GitGuardian warning by removing the "my_secret_token" from the test. * fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. - Fixed GitGuardian warning by removing the "my_secret_token" from the test. - Fixed merge conflicts and ensured code still tests well. * fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. - Fixed GitGuardian warning by removing the "my_secret_token" from the test. * fix: implement in-memory token caching to avoid redundant prefs decryptions Resolves #277 Previously, the `AuthManager.getToken()` method decrypted the entire `EncryptedSharedPreferences` file on every call. Because this method is used in the OkHttp interceptor on every HTTP/WS request, and frequently during navigation, it introduced 10-30ms of redundant work per call. This compounded to noticeable UI lag (e.g., during chat session switches). This commit implements thread-safe in-memory caching for the auth token inside `AuthManager`. - Added a `@Volatile` `cachedToken` and `tokenInitialized` flag. - Modified `getToken()` to return the cached value after initial evaluation, using double-checked locking (`synchronized(this)`) to avoid race conditions. - Updated `setToken()` and `setSelectedProfileId()` to correctly invalidate or update the cache. - Added comprehensive unit tests in `AuthManagerTest.kt` to verify caching behavior and proper invalidation upon profile switches. - Fixed GitGuardian warning by removing the "my_secret_token" from the test. --------- Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
1 parent
eb71ae3a46
commit
42fcf2a14b
19 files changed
+157
-299
No files matched your search
@@ -69,16 +69,17 @@ fun ChannelsScreen(
|
||||
onOpenDrawer = onOpenDrawer,
|
||||
isRefreshing = state.isLoading,
|
||||
onRefresh = { viewModel.loadPlatforms() },
|
||||
) {
|
||||
) { paddingValues ->
|
||||
when {
|
||||
state.isLoading && state.platforms.isEmpty() -> {
|
||||
LoadingState()
|
||||
LoadingState(modifier = Modifier.padding(paddingValues))
|
||||
}
|
||||
|
||||
state.errorMessage != null -> {
|
||||
ErrorState(
|
||||
message = state.errorMessage ?: "",
|
||||
onRetry = { viewModel.loadPlatforms() },
|
||||
modifier = Modifier.padding(paddingValues),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -86,12 +87,13 @@ fun ChannelsScreen(
|
||||
EmptyState(
|
||||
title = stringResource(R.string.channels_empty_title),
|
||||
subtitle = stringResource(R.string.channels_empty_desc),
|
||||
modifier = Modifier.padding(paddingValues),
|
||||
)
|
||||
}
|
||||
|
||||
else -> {
|
||||
LazyColumn(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
modifier = Modifier.fillMaxSize().padding(paddingValues),
|
||||
contentPadding = listContentPadding,
|
||||
verticalArrangement = listItemSpacing,
|
||||
) {
|
||||
|
||||
Reference in new issue
Block a user