diff --git a/app/build.gradle b/app/build.gradle index faac4ff..2b14f9b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,7 @@ android { // get with unzip -p *.apk META-INF/CERT.RSA | keytool -printcert | grep SHA256 | sed -e 's/\s*SHA256: //' -e 's/://g' // set to empty string to disable this check buildConfigField 'String', 'updateServerBuildsCertificate', '"2170068198547F15129DE8CC46E2A8BF1485A6E5030916E26DDE41AE0E81DAC2"' + buildConfigField 'int', 'minimumRecommendServerVersion', '5' } buildFeatures { viewBinding true diff --git a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentAdapter.kt b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentAdapter.kt index 26384fd..a0f6bdd 100644 --- a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentAdapter.kt +++ b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentAdapter.kt @@ -77,6 +77,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter is OverviewFragmentItemMessage -> OverviewFragmentViewType.ServerMessage is ShowMoreOverviewFragmentItem -> OverviewFragmentViewType.ShowMoreButton is TaskReviewOverviewItem -> OverviewFragmentViewType.TaskReview + is OverviewFragmentItemOutdatedServer -> OverviewFragmentViewType.ServerMessage } override fun getItemViewType(position: Int) = getItemType(getItem(position)).ordinal @@ -170,6 +171,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter } override fun onBindViewHolder(holder: OverviewFragmentViewHolder, position: Int) { + val context = holder.itemView.context val item = getItem(position) when (item) { @@ -237,6 +239,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter is OverviewFragmentItemMessage -> { holder as ServerMessageViewHolder + holder.binding.title = context.getString(R.string.overview_server_message) holder.binding.text = item.message holder.binding.executePendingBindings() } @@ -277,6 +280,13 @@ class OverviewFragmentAdapter : RecyclerView.Adapter holder.binding.executePendingBindings() } + is OverviewFragmentItemOutdatedServer -> { + holder as ServerMessageViewHolder + + holder.binding.title = context.getString(R.string.overview_server_outdated_title) + holder.binding.text = context.getString(R.string.overview_server_outdated_text) + holder.binding.executePendingBindings() + } }.let { } } } diff --git a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentItem.kt b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentItem.kt index fb04035..2b6e13a 100644 --- a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentItem.kt +++ b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentItem.kt @@ -39,6 +39,7 @@ object OverviewFragmentActionAddDevice: OverviewFragmentItem() object OverviewFragmentHeaderIntro: OverviewFragmentItem() object OverviewFragmentHeaderFinishSetup: OverviewFragmentItem() data class OverviewFragmentItemMessage(val message: String): OverviewFragmentItem() +object OverviewFragmentItemOutdatedServer: OverviewFragmentItem() sealed class ShowMoreOverviewFragmentItem: OverviewFragmentItem() { object ShowAllUsers: ShowMoreOverviewFragmentItem() data class ShowMoreDevices(val level: DeviceListItemVisibility): ShowMoreOverviewFragmentItem() diff --git a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentModel.kt b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentModel.kt index 477494c..a90762c 100644 --- a/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentModel.kt +++ b/app/src/main/java/io/timelimit/android/ui/overview/overview/OverviewFragmentModel.kt @@ -19,12 +19,10 @@ import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import io.timelimit.android.BuildConfig import io.timelimit.android.data.model.HintsToShow import io.timelimit.android.data.model.UserType -import io.timelimit.android.livedata.ignoreUnchanged -import io.timelimit.android.livedata.liveDataFromFunction -import io.timelimit.android.livedata.map -import io.timelimit.android.livedata.switchMap +import io.timelimit.android.livedata.* import io.timelimit.android.logic.DefaultAppLogic import java.util.* @@ -94,27 +92,29 @@ class OverviewFragmentModel(application: Application): AndroidViewModel(applicat private val isNoUserAssignedLive = logic.deviceUserEntry.map { it == null }.ignoreUnchanged() private val hasShownIntroduction = logic.database.config().wereHintsShown(HintsToShow.OVERVIEW_INTRODUCTION) private val messageLive = logic.database.config().getServerMessage() - private val introEntries = isNoUserAssignedLive.switchMap { noUserAssigned -> - hasShownIntroduction.switchMap { hasShownIntro -> - messageLive.map { message -> - val result = mutableListOf() + private val serverVersion = logic.serverApiLevelLogic.infoLive + private val introEntries = mergeLiveDataWaitForValues(isNoUserAssignedLive, hasShownIntroduction, messageLive, serverVersion) + .map { (noUserAssigned, hasShownIntro, message, serverVersion) -> + val result = mutableListOf() - if (noUserAssigned) { - result.add(OverviewFragmentHeaderFinishSetup) - } - - if (message != null) { - result.add(OverviewFragmentItemMessage(message)) - } - - if (!hasShownIntro) { - result.add(OverviewFragmentHeaderIntro) - } - - result + if (noUserAssigned) { + result.add(OverviewFragmentHeaderFinishSetup) } + + if (!serverVersion.hasLevelOrIsOffline(BuildConfig.minimumRecommendServerVersion)) { + result.add(OverviewFragmentItemOutdatedServer) + } + + if (message != null) { + result.add(OverviewFragmentItemMessage(message)) + } + + if (!hasShownIntro) { + result.add(OverviewFragmentHeaderIntro) + } + + result } - } private val hiddenTaskIdsLive = MutableLiveData>().apply { value = emptySet() } private val tasksWithPendingReviewLive = logic.database.childTasks().getPendingTasks() diff --git a/app/src/main/res/layout/fragment_overview_server_message.xml b/app/src/main/res/layout/fragment_overview_server_message.xml index a55d111..ca9529a 100644 --- a/app/src/main/res/layout/fragment_overview_server_message.xml +++ b/app/src/main/res/layout/fragment_overview_server_message.xml @@ -1,6 +1,6 @@