diff --git a/app/src/main/java/gq/kirmanak/mealient/data/network/AuthenticationInterceptor.kt b/app/src/main/java/gq/kirmanak/mealient/data/network/AuthenticationInterceptor.kt index 5eb4bf7..c2466df 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/network/AuthenticationInterceptor.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/network/AuthenticationInterceptor.kt @@ -18,13 +18,13 @@ class AuthenticationInterceptor @Inject constructor( override fun intercept(chain: Interceptor.Chain): Response { val currentHeader = authHeader ?: return chain.proceed(chain.request()) val response = proceedWithAuthHeader(chain, currentHeader) - if (listOf(401, 403).contains(response.code)) { + return if (listOf(401, 403).contains(response.code)) { runBlocking { authRepo.invalidateAuthHeader() } + // Try again with new auth header (if any) or return previous response + authHeader?.let { proceedWithAuthHeader(chain, it) } ?: response } else { - return response + response } - val newHeader = authHeader ?: return response - return proceedWithAuthHeader(chain, newHeader) } private fun proceedWithAuthHeader( diff --git a/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt b/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt index 5e2ee1b..b597b95 100644 --- a/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt +++ b/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt @@ -2,7 +2,6 @@ package gq.kirmanak.mealient.extensions import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch @@ -10,8 +9,4 @@ import kotlinx.coroutines.launch inline fun Fragment.collectWithViewLifecycle( flow: Flow, crossinline collector: suspend (T) -> Unit, -) = launchWithViewLifecycle { flow.collect(collector) } - -fun Fragment.launchWithViewLifecycle( - block: suspend CoroutineScope.() -> Unit, -) = viewLifecycleOwner.lifecycleScope.launch(block = block) +) = viewLifecycleOwner.lifecycleScope.launch { flow.collect(collector) } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt b/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt index 3c8a9eb..56d2b72 100644 --- a/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt +++ b/app/src/main/java/gq/kirmanak/mealient/extensions/ViewExtensions.kt @@ -113,11 +113,9 @@ suspend fun EditText.waitUntilNotEmpty() { fun SharedPreferences.prefsChangeFlow( valueReader: SharedPreferences.() -> T, ): Flow = callbackFlow { - val listener = SharedPreferences.OnSharedPreferenceChangeListener { prefs, _ -> - val value = prefs.valueReader() - trySend(value).logErrors("prefsChangeFlow") - } - trySend(valueReader()) + fun sendValue() = trySend(valueReader()).logErrors("prefsChangeFlow") + val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, _ -> sendValue() } + sendValue() registerOnSharedPreferenceChangeListener(listener) awaitClose { unregisterOnSharedPreferenceChangeListener(listener) } } \ No newline at end of file