mirror of
https://codeberg.org/timelimit/timelimit-android.git
synced 2025-10-03 17:59:51 +02:00
Add warning when using old server version
This commit is contained in:
parent
61253a422c
commit
f2e94bce23
7 changed files with 53 additions and 24 deletions
|
@ -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
|
||||||
|
|
|
@ -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 { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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,27 +92,29 @@ 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 (message != null) {
|
|
||||||
result.add(OverviewFragmentItemMessage(message))
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasShownIntro) {
|
|
||||||
result.add(OverviewFragmentHeaderIntro)
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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<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()
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue