Fix UISIS preference listener

This commit is contained in:
Valere 2021-10-25 12:27:41 +02:00
parent be119ea161
commit cf026b22b8
4 changed files with 33 additions and 11 deletions

View file

@ -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<String>()
@ -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 }
}

View file

@ -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)
}

View file

@ -62,11 +62,11 @@ class BugReportActivity : VectorBaseActivity<ActivityBugReportBinding>() {
// 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<ActivityBugReportBinding>() {
hideBugReportOptions()
}
else -> {
// other types not supported here
}
}
}
@ -174,6 +177,9 @@ class BugReportActivity : VectorBaseActivity<ActivityBugReportBinding>() {
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<ActivityBugReportBinding>() {
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")

View file

@ -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<VectorSwitchPreference>(VectorPreferences.SETTINGS_LABS_AUTO_REPORT_UISI)?.let { pref ->
// ensure correct default
pref.isChecked = vectorPreferences.labsAutoReportUISI()
pref.setOnPreferenceChangeListener { _, isChecked ->
// autoRageShaker.enable(isChecked as Boolean)
true
}
}
}
}