From 8e9d5ef24cb4f1536a468239883cec802c98d35d Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Fri, 11 Nov 2022 21:59:21 +0100 Subject: [PATCH] Add dismissible notification for beta releases --- .../androidtv/data/model/AppNotification.kt | 1 + .../repository/NotificationsRepository.kt | 21 +++++++++++++++++-- .../org/jellyfin/androidtv/di/AppModule.kt | 2 +- .../androidtv/preference/SystemPreferences.kt | 5 +++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/jellyfin/androidtv/data/model/AppNotification.kt b/app/src/main/java/org/jellyfin/androidtv/data/model/AppNotification.kt index 736383a01b..4487e606b9 100644 --- a/app/src/main/java/org/jellyfin/androidtv/data/model/AppNotification.kt +++ b/app/src/main/java/org/jellyfin/androidtv/data/model/AppNotification.kt @@ -2,4 +2,5 @@ package org.jellyfin.androidtv.data.model data class AppNotification( val message: String, + val dismiss: () -> Unit, ) diff --git a/app/src/main/java/org/jellyfin/androidtv/data/repository/NotificationsRepository.kt b/app/src/main/java/org/jellyfin/androidtv/data/repository/NotificationsRepository.kt index b0874271d6..0304387a31 100644 --- a/app/src/main/java/org/jellyfin/androidtv/data/repository/NotificationsRepository.kt +++ b/app/src/main/java/org/jellyfin/androidtv/data/repository/NotificationsRepository.kt @@ -5,8 +5,10 @@ import android.content.Context import android.content.res.Configuration import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import org.jellyfin.androidtv.BuildConfig import org.jellyfin.androidtv.R import org.jellyfin.androidtv.data.model.AppNotification +import org.jellyfin.androidtv.preference.SystemPreferences interface NotificationsRepository { val notifications: StateFlow> @@ -18,19 +20,22 @@ interface NotificationsRepository { class NotificationsRepositoryImpl( private val context: Context, private val uiModeManager: UiModeManager, + private val systemPreferences: SystemPreferences, ) : NotificationsRepository { override val notifications = MutableStateFlow(emptyList()) override fun dismissNotification(item: AppNotification) { notifications.value = notifications.value.filter { it != item } + item.dismiss() } override fun addDefaultNotifications() { addUiModeNotification() + addBetaNotification() } - private fun addNotification(message: String) { - notifications.value = notifications.value + AppNotification(message) + private fun addNotification(message: String, dismiss: () -> Unit = {}) { + notifications.value = notifications.value + AppNotification(message, dismiss) } private fun addUiModeNotification() { @@ -43,4 +48,16 @@ class NotificationsRepositoryImpl( addNotification(context.getString(R.string.app_notification_uimode_invalid)) } } + + private fun addBetaNotification() { + val dismissedVersion = systemPreferences[SystemPreferences.dismissedBetaNotificationVersion] + val currentVersion = BuildConfig.VERSION_NAME + val isBeta = currentVersion.lowercase().contains("beta") + + if (isBeta && currentVersion != dismissedVersion) { + addNotification(context.getString(R.string.app_notification_beta, currentVersion)) { + systemPreferences[SystemPreferences.dismissedBetaNotificationVersion] = currentVersion + } + } + } } diff --git a/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt b/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt index 7bf6d56040..b466cc6c41 100644 --- a/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt +++ b/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt @@ -93,7 +93,7 @@ val appModule = module { single { UserRepositoryImpl() } single { UserViewsRepositoryImpl(get()) } - single { NotificationsRepositoryImpl(get(), get()) } + single { NotificationsRepositoryImpl(get(), get(), get()) } single { ItemMutationRepositoryImpl(get(), get()) } single { CustomMessageRepositoryImpl() } single { NavigationRepositoryImpl(Destinations.home) } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/SystemPreferences.kt b/app/src/main/java/org/jellyfin/androidtv/preference/SystemPreferences.kt index 40b2365baf..97887b4418 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/SystemPreferences.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/SystemPreferences.kt @@ -64,5 +64,10 @@ class SystemPreferences(context: Context) : SharedPreferenceStore( * Chosen player for play with button. Changes every time user chooses a player with "play with" button. */ var chosenPlayer = enumPreference("chosen_player", PreferredVideoPlayer.VLC) + + /** + * The version name for the latest dismissed beta notification or empty if none. + */ + val dismissedBetaNotificationVersion = stringPreference("dismissed_beta_notification_version", "") } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1040f86a3c..80d6607ef7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -497,4 +497,5 @@ Oops! Something went wrong, a crash report was sent to your Jellyfin server. The setup of this server has not been completed. Open Jellyfin in a web browser to finish setup before signing in. special + App updated to %1$s\nThank you for participating in the Jellyfin beta program