From 17c40133837ba2811e75b6e14819b7256869949a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Jan 2020 17:58:26 +0100 Subject: [PATCH 1/2] Developer mode: Fail-fast (#745) --- CHANGES.md | 2 +- .../java/im/vector/riotx/VectorApplication.kt | 5 ++-- .../main/java/im/vector/riotx/core/rx/Rx.kt | 25 ++++++++++++------- .../features/settings/VectorPreferences.kt | 5 ++++ vector/src/main/res/values/strings_riotX.xml | 3 +++ .../xml/vector_settings_advanced_settings.xml | 7 ++++++ 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index bb132982d8..bf585df8e2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ Improvements 🙌: - The initial sync is now handled by a foreground service - Render aliases and canonical alias change in the timeline - Fix autocompletion issues and add support for rooms and groups - - Introduce developer mode in the settings (#796) + - Introduce developer mode in the settings (#745, #796) - Improve devices list screen - Add settings for rageshake sensibility - Fix autocompletion issues and add support for rooms, groups, and emoji (#780) diff --git a/vector/src/main/java/im/vector/riotx/VectorApplication.kt b/vector/src/main/java/im/vector/riotx/VectorApplication.kt index 3f55e8f5e6..c76af027ba 100644 --- a/vector/src/main/java/im/vector/riotx/VectorApplication.kt +++ b/vector/src/main/java/im/vector/riotx/VectorApplication.kt @@ -42,7 +42,7 @@ import im.vector.riotx.core.di.DaggerVectorComponent import im.vector.riotx.core.di.HasVectorInjector import im.vector.riotx.core.di.VectorComponent import im.vector.riotx.core.extensions.configureAndStart -import im.vector.riotx.core.rx.setupRxPlugin +import im.vector.riotx.core.rx.RxConfig import im.vector.riotx.features.configuration.VectorConfiguration import im.vector.riotx.features.lifecycle.VectorActivityLifecycleCallbacks import im.vector.riotx.features.notifications.NotificationDrawerManager @@ -75,6 +75,7 @@ class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration. @Inject lateinit var versionProvider: VersionProvider @Inject lateinit var notificationUtils: NotificationUtils @Inject lateinit var appStateHandler: AppStateHandler + @Inject lateinit var rxConfig: RxConfig lateinit var vectorComponent: VectorComponent private var fontThreadHandler: Handler? = null @@ -84,7 +85,7 @@ class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration. vectorComponent = DaggerVectorComponent.factory().create(this) vectorComponent.inject(this) vectorUncaughtExceptionHandler.activate(this) - setupRxPlugin() + rxConfig.setupRxPlugin() if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) diff --git a/vector/src/main/java/im/vector/riotx/core/rx/Rx.kt b/vector/src/main/java/im/vector/riotx/core/rx/Rx.kt index 89de9030dc..d8828eb1b8 100644 --- a/vector/src/main/java/im/vector/riotx/core/rx/Rx.kt +++ b/vector/src/main/java/im/vector/riotx/core/rx/Rx.kt @@ -17,19 +17,26 @@ package im.vector.riotx.core.rx import im.vector.riotx.BuildConfig +import im.vector.riotx.features.settings.VectorPreferences import io.reactivex.plugins.RxJavaPlugins import timber.log.Timber +import javax.inject.Inject -/** - * Make sure unhandled Rx error does not crash the app in production - */ -fun setupRxPlugin() { - RxJavaPlugins.setErrorHandler { throwable -> - Timber.e(throwable, "RxError") +class RxConfig @Inject constructor( + private val vectorPreferences: VectorPreferences +) { - // Avoid crash in production - if (BuildConfig.DEBUG) { - throw throwable + /** + * Make sure unhandled Rx error does not crash the app in production + */ + fun setupRxPlugin() { + RxJavaPlugins.setErrorHandler { throwable -> + Timber.e(throwable, "RxError") + + // Avoid crash in production + if (BuildConfig.DEBUG || vectorPreferences.failFast()) { + throw throwable + } } } } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt index 0ec67789fe..72f8cf01dd 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt @@ -151,6 +151,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { private const val SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY" private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY" private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY" + private const val SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY" // analytics const val SETTINGS_USE_ANALYTICS_KEY = "SETTINGS_USE_ANALYTICS_KEY" @@ -266,6 +267,10 @@ class VectorPreferences @Inject constructor(private val context: Context) { return developerMode() && defaultPrefs.getBoolean(SETTINGS_LABS_ALLOW_EXTENDED_LOGS, false) } + fun failFast(): Boolean { + return developerMode() && defaultPrefs.getBoolean(SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY, false) + } + /** * Tells if we have already asked the user to disable battery optimisations on android >= M devices. * diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 3e8485ebcc..d46231cff4 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -20,4 +20,7 @@ Showing only the first results, type more letters… + Fail-fast + RiotX may crash more often when an unexpected error occurs + diff --git a/vector/src/main/res/xml/vector_settings_advanced_settings.xml b/vector/src/main/res/xml/vector_settings_advanced_settings.xml index 11ca97870d..131b43c8d5 100644 --- a/vector/src/main/res/xml/vector_settings_advanced_settings.xml +++ b/vector/src/main/res/xml/vector_settings_advanced_settings.xml @@ -23,6 +23,13 @@ android:summary="@string/labs_allow_extended_logging_summary" android:title="@string/labs_allow_extended_logging" /> + + From 29f152f349a6ed3b4404d586372dd2fb3b06fde2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Jan 2020 18:21:01 +0100 Subject: [PATCH 2/2] Fix CI --- .../src/main/java/im/vector/riotx/core/rx/{Rx.kt => RxConfig.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vector/src/main/java/im/vector/riotx/core/rx/{Rx.kt => RxConfig.kt} (100%) diff --git a/vector/src/main/java/im/vector/riotx/core/rx/Rx.kt b/vector/src/main/java/im/vector/riotx/core/rx/RxConfig.kt similarity index 100% rename from vector/src/main/java/im/vector/riotx/core/rx/Rx.kt rename to vector/src/main/java/im/vector/riotx/core/rx/RxConfig.kt