From 7ec9a0f41fb7ec0b4a9055e23763eaffa5e95a50 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Wed, 13 May 2026 22:17:50 +0200 Subject: [PATCH] feat: implement logout functionality and settings provider --- .../core/data/UserSessionRepository.kt | 3 +- .../core/feature/browse/home/AppViewModel.kt | 2 +- .../settings/LogoutSettingsProvider.kt | 35 +++++++++++++++++++ .../settings/SettingsGroupProviderModule.kt | 22 ++++++++++++ .../purefin/core/update/AppUpdateModule.kt | 7 ---- .../jellyfin/session/UserSessionRepository.kt | 10 ++++++ 6 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 core/src/main/java/hu/bbara/purefin/core/feature/settings/LogoutSettingsProvider.kt create mode 100644 core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt diff --git a/core/src/main/java/hu/bbara/purefin/core/data/UserSessionRepository.kt b/core/src/main/java/hu/bbara/purefin/core/data/UserSessionRepository.kt index b78461e4..78851d50 100644 --- a/core/src/main/java/hu/bbara/purefin/core/data/UserSessionRepository.kt +++ b/core/src/main/java/hu/bbara/purefin/core/data/UserSessionRepository.kt @@ -16,6 +16,7 @@ interface UserSessionRepository { val isLoggedIn: Flow suspend fun setLoggedIn(isLoggedIn: Boolean) + suspend fun logout() val isOfflineMode: Flow -} \ No newline at end of file +} diff --git a/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt b/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt index c8312f31..9cdddb94 100644 --- a/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt @@ -288,7 +288,7 @@ class AppViewModel @Inject constructor( fun logout() { viewModelScope.launch { - userSessionRepository.setLoggedIn(false) + userSessionRepository.logout() } } } diff --git a/core/src/main/java/hu/bbara/purefin/core/feature/settings/LogoutSettingsProvider.kt b/core/src/main/java/hu/bbara/purefin/core/feature/settings/LogoutSettingsProvider.kt new file mode 100644 index 00000000..1706645a --- /dev/null +++ b/core/src/main/java/hu/bbara/purefin/core/feature/settings/LogoutSettingsProvider.kt @@ -0,0 +1,35 @@ +package hu.bbara.purefin.core.feature.settings + +import hu.bbara.purefin.core.data.UserSessionRepository +import hu.bbara.purefin.core.settings.SettingGroup +import hu.bbara.purefin.core.settings.SettingsGroupProvider +import hu.bbara.purefin.core.settings.VoidSetting +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class LogoutSettingsProvider @Inject constructor( + private val userSessionRepository: UserSessionRepository +) : SettingsGroupProvider { + + override val settingGroups: Flow> = flowOf( + listOf( + SettingGroup( + title = "Account", + options = listOf( + VoidSetting( + key = LOGOUT_KEY, + title = "Log out", + onClick = { userSessionRepository.logout() } + ) + ) + ) + ) + ) + + private companion object { + const val LOGOUT_KEY = "logout" + } +} diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt new file mode 100644 index 00000000..75a7078f --- /dev/null +++ b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt @@ -0,0 +1,22 @@ +package hu.bbara.purefin.core.settings + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import dagger.multibindings.IntoSet +import hu.bbara.purefin.core.feature.settings.LogoutSettingsProvider +import hu.bbara.purefin.core.feature.update.AppUpdateController + +@Module +@InstallIn(SingletonComponent::class) +abstract class SettingsGroupProviderModule { + + @Binds + @IntoSet + abstract fun bindAppUpdateSettingsProvider(impl: AppUpdateController): SettingsGroupProvider + + @Binds + @IntoSet + abstract fun bindLogoutSettingsProvider(impl: LogoutSettingsProvider): SettingsGroupProvider +} diff --git a/core/src/main/java/hu/bbara/purefin/core/update/AppUpdateModule.kt b/core/src/main/java/hu/bbara/purefin/core/update/AppUpdateModule.kt index 480892dc..a5a20c62 100644 --- a/core/src/main/java/hu/bbara/purefin/core/update/AppUpdateModule.kt +++ b/core/src/main/java/hu/bbara/purefin/core/update/AppUpdateModule.kt @@ -4,11 +4,8 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import dagger.multibindings.IntoSet -import hu.bbara.purefin.core.feature.update.AppUpdateController import hu.bbara.purefin.core.feature.update.AppUpdateInstaller import hu.bbara.purefin.core.feature.update.AppVersionProvider -import hu.bbara.purefin.core.settings.SettingsGroupProvider @Module @InstallIn(SingletonComponent::class) @@ -19,8 +16,4 @@ abstract class AppUpdateModule { @Binds abstract fun bindAppVersionProvider(impl: AndroidAppVersionProvider): AppVersionProvider - - @Binds - @IntoSet - abstract fun bindAppUpdateSettingsProvider(impl: AppUpdateController): SettingsGroupProvider } diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt index 68ac7db7..ea821a3e 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt @@ -51,5 +51,15 @@ class DataStoreUserSessionRepository @Inject constructor( } } + override suspend fun logout() { + userSessionDataStore.updateData { + it.copy( + accessToken = "", + userId = null, + loggedIn = false + ) + } + } + override val isOfflineMode: Flow = session.map { it.isOfflineMode }.distinctUntilChanged() }