1717package im.vector.app.features.settings
1818
1919import android.os.Bundle
20+ import android.text.method.LinkMovementMethod
21+ import android.widget.TextView
2022import androidx.preference.Preference
23+ import com.google.android.material.dialog.MaterialAlertDialogBuilder
2124import im.vector.app.R
2225import im.vector.app.core.preference.VectorSwitchPreference
2326import im.vector.app.features.MainActivity
2427import im.vector.app.features.MainActivityArgs
2528import im.vector.app.features.analytics.plan.MobileScreen
29+ import im.vector.app.features.home.room.threads.ThreadsManager
2630import org.matrix.android.sdk.api.settings.LightweightSettingsStorage
2731import javax.inject.Inject
2832
2933class VectorSettingsLabsFragment @Inject constructor(
3034 private val vectorPreferences : VectorPreferences ,
31- private val lightweightSettingsStorage : LightweightSettingsStorage
35+ private val lightweightSettingsStorage : LightweightSettingsStorage ,
36+ private val threadsManager : ThreadsManager
3237) : VectorSettingsBaseFragment() {
3338
3439 override var titleRes = R .string.room_settings_labs_pref_title
@@ -46,15 +51,51 @@ class VectorSettingsLabsFragment @Inject constructor(
4651 }
4752
4853 // clear cache
49- findPreference<VectorSwitchPreference >(VectorPreferences .SETTINGS_LABS_ENABLE_THREAD_MESSAGES )?.let {
50- it.onPreferenceClickListener = Preference .OnPreferenceClickListener {
51- // We should migrate threads only if threads are disabled
52- vectorPreferences.setShouldMigrateThreads(! vectorPreferences.areThreadMessagesEnabled())
53- lightweightSettingsStorage.setThreadMessagesEnabled(vectorPreferences.areThreadMessagesEnabled())
54- displayLoadingView()
55- MainActivity .restartApp(requireActivity(), MainActivityArgs (clearCache = true ))
54+ findPreference<VectorSwitchPreference >(VectorPreferences .SETTINGS_LABS_ENABLE_THREAD_MESSAGES )?.let { vectorPref ->
55+ vectorPref.onPreferenceClickListener = Preference .OnPreferenceClickListener {
56+ onThreadsPreferenceClickedInterceptor(vectorPref)
5657 false
5758 }
5859 }
5960 }
61+
62+ /* *
63+ * Intercept the click to display a user friendly dialog when their homeserver do not support threads
64+ */
65+ private fun onThreadsPreferenceClickedInterceptor (vectorSwitchPreference : VectorSwitchPreference ) {
66+ val userEnabledThreads = vectorPreferences.areThreadMessagesEnabled()
67+ if (! session.getHomeServerCapabilities().canUseThreading && userEnabledThreads) {
68+ activity?.let {
69+ MaterialAlertDialogBuilder (it)
70+ .setTitle(R .string.threads_labs_enable_notice_title)
71+ .setMessage(threadsManager.getLabsEnableThreadsMessage())
72+ .setCancelable(true )
73+ .setNegativeButton(R .string.action_not_now) { _, _ ->
74+ vectorSwitchPreference.isChecked = false
75+ }
76+ .setPositiveButton(R .string.action_try_it_out) { _, _ ->
77+ onThreadsPreferenceClicked()
78+ }
79+ .show()
80+ ?.findViewById<TextView >(android.R .id.message)
81+ ?.apply {
82+ linksClickable = true
83+ movementMethod = LinkMovementMethod .getInstance()
84+ }
85+ }
86+ } else {
87+ onThreadsPreferenceClicked()
88+ }
89+ }
90+
91+ /* *
92+ * Action when threads preference switch is actually clicked
93+ */
94+ private fun onThreadsPreferenceClicked () {
95+ // We should migrate threads only if threads are disabled
96+ vectorPreferences.setShouldMigrateThreads(! vectorPreferences.areThreadMessagesEnabled())
97+ lightweightSettingsStorage.setThreadMessagesEnabled(vectorPreferences.areThreadMessagesEnabled())
98+ displayLoadingView()
99+ MainActivity .restartApp(requireActivity(), MainActivityArgs (clearCache = true ))
100+ }
60101}
0 commit comments