diff --git a/vector/src/main/java/im/vector/app/AutoRageShaker.kt b/vector/src/main/java/im/vector/app/AutoRageShaker.kt index d11a24e38c..7c802e93fb 100644 --- a/vector/src/main/java/im/vector/app/AutoRageShaker.kt +++ b/vector/src/main/java/im/vector/app/AutoRageShaker.kt @@ -17,9 +17,11 @@ package im.vector.app import android.content.Context +import android.content.SharedPreferences import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.features.rageshake.BugReporter import im.vector.app.features.rageshake.ReportType +import im.vector.app.features.settings.VectorPreferences import io.reactivex.disposables.Disposable import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -39,8 +41,9 @@ class AutoRageShaker @Inject constructor( private val sessionDataSource: ActiveSessionDataSource, private val activeSessionHolder: ActiveSessionHolder, private val bugReporter: BugReporter, - private val context: Context -) : Session.Listener { + private val context: Context, + private val vectorPreferences: VectorPreferences +) : Session.Listener, SharedPreferences.OnSharedPreferenceChangeListener { private lateinit var activeSessionDisposable: Disposable private val activeSessionIds = mutableSetOf() @@ -50,10 +53,18 @@ class AutoRageShaker @Inject constructor( fun initialize() { observeActiveSession() + // It's a singleton... + vectorPreferences.subscribeToChanges(this) + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { + enable(vectorPreferences.labsAutoReportUISI()) } var _enabled = false fun enable(enabled: Boolean) { + if (enabled == _enabled) return + _enabled = enabled uisiDetectors.forEach { it.value.enabled = enabled } } diff --git a/vector/src/main/java/im/vector/app/UISIDetector.kt b/vector/src/main/java/im/vector/app/UISIDetector.kt index e12bd7adeb..d6a4805e78 100644 --- a/vector/src/main/java/im/vector/app/UISIDetector.kt +++ b/vector/src/main/java/im/vector/app/UISIDetector.kt @@ -75,6 +75,7 @@ class UISIDetector : LiveEventListener { var enabled = false override fun onLiveEvent(roomId: String, event: Event) { + if (!enabled) return if (!event.isEncrypted()) return executor.execute { handleEventReceived(E2EMessageDetected.fromEvent(event, roomId, UISIEventSource.INCREMENTAL_SYNC)) @@ -82,6 +83,7 @@ class UISIDetector : LiveEventListener { } override fun onPaginatedEvent(roomId: String, event: Event) { + if (!enabled) return if (!event.isEncrypted()) return executor.execute { handleEventReceived(E2EMessageDetected.fromEvent(event, roomId, UISIEventSource.PAGINATION)) @@ -89,18 +91,21 @@ class UISIDetector : LiveEventListener { } override fun onEventDecrypted(eventId: String, roomId: String, clearEvent: JsonDict) { + if (!enabled) return executor.execute { unTrack(eventId, roomId) } } override fun onLiveToDeviceEvent(event: Event) { + if (!enabled) return if (event.type == callback?.reciprocateToDeviceEventType) { callback?.uisiReciprocateRequest(event) } } override fun onEventDecryptionError(eventId: String, roomId: String, throwable: Throwable) { + if (!enabled) return executor.execute { unTrack(eventId, roomId)?.let { triggerUISI(it) @@ -116,6 +121,7 @@ class UISIDetector : LiveEventListener { } private fun handleEventReceived(detectorEvent: E2EMessageDetected) { + if (!enabled) return if (trackedEvents.any { it.first == detectorEvent }) { Timber.w("## UISIDetector: Event ${detectorEvent.eventId} is already tracked") } else { @@ -135,6 +141,7 @@ class UISIDetector : LiveEventListener { } private fun triggerUISI(source: E2EMessageDetected) { + if (!enabled) return Timber.i("## UISIDetector: Unable To Decrypt $source") callback?.uisiDetected(source) } diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt index 7455a0e5bd..02df86e14b 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt @@ -62,11 +62,11 @@ class BugReportActivity : VectorBaseActivity() { // Default screen is for bug report, so modify it for suggestion when (reportType) { - ReportType.BUG_REPORT -> { + ReportType.BUG_REPORT -> { supportActionBar?.setTitle(R.string.title_activity_bug_report) views.bugReportButtonContactMe.isVisible = true } - ReportType.SUGGESTION -> { + ReportType.SUGGESTION -> { supportActionBar?.setTitle(R.string.send_suggestion) views.bugReportFirstText.setText(R.string.send_suggestion_content) @@ -84,6 +84,9 @@ class BugReportActivity : VectorBaseActivity() { hideBugReportOptions() } + else -> { + // other types not supported here + } } } @@ -174,6 +177,9 @@ class BugReportActivity : VectorBaseActivity() { Toast.makeText(this@BugReportActivity, getString(R.string.feedback_failed, reason), Toast.LENGTH_LONG).show() } + else -> { + // nop + } } } } catch (e: Exception) { @@ -211,6 +217,9 @@ class BugReportActivity : VectorBaseActivity() { ReportType.SPACE_BETA_FEEDBACK -> { Toast.makeText(this@BugReportActivity, R.string.feedback_sent, Toast.LENGTH_LONG).show() } + else -> { + // nop + } } } catch (e: Exception) { Timber.e(e, "## onUploadSucceed() : failed to dismiss the toast") diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt index 76f457b5ad..a83b4c33f4 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt @@ -16,14 +16,12 @@ package im.vector.app.features.settings -// import im.vector.app.AutoRageShaker import im.vector.app.R import im.vector.app.core.preference.VectorSwitchPreference import javax.inject.Inject class VectorSettingsLabsFragment @Inject constructor( - private val vectorPreferences: VectorPreferences, -// private val autoRageShaker: AutoRageShaker + private val vectorPreferences: VectorPreferences ) : VectorSettingsBaseFragment() { override var titleRes = R.string.room_settings_labs_pref_title @@ -31,11 +29,8 @@ class VectorSettingsLabsFragment @Inject constructor( override fun bindPref() { findPreference(VectorPreferences.SETTINGS_LABS_AUTO_REPORT_UISI)?.let { pref -> + // ensure correct default pref.isChecked = vectorPreferences.labsAutoReportUISI() - pref.setOnPreferenceChangeListener { _, isChecked -> -// autoRageShaker.enable(isChecked as Boolean) - true - } } } }