diff --git a/app/src/main/java/de/xikolo/controllers/dialogs/Android4DeprecatedDialog.kt b/app/src/main/java/de/xikolo/controllers/dialogs/Android4DeprecatedDialog.kt new file mode 100644 index 000000000..4cb544a72 --- /dev/null +++ b/app/src/main/java/de/xikolo/controllers/dialogs/Android4DeprecatedDialog.kt @@ -0,0 +1,36 @@ +package de.xikolo.controllers.dialogs + +import android.app.Dialog +import android.os.Bundle +import android.support.v7.app.AlertDialog +import de.xikolo.R +import de.xikolo.controllers.dialogs.base.BaseDialogFragment + +class Android4DeprecatedDialog : BaseDialogFragment() { + + companion object { + val TAG: String = Android4DeprecatedDialog::class.java.simpleName + } + + var listener: Listener? = null + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val builder = AlertDialog.Builder(activity!!, R.style.AppTheme_Dialog) + .setTitle( + getString(R.string.dialog_android_4_deprecation_title) + ) + .setMessage( + getString(R.string.dialog_android_4_deprecation_message) + ) + .setPositiveButton(getString(R.string.ok)) { _, _ -> + listener?.onConfirmed() + } + + return builder.create() + } + + interface Listener { + fun onConfirmed() + } + +} diff --git a/app/src/main/java/de/xikolo/controllers/dialogs/Android4UnsupportedDialog.kt b/app/src/main/java/de/xikolo/controllers/dialogs/Android4UnsupportedDialog.kt new file mode 100644 index 000000000..424e5c2c9 --- /dev/null +++ b/app/src/main/java/de/xikolo/controllers/dialogs/Android4UnsupportedDialog.kt @@ -0,0 +1,36 @@ +package de.xikolo.controllers.dialogs + +import android.app.Dialog +import android.os.Bundle +import android.support.v7.app.AlertDialog +import de.xikolo.R +import de.xikolo.controllers.dialogs.base.BaseDialogFragment + +class Android4UnsupportedDialog : BaseDialogFragment() { + + companion object { + val TAG: String = Android4UnsupportedDialog::class.java.simpleName + } + + var listener: Listener? = null + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val builder = AlertDialog.Builder(activity!!, R.style.AppTheme_Dialog) + .setTitle( + getString(R.string.dialog_android_4_unsupported_title) + ) + .setMessage( + getString(R.string.dialog_android_4_unsupported_message) + ) + .setNegativeButton(getString(R.string.dialog_android_4_unsupported_no)) { _, _ -> + listener?.onConfirmed() + } + + return builder.create() + } + + interface Listener { + fun onConfirmed() + } + +} diff --git a/app/src/main/java/de/xikolo/controllers/main/SplashActivity.kt b/app/src/main/java/de/xikolo/controllers/main/SplashActivity.kt index f6daa3892..9dc1c10ec 100644 --- a/app/src/main/java/de/xikolo/controllers/main/SplashActivity.kt +++ b/app/src/main/java/de/xikolo/controllers/main/SplashActivity.kt @@ -2,12 +2,15 @@ package de.xikolo.controllers.main import android.content.Intent import android.net.Uri +import android.os.Build import android.os.Bundle import android.support.v4.app.DialogFragment import android.support.v7.app.AppCompatActivity import de.xikolo.controllers.dialogs.* import de.xikolo.jobs.CheckHealthJob import de.xikolo.jobs.base.RequestJobCallback +import de.xikolo.storages.ApplicationPreferences +import de.xikolo.utils.DateUtil import java.util.* import java.util.concurrent.TimeUnit @@ -47,7 +50,44 @@ class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - CheckHealthJob(healthCheckCallback).run() + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + when { + DateUtil.isPast("2018-07-15T00:00:00.000") && !ApplicationPreferences().firstAndroid4DeprecationWarningShown -> { + val dialog = Android4DeprecatedDialog() + dialog.listener = object : Android4DeprecatedDialog.Listener { + override fun onConfirmed() { + CheckHealthJob(healthCheckCallback).run() + } + } + showDialog(dialog, Android4DeprecatedDialog.TAG) + ApplicationPreferences().firstAndroid4DeprecationWarningShown = true + } + DateUtil.isPast("2018-08-15T00:00:00.000") && !ApplicationPreferences().secondAndroid4DeprecationWarningShown -> { + val dialog = Android4DeprecatedDialog() + dialog.listener = object : Android4DeprecatedDialog.Listener { + override fun onConfirmed() { + CheckHealthJob(healthCheckCallback).run() + } + } + showDialog(dialog, Android4DeprecatedDialog.TAG) + ApplicationPreferences().secondAndroid4DeprecationWarningShown = true + } + DateUtil.isPast("2018-08-31T00:00:00.000") -> { + val dialog = Android4UnsupportedDialog() + dialog.listener = object : Android4UnsupportedDialog.Listener { + override fun onConfirmed() { + closeApp() + } + } + showDialog(dialog, Android4DeprecatedDialog.TAG) + } + else -> { + CheckHealthJob(healthCheckCallback).run() + } + } + } else { + CheckHealthJob(healthCheckCallback).run() + } } private fun showApiVersionExpiredDialog() { diff --git a/app/src/main/java/de/xikolo/storages/ApplicationPreferences.kt b/app/src/main/java/de/xikolo/storages/ApplicationPreferences.kt index 2587da3f3..2c430fa8b 100644 --- a/app/src/main/java/de/xikolo/storages/ApplicationPreferences.kt +++ b/app/src/main/java/de/xikolo/storages/ApplicationPreferences.kt @@ -39,6 +39,14 @@ class ApplicationPreferences { get() = getBoolean(context.getString(R.string.preference_used_second_screen), false) set(value) = putBoolean(context.getString(R.string.preference_used_second_screen), value) + var firstAndroid4DeprecationWarningShown: Boolean + get() = getBoolean(context.getString(R.string.preference_first_android_4_deprecation_dialog), false) + set(value) = putBoolean(context.getString(R.string.preference_first_android_4_deprecation_dialog), value) + + var secondAndroid4DeprecationWarningShown: Boolean + get() = getBoolean(context.getString(R.string.preference_second_android_4_deprecation_dialog), false) + set(value) = putBoolean(context.getString(R.string.preference_second_android_4_deprecation_dialog), value) + private fun getBoolean(key: String, defValue: Boolean = true) = preferences.getBoolean(key, defValue) private fun putBoolean(key: String, value: Boolean) { diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8498e9a3d..4a53acb89 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -105,6 +105,12 @@ Beim Kontaktieren des Servers ist ein Problem aufgetreten. Bitte versuche es später noch einmal. Schließen + Android 4 Unterstützung wird eingestellt + Aus Sicherheitsgründen endet die Unterstützung für Android 4 am 31. August 2018. Danach wird die App nicht mehr funktionieren. Bitte aktualisieren Sie Ihr Gerät oder verwenden Sie stattdessen die Web-Version. + Android 4 Unterstützung wurde eingestellt + Aus Sicherheitsgründen wurde die Unterstützung für Android 4 beendet. Bitte aktualisieren Sie Ihr Gerät oder verwenden Sie stattdessen die Web-Version. + Schließen + Module diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 9cceb3abc..cebfa5626 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -30,6 +30,9 @@ used_second_screen dialog_second_screen + first_android_4_deprecation_dialog + second_android_4_deprecation_dialog + %1$02d:%2$02d %1$d%% diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9cb3964c3..c4244871b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -107,6 +107,12 @@ There was an issue while contacting the server. Please try again later. Close + Android 4 support is discontinued + For security reasons, support for Android 4 ends on August 31, 2018. After that, the app will no longer work. Please upgrade your device or use the web version instead. + Android 4 support has been discontinued + For security reasons, support for Android 4 ended. Please upgrade your device or use the web version instead. + Close + Module @@ -148,6 +154,7 @@ or SSO SSO Login + OK %1$.1f of %2$.1f self-test points %1$.1f of %2$.1f assignment points