From 6dbb7579e89ce87a2754084d55f9dec1af0ac60c Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 9 Sep 2019 00:00:00 +0000 Subject: [PATCH] Add option to show exception from the background task logic main loop --- .../timelimit/android/logic/BackgroundTaskLogic.kt | 4 ++++ .../android/ui/diagnose/DiagnoseMainFragment.kt | 14 ++++++++++++++ app/src/main/res/layout/fragment_diagnose_main.xml | 7 +++++++ app/src/main/res/values-de/strings-diagnose.xml | 2 ++ app/src/main/res/values/strings-diagnose.xml | 2 ++ 5 files changed, 29 insertions(+) diff --git a/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt b/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt index b776549..69e2b45 100644 --- a/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt +++ b/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt @@ -49,6 +49,7 @@ import java.util.* class BackgroundTaskLogic(val appLogic: AppLogic) { var pauseBackgroundLoop = false + val lastLoopException = MutableLiveData().apply { value = null } companion object { private const val CHECK_PERMISSION_INTERVAL = 10 * 1000L // all 10 seconds @@ -531,6 +532,7 @@ class BackgroundTaskLogic(val appLogic: AppLogic) { } } catch (ex: SecurityException) { // this is handled by an other main loop (with a delay) + lastLoopException.postValue(ex) appLogic.platformIntegration.setAppStatusMessage(AppStatusMessage( appLogic.context.getString(R.string.background_logic_error), @@ -542,6 +544,8 @@ class BackgroundTaskLogic(val appLogic: AppLogic) { Log.w(LOG_TAG, "exception during running main loop", ex) } + lastLoopException.postValue(ex) + appLogic.platformIntegration.setAppStatusMessage(AppStatusMessage( appLogic.context.getString(R.string.background_logic_error), appLogic.context.getString(R.string.background_logic_error_internal) diff --git a/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseMainFragment.kt b/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseMainFragment.kt index 3fa3926..7a6159a 100644 --- a/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseMainFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseMainFragment.kt @@ -20,15 +20,18 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer import androidx.navigation.Navigation import io.timelimit.android.R import io.timelimit.android.databinding.FragmentDiagnoseMainBinding import io.timelimit.android.extensions.safeNavigate +import io.timelimit.android.logic.DefaultAppLogic class DiagnoseMainFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val binding = FragmentDiagnoseMainBinding.inflate(inflater, container, false) val navigation = Navigation.findNavController(container!!) + val logic = DefaultAppLogic.with(context!!) binding.diagnoseClockButton.setOnClickListener { navigation.safeNavigate( @@ -65,6 +68,17 @@ class DiagnoseMainFragment : Fragment() { ) } + logic.backgroundTaskLogic.lastLoopException.observe(this, Observer { ex -> + if (ex != null) { + binding.diagnoseBgTaskLoopExButton.isEnabled = true + binding.diagnoseBgTaskLoopExButton.setOnClickListener { + DiagnoseExceptionDialogFragment.newInstance(ex).show(fragmentManager!!) + } + } else { + binding.diagnoseBgTaskLoopExButton.isEnabled = false + } + }) + return binding.root } } diff --git a/app/src/main/res/layout/fragment_diagnose_main.xml b/app/src/main/res/layout/fragment_diagnose_main.xml index 4971872..176e08f 100644 --- a/app/src/main/res/layout/fragment_diagnose_main.xml +++ b/app/src/main/res/layout/fragment_diagnose_main.xml @@ -56,6 +56,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> +