Add warning when using old server version

This commit is contained in:
Jonas Lochmann 2022-09-19 02:00:00 +02:00
parent 61253a422c
commit f2e94bce23
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36
7 changed files with 53 additions and 24 deletions

View file

@ -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' // 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 // set to empty string to disable this check
buildConfigField 'String', 'updateServerBuildsCertificate', '"2170068198547F15129DE8CC46E2A8BF1485A6E5030916E26DDE41AE0E81DAC2"' buildConfigField 'String', 'updateServerBuildsCertificate', '"2170068198547F15129DE8CC46E2A8BF1485A6E5030916E26DDE41AE0E81DAC2"'
buildConfigField 'int', 'minimumRecommendServerVersion', '5'
} }
buildFeatures { buildFeatures {
viewBinding true viewBinding true

View file

@ -77,6 +77,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter<OverviewFragmentViewHolder>
is OverviewFragmentItemMessage -> OverviewFragmentViewType.ServerMessage is OverviewFragmentItemMessage -> OverviewFragmentViewType.ServerMessage
is ShowMoreOverviewFragmentItem -> OverviewFragmentViewType.ShowMoreButton is ShowMoreOverviewFragmentItem -> OverviewFragmentViewType.ShowMoreButton
is TaskReviewOverviewItem -> OverviewFragmentViewType.TaskReview is TaskReviewOverviewItem -> OverviewFragmentViewType.TaskReview
is OverviewFragmentItemOutdatedServer -> OverviewFragmentViewType.ServerMessage
} }
override fun getItemViewType(position: Int) = getItemType(getItem(position)).ordinal override fun getItemViewType(position: Int) = getItemType(getItem(position)).ordinal
@ -170,6 +171,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter<OverviewFragmentViewHolder>
} }
override fun onBindViewHolder(holder: OverviewFragmentViewHolder, position: Int) { override fun onBindViewHolder(holder: OverviewFragmentViewHolder, position: Int) {
val context = holder.itemView.context
val item = getItem(position) val item = getItem(position)
when (item) { when (item) {
@ -237,6 +239,7 @@ class OverviewFragmentAdapter : RecyclerView.Adapter<OverviewFragmentViewHolder>
is OverviewFragmentItemMessage -> { is OverviewFragmentItemMessage -> {
holder as ServerMessageViewHolder holder as ServerMessageViewHolder
holder.binding.title = context.getString(R.string.overview_server_message)
holder.binding.text = item.message holder.binding.text = item.message
holder.binding.executePendingBindings() holder.binding.executePendingBindings()
} }
@ -277,6 +280,13 @@ class OverviewFragmentAdapter : RecyclerView.Adapter<OverviewFragmentViewHolder>
holder.binding.executePendingBindings() 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 { } }.let { }
} }
} }

View file

@ -39,6 +39,7 @@ object OverviewFragmentActionAddDevice: OverviewFragmentItem()
object OverviewFragmentHeaderIntro: OverviewFragmentItem() object OverviewFragmentHeaderIntro: OverviewFragmentItem()
object OverviewFragmentHeaderFinishSetup: OverviewFragmentItem() object OverviewFragmentHeaderFinishSetup: OverviewFragmentItem()
data class OverviewFragmentItemMessage(val message: String): OverviewFragmentItem() data class OverviewFragmentItemMessage(val message: String): OverviewFragmentItem()
object OverviewFragmentItemOutdatedServer: OverviewFragmentItem()
sealed class ShowMoreOverviewFragmentItem: OverviewFragmentItem() { sealed class ShowMoreOverviewFragmentItem: OverviewFragmentItem() {
object ShowAllUsers: ShowMoreOverviewFragmentItem() object ShowAllUsers: ShowMoreOverviewFragmentItem()
data class ShowMoreDevices(val level: DeviceListItemVisibility): ShowMoreOverviewFragmentItem() data class ShowMoreDevices(val level: DeviceListItemVisibility): ShowMoreOverviewFragmentItem()

View file

@ -19,12 +19,10 @@ import android.app.Application
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.timelimit.android.BuildConfig
import io.timelimit.android.data.model.HintsToShow import io.timelimit.android.data.model.HintsToShow
import io.timelimit.android.data.model.UserType import io.timelimit.android.data.model.UserType
import io.timelimit.android.livedata.ignoreUnchanged import io.timelimit.android.livedata.*
import io.timelimit.android.livedata.liveDataFromFunction
import io.timelimit.android.livedata.map
import io.timelimit.android.livedata.switchMap
import io.timelimit.android.logic.DefaultAppLogic import io.timelimit.android.logic.DefaultAppLogic
import java.util.* import java.util.*
@ -94,15 +92,19 @@ class OverviewFragmentModel(application: Application): AndroidViewModel(applicat
private val isNoUserAssignedLive = logic.deviceUserEntry.map { it == null }.ignoreUnchanged() private val isNoUserAssignedLive = logic.deviceUserEntry.map { it == null }.ignoreUnchanged()
private val hasShownIntroduction = logic.database.config().wereHintsShown(HintsToShow.OVERVIEW_INTRODUCTION) private val hasShownIntroduction = logic.database.config().wereHintsShown(HintsToShow.OVERVIEW_INTRODUCTION)
private val messageLive = logic.database.config().getServerMessage() private val messageLive = logic.database.config().getServerMessage()
private val introEntries = isNoUserAssignedLive.switchMap { noUserAssigned -> private val serverVersion = logic.serverApiLevelLogic.infoLive
hasShownIntroduction.switchMap { hasShownIntro -> private val introEntries = mergeLiveDataWaitForValues(isNoUserAssignedLive, hasShownIntroduction, messageLive, serverVersion)
messageLive.map { message -> .map { (noUserAssigned, hasShownIntro, message, serverVersion) ->
val result = mutableListOf<OverviewFragmentItem>() val result = mutableListOf<OverviewFragmentItem>()
if (noUserAssigned) { if (noUserAssigned) {
result.add(OverviewFragmentHeaderFinishSetup) result.add(OverviewFragmentHeaderFinishSetup)
} }
if (!serverVersion.hasLevelOrIsOffline(BuildConfig.minimumRecommendServerVersion)) {
result.add(OverviewFragmentItemOutdatedServer)
}
if (message != null) { if (message != null) {
result.add(OverviewFragmentItemMessage(message)) result.add(OverviewFragmentItemMessage(message))
} }
@ -113,8 +115,6 @@ class OverviewFragmentModel(application: Application): AndroidViewModel(applicat
result result
} }
}
}
private val hiddenTaskIdsLive = MutableLiveData<Set<String>>().apply { value = emptySet() } private val hiddenTaskIdsLive = MutableLiveData<Set<String>>().apply { value = emptySet() }
private val tasksWithPendingReviewLive = logic.database.childTasks().getPendingTasks() private val tasksWithPendingReviewLive = logic.database.childTasks().getPendingTasks()

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
TimeLimit Copyright <C> 2019 Jonas Lochmann TimeLimit Copyright <C> 2019 - 2022 Jonas Lochmann
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License. the Free Software Foundation version 3 of the License.
@ -18,6 +18,10 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<data> <data>
<variable
name="title"
type="String" />
<variable <variable
name="text" name="text"
type="String" /> type="String" />
@ -35,7 +39,8 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<TextView <TextView
android:text="@string/overview_server_message" tools:text="@string/overview_server_message"
android:text="@{title}"
android:textAppearance="?android:textAppearanceLarge" android:textAppearance="?android:textAppearanceLarge"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View file

@ -1209,6 +1209,12 @@
<string name="overview_server_message">Mitteilung</string> <string name="overview_server_message">Mitteilung</string>
<string name="overview_server_outdated_title">alte Serverversion</string>
<string name="overview_server_outdated_text">Sie verwenden eine ältere Version
des TimeLimit-Servers. Das kann zu einem eingeschränkten Funktionsumfang
und Sicherheitspropblemen führen.
</string>
<string name="parent_limit_login_title">Anmeldeverhinderungskategorie</string> <string name="parent_limit_login_title">Anmeldeverhinderungskategorie</string>
<string name="parent_limit_login_help">Hier können Sie eine Kategorie wählen. <string name="parent_limit_login_help">Hier können Sie eine Kategorie wählen.
Sobald diese Kategorie gesperrt ist können Sie sich nicht mehr als Elternteil anmelden, sodass Sobald diese Kategorie gesperrt ist können Sie sich nicht mehr als Elternteil anmelden, sodass

View file

@ -1253,6 +1253,12 @@
<string name="overview_server_message">Message</string> <string name="overview_server_message">Message</string>
<string name="overview_server_outdated_title">old server version</string>
<string name="overview_server_outdated_text">You are using an outdated version
of timelimit-server. This can limit the available features and can be
a security risk.
</string>
<string name="parent_limit_login_title">Limit login category</string> <string name="parent_limit_login_title">Limit login category</string>
<string name="parent_limit_login_help">Here you can select a category. As soon as Apps of this <string name="parent_limit_login_help">Here you can select a category. As soon as Apps of this
category are blocked, you can not sign in with your parent user. This category are blocked, you can not sign in with your parent user. This