commit
ebe4eecaa5
3 changed files with 43 additions and 22 deletions
|
@ -1,13 +1,19 @@
|
||||||
package info.nightscout.androidaps.plugins.constraints.versionChecker
|
package info.nightscout.androidaps.plugins.constraints.versionChecker
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.BuildConfig
|
||||||
import info.nightscout.androidaps.MainApp
|
import info.nightscout.androidaps.MainApp
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.interfaces.*
|
import info.nightscout.androidaps.interfaces.Constraint
|
||||||
|
import info.nightscout.androidaps.interfaces.ConstraintsInterface
|
||||||
|
import info.nightscout.androidaps.interfaces.PluginBase
|
||||||
|
import info.nightscout.androidaps.interfaces.PluginDescription
|
||||||
|
import info.nightscout.androidaps.interfaces.PluginType
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification
|
||||||
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification
|
||||||
import info.nightscout.androidaps.utils.SP
|
import info.nightscout.androidaps.utils.SP
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Usually we would have a class here.
|
* Usually we would have a class here.
|
||||||
|
@ -16,16 +22,23 @@ import java.util.concurrent.TimeUnit
|
||||||
* */
|
* */
|
||||||
|
|
||||||
object VersionCheckerPlugin : PluginBase(PluginDescription()
|
object VersionCheckerPlugin : PluginBase(PluginDescription()
|
||||||
.mainType(PluginType.CONSTRAINTS)
|
.mainType(PluginType.CONSTRAINTS)
|
||||||
.neverVisible(true)
|
.neverVisible(true)
|
||||||
.alwaysEnabled(true)
|
.alwaysEnabled(true)
|
||||||
.showInList(false)
|
.showInList(false)
|
||||||
.pluginName(R.string.versionChecker)), ConstraintsInterface {
|
.pluginName(R.string.versionChecker)), ConstraintsInterface {
|
||||||
|
|
||||||
|
private val gracePeriod: GracePeriod
|
||||||
|
get() = if ((BuildConfig.VERSION_NAME.contains("RC", ignoreCase = true))) {
|
||||||
|
GracePeriod.RC
|
||||||
|
} else {
|
||||||
|
GracePeriod.RELEASE
|
||||||
|
}
|
||||||
|
|
||||||
override fun isClosedLoopAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
|
override fun isClosedLoopAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
|
||||||
checkWarning()
|
checkWarning()
|
||||||
triggerCheckVersion()
|
triggerCheckVersion()
|
||||||
return if (isOldVersion(GRACE_PERIOD_VERY_OLD))
|
return if (isOldVersion(gracePeriod.veryOld.daysToMillis()))
|
||||||
value.set(false, MainApp.gs(R.string.very_old_version), this)
|
value.set(false, MainApp.gs(R.string.very_old_version), this)
|
||||||
else
|
else
|
||||||
value
|
value
|
||||||
|
@ -33,41 +46,49 @@ object VersionCheckerPlugin : PluginBase(PluginDescription()
|
||||||
|
|
||||||
private fun checkWarning() {
|
private fun checkWarning() {
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
|
|
||||||
if (!SP.contains(R.string.key_last_versionchecker_plugin_warning)) {
|
if (!SP.contains(R.string.key_last_versionchecker_plugin_warning)) {
|
||||||
SP.putLong(R.string.key_last_versionchecker_plugin_warning, now)
|
SP.putLong(R.string.key_last_versionchecker_plugin_warning, now)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (isOldVersion(GRACE_PERIOD_WARNING) && shouldWarnAgain(now)) {
|
if (isOldVersion(gracePeriod.warning.daysToMillis()) && shouldWarnAgain(now)) {
|
||||||
// store last notification time
|
// store last notification time
|
||||||
SP.putLong(R.string.key_last_versionchecker_plugin_warning, now)
|
SP.putLong(R.string.key_last_versionchecker_plugin_warning, now)
|
||||||
|
|
||||||
//notify
|
//notify
|
||||||
val message = MainApp.gs(R.string.new_version_warning, Math.round((now - SP.getLong(R.string.key_last_time_this_version_detected, now)) / TimeUnit.DAYS.toMillis(1).toDouble()))
|
val message = MainApp.gs(R.string.new_version_warning,
|
||||||
|
((now - SP.getLong(R.string.key_last_time_this_version_detected, now)) / 1L.daysToMillis().toDouble()).roundToInt(),
|
||||||
|
gracePeriod.old,
|
||||||
|
gracePeriod.veryOld
|
||||||
|
)
|
||||||
val notification = Notification(Notification.OLDVERSION, message, Notification.NORMAL)
|
val notification = Notification(Notification.OLDVERSION, message, Notification.NORMAL)
|
||||||
RxBus.send(EventNewNotification(notification))
|
RxBus.send(EventNewNotification(notification))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldWarnAgain(now: Long) =
|
private fun shouldWarnAgain(now: Long) =
|
||||||
now > SP.getLong(R.string.key_last_versionchecker_plugin_warning, 0) + WARN_EVERY
|
now > SP.getLong(R.string.key_last_versionchecker_plugin_warning, 0) + WARN_EVERY
|
||||||
|
|
||||||
override fun applyMaxIOBConstraints(maxIob: Constraint<Double>): Constraint<Double> =
|
override fun applyMaxIOBConstraints(maxIob: Constraint<Double>): Constraint<Double> =
|
||||||
if (isOldVersion(GRACE_PERIOD_OLD))
|
if (isOldVersion(gracePeriod.old.daysToMillis()))
|
||||||
maxIob.set(0.toDouble(), MainApp.gs(R.string.old_version), this)
|
maxIob.set(0.toDouble(), MainApp.gs(R.string.old_version), this)
|
||||||
else
|
else
|
||||||
maxIob
|
maxIob
|
||||||
|
|
||||||
private fun isOldVersion(gracePeriod: Long): Boolean {
|
private fun isOldVersion(gracePeriod: Long): Boolean {
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
return now > SP.getLong(R.string.key_last_time_this_version_detected, 0) + gracePeriod
|
return now > SP.getLong(R.string.key_last_time_this_version_detected, 0) + gracePeriod
|
||||||
}
|
}
|
||||||
|
|
||||||
val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
private val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||||
val GRACE_PERIOD_WARNING = TimeUnit.DAYS.toMillis(30)
|
|
||||||
val GRACE_PERIOD_OLD = TimeUnit.DAYS.toMillis(60)
|
|
||||||
val GRACE_PERIOD_VERY_OLD = TimeUnit.DAYS.toMillis(90)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class GracePeriod(val warning: Long, val old: Long, val veryOld: Long) {
|
||||||
|
RELEASE(30, 60, 90),
|
||||||
|
RC(0, 7, 14)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Long.daysToMillis() = TimeUnit.DAYS.toMillis(this)
|
|
@ -1380,7 +1380,7 @@
|
||||||
|
|
||||||
<string name="old_version">old version</string>
|
<string name="old_version">old version</string>
|
||||||
<string name="very_old_version">very old version</string>
|
<string name="very_old_version">very old version</string>
|
||||||
<string name="new_version_warning">New version for at least %1$d days available! Fallback to LGS after 60 days, loop will be disabled after 90 days</string>
|
<string name="new_version_warning">New version for at least %1$d days available! Fallback to LGS after %2$d days, loop will be disabled after %3$d days</string>
|
||||||
<string name="twohours">2h</string>
|
<string name="twohours">2h</string>
|
||||||
<string name="formatinsulinunits">%1$.2fU</string>
|
<string name="formatinsulinunits">%1$.2fU</string>
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ buildscript {
|
||||||
maven { url 'https://maven.fabric.io/public' }
|
maven { url 'https://maven.fabric.io/public' }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.2'
|
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||||
classpath 'com.google.gms:google-services:4.3.3'
|
classpath 'com.google.gms:google-services:4.3.3'
|
||||||
classpath 'io.fabric.tools:gradle:1.31.2'
|
classpath 'io.fabric.tools:gradle:1.31.2'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue