diff --git a/changelog.d/4445.bugfix b/changelog.d/4445.bugfix
new file mode 100644
index 0000000000..bf8859ff0f
--- /dev/null
+++ b/changelog.d/4445.bugfix
@@ -0,0 +1 @@
+Replace "open settings" button by "disable" action in RageShake dialog if there is no session
\ No newline at end of file
diff --git a/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt b/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
index b4dcb07349..b5dd3f1ef0 100644
--- a/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
+++ b/vector/src/main/java/im/vector/app/features/rageshake/RageShake.kt
@@ -24,6 +24,7 @@ import androidx.fragment.app.FragmentActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.squareup.seismic.ShakeDetector
import im.vector.app.R
+import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.hardware.vibrate
import im.vector.app.features.navigation.Navigator
import im.vector.app.features.settings.VectorPreferences
@@ -33,6 +34,7 @@ import javax.inject.Inject
class RageShake @Inject constructor(private val activity: FragmentActivity,
private val bugReporter: BugReporter,
private val navigator: Navigator,
+ private val sessionHolder: ActiveSessionHolder,
private val vectorPreferences: VectorPreferences) : ShakeDetector.Listener {
private var shakeDetector: ShakeDetector? = null
@@ -75,7 +77,13 @@ class RageShake @Inject constructor(private val activity: FragmentActivity,
MaterialAlertDialogBuilder(activity)
.setMessage(R.string.send_bug_report_alert_message)
.setPositiveButton(R.string.yes) { _, _ -> openBugReportScreen() }
- .setNeutralButton(R.string.settings) { _, _ -> openSettings() }
+ .also {
+ if (sessionHolder.hasActiveSession()) {
+ it.setNeutralButton(R.string.settings) { _, _ -> openSettings() }
+ } else {
+ it.setNeutralButton(R.string.action_disable) { _, _ -> disableRageShake() }
+ }
+ }
.setOnDismissListener { dialogDisplayed = false }
.setNegativeButton(R.string.no, null)
.show()
@@ -90,6 +98,11 @@ class RageShake @Inject constructor(private val activity: FragmentActivity,
navigator.openSettings(activity, VectorSettingsActivity.EXTRA_DIRECT_ACCESS_ADVANCED_SETTINGS)
}
+ private fun disableRageShake() {
+ vectorPreferences.setRageshakeEnabled(false)
+ stop()
+ }
+
companion object {
/**
* Check if the feature is available
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
index 8fce936428..74fcc0be5d 100755
--- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
@@ -865,6 +865,17 @@ class VectorPreferences @Inject constructor(private val context: Context) {
return defaultPrefs.getBoolean(SETTINGS_INTERFACE_BUBBLE_KEY, getDefault(R.bool.settings_interface_bubble_default))
}
+ /**
+ * Update the rage shake enabled status.
+ *
+ * @param isEnabled true to enable rage shake.
+ */
+ fun setRageshakeEnabled(isEnabled: Boolean) {
+ defaultPrefs.edit {
+ putBoolean(SETTINGS_USE_RAGE_SHAKE_KEY, isEnabled)
+ }
+ }
+
/**
* Tells if the rage shake is used.
*
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index c585d574c1..9bdbb291a5 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -358,6 +358,7 @@
Switch
Unpublish
Enable
+ Disable
Not now
Agree
"Change"