Add composer-related developer quick settings

Change-Id: I3d8bd7b38b8ac84f77d84998433d40894b28ea3d
This commit is contained in:
SpiritCroc 2022-12-03 15:13:40 +01:00
parent 7e4b08155e
commit 2526bb168d
6 changed files with 76 additions and 33 deletions

View file

@ -61,9 +61,12 @@ object ArrayOptionsMenuHelper {
}
}
fun MenuItem.toggleExec(withNewVal: (Boolean) -> Boolean) {
fun MenuItem.toggleExec(withNewVal: (Boolean) -> Boolean): Boolean {
val shouldCheck = !isChecked
if (withNewVal(shouldCheck)) {
return if (withNewVal(shouldCheck)) {
isChecked = shouldCheck
true
} else {
false
}
}

View file

@ -48,6 +48,7 @@ import androidx.core.view.forEach
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.core.view.postDelayed
import androidx.core.view.updatePadding
import androidx.fragment.app.setFragmentResultListener
import androidx.lifecycle.lifecycleScope
@ -920,6 +921,11 @@ class TimelineFragment :
menu.findItem(R.id.dev_display_name_changes).isChecked = vectorPreferences.showAvatarDisplayNameChangeMessages()
menu.findItem(R.id.dev_redacted).isChecked = vectorPreferences.showRedactedMessages()
// Composer features
menu.findItem(R.id.dev_composer_voice_message_button).isChecked = vectorPreferences.useVoiceMessage()
menu.findItem(R.id.dev_composer_emoji_button).isChecked = vectorPreferences.showEmojiKeyboard()
menu.findItem(R.id.dev_composer_rich).isChecked = vectorPreferences.isRichTextEditorEnabled()
// Bubble style
ArrayOptionsMenuHelper.createSubmenu(
resources,
@ -1015,36 +1021,39 @@ class TimelineFragment :
timelineViewModel.handle(RoomDetailAction.MarkAllAsRead(forceIfOpenedAnonymously = true))
true
}
R.id.dev_hidden_events -> {
item.toggleExec { shouldShow ->
vectorPreferences.setShouldShowHiddenEvents(shouldShow)
reloadTimeline()
true
}
R.id.dev_hidden_events -> item.toggleExec { shouldShow ->
vectorPreferences.setShouldShowHiddenEvents(shouldShow)
reloadTimeline()
true
}
R.id.dev_membership_changes -> {
item.toggleExec { shouldShow ->
vectorPreferences.setShowJoinLeaveMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_membership_changes -> item.toggleExec { shouldShow ->
vectorPreferences.setShowJoinLeaveMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_display_name_changes -> {
item.toggleExec { shouldShow ->
vectorPreferences.setShowAvatarDisplayNameChangeMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_display_name_changes -> item.toggleExec { shouldShow ->
vectorPreferences.setShowAvatarDisplayNameChangeMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_redacted -> {
item.toggleExec { shouldShow ->
vectorPreferences.setShowRedactedMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_redacted -> item.toggleExec { shouldShow ->
vectorPreferences.setShowRedactedMessages(shouldShow)
reloadTimeline()
true
}
R.id.dev_composer_voice_message_button -> item.toggleExec { enabled ->
vectorPreferences.setVoiceMessageButtonEnabled(enabled)
requireActivity().restart()
true
}
R.id.dev_composer_emoji_button -> item.toggleExec { enabled ->
vectorPreferences.setEmojiButtonEnabled(enabled)
requireActivity().restart()
true
}
R.id.dev_composer_rich -> item.toggleExec { enabled ->
vectorPreferences.setRichEditorEnabled(enabled)
requireActivity().restart()
true
}
R.id.menu_timeline_thread_list -> {

View file

@ -942,6 +942,7 @@ class TimelineViewModel @AssistedInject constructor(
R.id.dev_bubble_style,
R.id.dev_hidden_events,
R.id.dev_event_visibilities,
R.id.dev_composer_features,
R.id.dev_theming,
// SC dev end
R.id.dev_tools -> vectorPreferences.developerMode()

View file

@ -136,6 +136,10 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
GlideApp.with(this)
}
private val isRichTextEditorEnabled: Boolean by lazy {
vectorPreferences.isRichTextEditorEnabled()
}
private val isEmojiKeyboardVisible: Boolean
get() = vectorPreferences.showEmojiKeyboard()
@ -152,7 +156,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
private val attachmentActionsViewModel: AttachmentTypeSelectorSharedActionViewModel by viewModels()
private val composer: MessageComposerView get() {
return if (vectorPreferences.isRichTextEditorEnabled()) {
return if (isRichTextEditorEnabled) {
views.richTextComposerLayout
} else {
views.composerLayout
@ -174,8 +178,8 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
setupComposer()
setupEmojiButton()
views.composerLayout.isGone = vectorPreferences.isRichTextEditorEnabled()
views.richTextComposerLayout.isVisible = vectorPreferences.isRichTextEditorEnabled()
views.composerLayout.isGone = isRichTextEditorEnabled
views.richTextComposerLayout.isVisible = isRichTextEditorEnabled
messageComposerViewModel.observeViewEvents {
when (it) {
@ -253,7 +257,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
override fun onDestroyView() {
super.onDestroyView()
if (!vectorPreferences.isRichTextEditorEnabled()) {
if (!isRichTextEditorEnabled) {
autoCompleter.clear()
}
messageComposerViewModel.endAllVoiceActions()
@ -307,7 +311,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
val composerEditText = composer.editText
composerEditText.setHint(R.string.room_message_placeholder)
if (!vectorPreferences.isRichTextEditorEnabled()) {
if (!isRichTextEditorEnabled) {
autoCompleter.setup(composerEditText)
}
@ -343,7 +347,7 @@ class MessageComposerFragment : VectorBaseFragment<FragmentComposerBinding>(), A
}
composer.callback = object : Callback {
override fun onAddAttachment() {
if (vectorPreferences.isRichTextEditorEnabled()) {
if (isRichTextEditorEnabled) {
AttachmentTypeSelectorBottomSheet.show(childFragmentManager)
} else {
if (!::attachmentTypeSelector.isInitialized) {

View file

@ -1241,7 +1241,7 @@ class VectorPreferences @Inject constructor(
.putBoolean(SETTINGS_OPEN_CHATS_AT_FIRST_UNREAD, true)
.putBoolean(SETTINGS_ALLOW_URL_PREVIEW_IN_ENCRYPTED_ROOM_KEY, true)
.putBoolean(SETTINGS_LABS_ALLOW_MARK_UNREAD, true)
.putBoolean(SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY, false)
//.putBoolean(SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY, false)
.putBoolean(SETTINGS_VOICE_MESSAGE, false)
.putBoolean(SETTINGS_USE_RAGE_SHAKE_KEY, true)
.putBoolean(SETTINGS_AGGREGATE_UNREAD_COUNTS, false)
@ -1253,6 +1253,11 @@ class VectorPreferences @Inject constructor(
.apply()
}
// Some more quick settings
fun setVoiceMessageButtonEnabled(enabled: Boolean) = defaultPrefs.edit(commit = true) { putBoolean(SETTINGS_VOICE_MESSAGE, enabled) }
fun setEmojiButtonEnabled(enabled: Boolean) = defaultPrefs.edit(commit = true) { putBoolean(SETTINGS_SHOW_EMOJI_KEYBOARD, enabled) }
fun setRichEditorEnabled(enabled: Boolean) = defaultPrefs.edit(commit = true) { putBoolean(SETTINGS_LABS_RICH_TEXT_EDITOR_KEY, enabled) }
/** Whether the keyboard should disable personalized learning. */
fun useIncognitoKeyboard(): Boolean {
return defaultPrefs.getBoolean(SETTINGS_SECURITY_INCOGNITO_KEYBOARD_PREFERENCE_KEY, false)

View file

@ -140,6 +140,27 @@
</menu>
</item>
<item
android:id="@+id/dev_composer_features"
android:title="@string/settings_category_composer"
android:visible="false"
tools:visible="true"
app:showAsAction="never">
<menu>
<group android:checkableBehavior="all">
<item
android:id="@+id/dev_composer_voice_message_button"
android:title="@string/settings_show_voice_message_recorder_ui" />
<item
android:id="@+id/dev_composer_emoji_button"
android:title="@string/settings_show_emoji_keyboard" />
<item
android:id="@+id/dev_composer_rich"
android:title="@string/labs_enable_rich_text_editor_title" />
</group>
</menu>
</item>
<item
android:id="@+id/dev_hidden_events"
android:title="@string/dev_tools_menu_hidden_events"