Merge pull request #1757 from MilosKozak/update-checker
update logic version checker
This commit is contained in:
commit
7c890f2129
6 changed files with 70 additions and 38 deletions
|
@ -120,7 +120,7 @@ public class MainActivity extends AppCompatActivity {
|
|||
|
||||
//Check here if loop plugin is disabled. Else check via constraints
|
||||
if (!LoopPlugin.getPlugin().isEnabled(PluginType.LOOP))
|
||||
VersionCheckerUtilsKt.checkVersion();
|
||||
VersionCheckerUtilsKt.triggerCheckVersion();
|
||||
|
||||
FabricPrivacy.setUserStats();
|
||||
}
|
||||
|
|
|
@ -89,6 +89,8 @@ import info.nightscout.androidaps.services.Intents;
|
|||
import info.nightscout.androidaps.utils.FabricPrivacy;
|
||||
import io.fabric.sdk.android.Fabric;
|
||||
|
||||
import static info.nightscout.androidaps.plugins.general.versionChecker.VersionCheckerUtilsKt.triggerCheckVersion;
|
||||
|
||||
|
||||
public class MainApp extends Application {
|
||||
private static Logger log = LoggerFactory.getLogger(L.CORE);
|
||||
|
@ -149,6 +151,9 @@ public class MainApp extends Application {
|
|||
|
||||
registerLocalBroadcastReceiver();
|
||||
|
||||
//trigger here to see the new version on app start after an update
|
||||
triggerCheckVersion();
|
||||
|
||||
if (pluginsList == null) {
|
||||
pluginsList = new ArrayList<>();
|
||||
// Register all tabs in app here
|
||||
|
|
|
@ -23,7 +23,7 @@ object VersionCheckerPlugin : PluginBase(PluginDescription()
|
|||
|
||||
override fun isClosedLoopAllowed(value: Constraint<Boolean>): Constraint<Boolean> {
|
||||
checkWarning()
|
||||
checkUpdate()
|
||||
triggerCheckVersion()
|
||||
return if (isOldVersion(GRACE_PERIOD_VERY_OLD))
|
||||
value.set(false, MainApp.gs(R.string.very_old_version), this)
|
||||
else
|
||||
|
@ -34,30 +34,17 @@ object VersionCheckerPlugin : PluginBase(PluginDescription()
|
|||
val now = System.currentTimeMillis()
|
||||
if (isOldVersion(GRACE_PERIOD_WARNING) && shouldWarnAgain(now)) {
|
||||
// store last notification time
|
||||
SP.putLong(R.string.key_last_versionchecker_warning, now)
|
||||
SP.putLong(R.string.key_last_versionchecker_plugin_warning, now)
|
||||
|
||||
//notify
|
||||
val message = MainApp.gs(R.string.new_version_warning, Math.round(now / TimeUnit.DAYS.toMillis(1).toDouble()))
|
||||
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 notification = Notification(Notification.OLDVERSION, message, Notification.NORMAL)
|
||||
MainApp.bus().post(EventNewNotification(notification))
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkUpdate() {
|
||||
val now = System.currentTimeMillis()
|
||||
if (shouldCheckVersionAgain(now)) {
|
||||
// store last notification time
|
||||
SP.putLong(R.string.key_last_versioncheck, now)
|
||||
|
||||
checkVersion()
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldCheckVersionAgain(now: Long) =
|
||||
now > SP.getLong(R.string.key_last_versioncheck, 0) + CHECK_EVERY
|
||||
|
||||
private fun shouldWarnAgain(now: Long) =
|
||||
now > SP.getLong(R.string.key_last_versionchecker_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> =
|
||||
if (isOldVersion(GRACE_PERIOD_OLD))
|
||||
|
@ -67,10 +54,9 @@ object VersionCheckerPlugin : PluginBase(PluginDescription()
|
|||
|
||||
private fun isOldVersion(gracePeriod: Long): Boolean {
|
||||
val now = System.currentTimeMillis()
|
||||
return now > SP.getLong(R.string.key_new_version_available_since, 0) + gracePeriod
|
||||
return now > SP.getLong(R.string.key_last_time_this_version_detected, 0) + gracePeriod
|
||||
}
|
||||
|
||||
val CHECK_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||
val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||
val GRACE_PERIOD_WARNING = TimeUnit.DAYS.toMillis(30)
|
||||
val GRACE_PERIOD_OLD = TimeUnit.DAYS.toMillis(60)
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.apache.http.impl.client.DefaultHttpClient
|
|||
import org.slf4j.LoggerFactory
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
// check network connection
|
||||
fun isConnected(): Boolean {
|
||||
|
@ -35,8 +36,22 @@ inline fun InputStream.findVersion(): String? {
|
|||
|
||||
private val log = LoggerFactory.getLogger(L.CORE)
|
||||
|
||||
|
||||
fun triggerCheckVersion() {
|
||||
|
||||
if(!SP.contains(R.string.key_last_time_this_version_detected)) {
|
||||
// On a new installation, set it as 30 days old in order to warn that there is a new version.
|
||||
SP.putLong(R.string.key_last_time_this_version_detected, System.currentTimeMillis() - TimeUnit.DAYS.toMillis(30))
|
||||
}
|
||||
|
||||
// If we are good, only check once every day.
|
||||
if(System.currentTimeMillis() > SP.getLong(R.string.key_last_time_this_version_detected, 0) + CHECK_EVERY){
|
||||
checkVersion()
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun checkVersion() = if (isConnected()) {
|
||||
private fun checkVersion() = if (isConnected()) {
|
||||
Thread {
|
||||
try {
|
||||
val request = HttpGet("https://raw.githubusercontent.com/MilosKozak/AndroidAPS/master/app/build.gradle")
|
||||
|
@ -56,12 +71,17 @@ fun compareWithCurrentVersion(newVersion: String?, currentVersion: String) {
|
|||
comparison == null -> onVersionNotDetectable()
|
||||
comparison == 0 -> onSameVersionDetected()
|
||||
comparison > 0 -> onNewVersionDetected(currentVersion = currentVersion, newVersion = newVersion)
|
||||
else -> log.debug("Version newer than master. Are you developer?")
|
||||
else -> onOlderVersionDetected()
|
||||
}
|
||||
}
|
||||
|
||||
private fun onOlderVersionDetected() {
|
||||
log.debug("Version newer than master. Are you developer?")
|
||||
SP.putLong(R.string.key_last_time_this_version_detected, System.currentTimeMillis())
|
||||
}
|
||||
|
||||
fun onSameVersionDetected() {
|
||||
SP.remove(R.string.key_new_version_available_since)
|
||||
SP.putLong(R.string.key_last_time_this_version_detected, System.currentTimeMillis())
|
||||
}
|
||||
|
||||
fun onVersionNotDetectable() {
|
||||
|
@ -69,10 +89,13 @@ fun onVersionNotDetectable() {
|
|||
}
|
||||
|
||||
fun onNewVersionDetected(currentVersion: String, newVersion: String?) {
|
||||
log.debug("Version ${currentVersion} outdated. Found $newVersion")
|
||||
val notification = Notification(Notification.NEWVERSIONDETECTED, String.format(MainApp.gs(R.string.versionavailable), newVersion.toString()), Notification.LOW)
|
||||
MainApp.bus().post(EventNewNotification(notification))
|
||||
SP.putLong(R.string.key_new_version_available_since, System.currentTimeMillis())
|
||||
val now = System.currentTimeMillis()
|
||||
if(now > SP.getLong(R.string.key_last_versionchecker_warning, 0) + WARN_EVERY) {
|
||||
log.debug("Version ${currentVersion} outdated. Found $newVersion")
|
||||
val notification = Notification(Notification.NEWVERSIONDETECTED, String.format(MainApp.gs(R.string.versionavailable), newVersion.toString()), Notification.LOW)
|
||||
MainApp.bus().post(EventNewNotification(notification))
|
||||
SP.putLong(R.string.key_last_versionchecker_warning, now)
|
||||
}
|
||||
}
|
||||
|
||||
fun String.versionStrip() = this.mapNotNull {
|
||||
|
@ -81,4 +104,8 @@ fun String.versionStrip() = this.mapNotNull {
|
|||
'.' -> it
|
||||
else -> null
|
||||
}
|
||||
}.joinToString(separator = "")
|
||||
}.joinToString(separator = "")
|
||||
|
||||
|
||||
val CHECK_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||
val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||
|
|
|
@ -1327,9 +1327,9 @@
|
|||
<string name="notconfigured">Not configured</string>
|
||||
<string name="profileswitchcreated">Profile switch created</string>
|
||||
<string name="versionChecker">Version Checker</string>
|
||||
<string name="key_new_version_available_since" translatable="false">new_version_available_since</string>
|
||||
<string name="key_last_time_this_version_detected" translatable="false">last_time_this_version_detected</string>
|
||||
<string name="key_last_versionchecker_warning" translatable="false">last_versionchecker_waring</string>
|
||||
<string name="key_last_versioncheck" translatable="false">key_last_versioncheck</string>
|
||||
<string name="key_last_versionchecker_plugin_warning" translatable="false">last_versionchecker_plugin_waring</string>
|
||||
|
||||
<string name="old_version">old version</string>
|
||||
<string name="very_old_version">very old version</string>
|
||||
|
|
|
@ -70,7 +70,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
|
||||
}
|
||||
|
@ -85,7 +87,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -99,7 +103,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -113,7 +119,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -126,7 +134,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -139,7 +149,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -159,7 +171,7 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(0)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.remove(eq(R.string.key_new_version_available_since))
|
||||
SP.putLong(eq(R.string.key_last_time_this_version_detected), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
@ -179,7 +191,9 @@ class VersionCheckerUtilsKtTest {
|
|||
verify(bus, times(1)).post(any())
|
||||
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_new_version_available_since), ArgumentMatchers.anyLong())
|
||||
SP.getLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyStatic(SP::class.java, times(1))
|
||||
SP.putLong(eq(R.string.key_last_versionchecker_warning), ArgumentMatchers.anyLong())
|
||||
PowerMockito.verifyNoMoreInteractions(SP::class.java)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue