From af1a069610abc627b461cdd5430055e160799e9d Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sat, 1 Jul 2023 11:37:12 +0200 Subject: [PATCH] Show UI mode notification on startup screen --- .../androidtv/data/model/AppNotification.kt | 1 + .../repository/NotificationsRepository.kt | 6 +-- .../startup/fragment/SelectServerFragment.kt | 39 +++++++++++++++++++ .../res/layout/fragment_select_server.xml | 5 +++ buildSrc/src/main/kotlin/Properties.kt | 2 +- 5 files changed, 49 insertions(+), 4 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 4487e606b9..831c11a33a 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 @@ -3,4 +3,5 @@ package org.jellyfin.androidtv.data.model data class AppNotification( val message: String, val dismiss: () -> Unit, + val public: Boolean, ) 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 0304387a31..4cdd1e35f4 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 @@ -34,8 +34,8 @@ class NotificationsRepositoryImpl( addBetaNotification() } - private fun addNotification(message: String, dismiss: () -> Unit = {}) { - notifications.value = notifications.value + AppNotification(message, dismiss) + private fun addNotification(message: String, public: Boolean = false, dismiss: () -> Unit = {}) { + notifications.value = notifications.value + AppNotification(message, dismiss, public) } private fun addUiModeNotification() { @@ -45,7 +45,7 @@ class NotificationsRepositoryImpl( val hasHdmiCec = context.packageManager.hasSystemFeature("android.hardware.hdmi.cec") if (invalidUiMode && isTouch && !hasHdmiCec) { - addNotification(context.getString(R.string.app_notification_uimode_invalid)) + addNotification(context.getString(R.string.app_notification_uimode_invalid), public = true) } } diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/startup/fragment/SelectServerFragment.kt b/app/src/main/java/org/jellyfin/androidtv/ui/startup/fragment/SelectServerFragment.kt index 6cbede72ed..edfa29867a 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/startup/fragment/SelectServerFragment.kt +++ b/app/src/main/java/org/jellyfin/androidtv/ui/startup/fragment/SelectServerFragment.kt @@ -5,6 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Card +import androidx.compose.material.Text +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.unit.dp import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.fragment.app.Fragment @@ -23,6 +34,7 @@ import org.jellyfin.androidtv.auth.model.ConnectingState import org.jellyfin.androidtv.auth.model.Server import org.jellyfin.androidtv.auth.model.ServerAdditionState import org.jellyfin.androidtv.auth.model.UnableToConnectState +import org.jellyfin.androidtv.data.repository.NotificationsRepository import org.jellyfin.androidtv.databinding.FragmentSelectServerBinding import org.jellyfin.androidtv.ui.ServerButtonView import org.jellyfin.androidtv.ui.SpacingItemDecoration @@ -31,6 +43,7 @@ import org.jellyfin.androidtv.util.ListAdapter import org.jellyfin.androidtv.util.MenuBuilder import org.jellyfin.androidtv.util.getSummary import org.koin.androidx.viewmodel.ext.android.activityViewModel +import org.koin.compose.rememberKoinInject class SelectServerFragment : Fragment() { private var _binding: FragmentSelectServerBinding? = null @@ -147,6 +160,32 @@ class SelectServerFragment : Fragment() { } } + // Notifications + binding.notifications.setContent { + val notificationsRepository = rememberKoinInject() + val notifications by notificationsRepository.notifications.collectAsState() + + Column( + verticalArrangement = Arrangement.spacedBy(5.dp) + ) { + for (notification in notifications) { + if (!notification.public) continue + + Card( + modifier = Modifier + .fillMaxWidth(), + backgroundColor = colorResource(id = R.color.lb_basic_card_info_bg_color), + contentColor = colorResource(id = R.color.white), + ) { + Text( + text = notification.message, + modifier = Modifier.padding(10.dp) + ) + } + } + } + } + // Manual binding.enterServerAddress.setOnClickListener { parentFragmentManager.commit { diff --git a/app/src/main/res/layout/fragment_select_server.xml b/app/src/main/res/layout/fragment_select_server.xml index c023f14783..e5b5b36ad8 100644 --- a/app/src/main/res/layout/fragment_select_server.xml +++ b/app/src/main/res/layout/fragment_select_server.xml @@ -64,6 +64,11 @@ android:layout_weight="1" android:orientation="vertical"> + + SAMPLE_VAR - val environmentName = name.toUpperCase().replace(".", "_") + val environmentName = name.uppercase().replace(".", "_") return findProperty(name)?.toString() ?: System.getenv(environmentName) ?: null }