Put voice message preference under labs.

This commit is contained in:
Onuray Sahin 2021-07-07 10:23:22 +03:00
parent 6cb53c991a
commit 5856e563c5
7 changed files with 34 additions and 8 deletions

View File

@ -922,7 +922,7 @@ class RoomDetailFragment @Inject constructor(
autoCompleter.exitSpecialMode() autoCompleter.exitSpecialMode()
views.composerLayout.collapse() views.composerLayout.collapse()
views.voiceMessageRecorderView.isVisible = text.isBlank() views.voiceMessageRecorderView.isVisible = text.isBlank() && vectorPreferences.labsUseVoiceMessage()
updateComposerText(text) updateComposerText(text)
views.composerLayout.views.sendButton.contentDescription = getString(R.string.send) views.composerLayout.views.sendButton.contentDescription = getString(R.string.send)
@ -1239,7 +1239,7 @@ class RoomDetailFragment @Inject constructor(
} }
override fun onTextBlankStateChanged(isBlank: Boolean) { override fun onTextBlankStateChanged(isBlank: Boolean) {
views.voiceMessageRecorderView.isVisible = !views.composerLayout.views.sendButton.isVisible views.voiceMessageRecorderView.isVisible = !views.composerLayout.views.sendButton.isVisible && vectorPreferences.labsUseVoiceMessage()
} }
override fun onTouchVoiceRecording() { override fun onTouchVoiceRecording() {
@ -1259,7 +1259,7 @@ class RoomDetailFragment @Inject constructor(
if (text.isNotBlank()) { if (text.isNotBlank()) {
// We collapse ASAP, if not there will be a slight anoying delay // We collapse ASAP, if not there will be a slight anoying delay
views.composerLayout.collapse(true) views.composerLayout.collapse(true)
views.voiceMessageRecorderView.isVisible = true views.voiceMessageRecorderView.isVisible = true && vectorPreferences.labsUseVoiceMessage()
lockSendButton = true lockSendButton = true
roomDetailViewModel.handle(RoomDetailAction.SendMessage(text, vectorPreferences.isMarkdownEnabled())) roomDetailViewModel.handle(RoomDetailAction.SendMessage(text, vectorPreferences.isMarkdownEnabled()))
emojiPopup.dismiss() emojiPopup.dismiss()
@ -1314,6 +1314,7 @@ class RoomDetailFragment @Inject constructor(
views.composerLayout.visibility = View.VISIBLE views.composerLayout.visibility = View.VISIBLE
views.composerLayout.setRoomEncrypted(summary.isEncrypted) views.composerLayout.setRoomEncrypted(summary.isEncrypted)
views.notificationAreaView.render(NotificationAreaView.State.Hidden) views.notificationAreaView.render(NotificationAreaView.State.Hidden)
views.composerLayout.alwaysShowSendButton = !vectorPreferences.labsUseVoiceMessage()
} else { } else {
views.composerLayout.visibility = View.GONE views.composerLayout.visibility = View.GONE
views.notificationAreaView.render(NotificationAreaView.State.NoPermissionToPost) views.notificationAreaView.render(NotificationAreaView.State.NoPermissionToPost)

View File

@ -615,8 +615,11 @@ class RoomDetailViewModel @AssistedInject constructor(
return return
} }
voiceMessageHelper.stopRecording()?.let { audioType -> voiceMessageHelper.stopRecording()?.let { audioType ->
if (audioType.duration > 1000) {
room.sendMedia(audioType.toContentAttachmentData(), false, emptySet()) room.sendMedia(audioType.toContentAttachmentData(), false, emptySet())
//voiceMessageRecordingHelper.deleteRecording() } else {
voiceMessageHelper.deleteRecording()
}
} }
} }

View File

@ -20,7 +20,6 @@ import android.content.Context
import android.net.Uri import android.net.Uri
import android.text.Editable import android.text.Editable
import android.util.AttributeSet import android.util.AttributeSet
import android.view.KeyEvent
import android.view.ViewGroup import android.view.ViewGroup
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet import androidx.constraintlayout.widget.ConstraintSet
@ -63,6 +62,13 @@ class TextComposerView @JvmOverloads constructor(
val text: Editable? val text: Editable?
get() = views.composerEditText.text get() = views.composerEditText.text
var alwaysShowSendButton = false
set(value) {
field = value
val shouldShowSendButton = currentConstraintSetId == R.layout.composer_layout_constraint_set_expanded || text?.isNotBlank().orFalse() || value
views.sendButton.isInvisible = !shouldShowSendButton
}
init { init {
inflate(context, R.layout.composer_layout, this) inflate(context, R.layout.composer_layout, this)
views = ComposerLayoutBinding.bind(this) views = ComposerLayoutBinding.bind(this)
@ -75,7 +81,7 @@ class TextComposerView @JvmOverloads constructor(
} }
override fun onTextBlankStateChanged(isBlank: Boolean) { override fun onTextBlankStateChanged(isBlank: Boolean) {
val shouldShowSendButton = currentConstraintSetId == R.layout.composer_layout_constraint_set_expanded || !isBlank val shouldShowSendButton = currentConstraintSetId == R.layout.composer_layout_constraint_set_expanded || !isBlank || alwaysShowSendButton
TransitionManager.endTransitions(this@TextComposerView) TransitionManager.endTransitions(this@TextComposerView)
if (views.sendButton.isVisible != shouldShowSendButton) { if (views.sendButton.isVisible != shouldShowSendButton) {
TransitionManager.beginDelayedTransition( TransitionManager.beginDelayedTransition(
@ -110,7 +116,7 @@ class TextComposerView @JvmOverloads constructor(
currentConstraintSetId = R.layout.composer_layout_constraint_set_compact currentConstraintSetId = R.layout.composer_layout_constraint_set_compact
applyNewConstraintSet(animate, transitionComplete) applyNewConstraintSet(animate, transitionComplete)
val shouldShowSendButton = !views.composerEditText.text.isNullOrEmpty() val shouldShowSendButton = !views.composerEditText.text.isNullOrEmpty() || alwaysShowSendButton
views.sendButton.isInvisible = !shouldShowSendButton views.sendButton.isInvisible = !shouldShowSendButton
} }

View File

@ -179,6 +179,9 @@ class VoiceMessageHelper @Inject constructor(
} catch (e: IllegalStateException) { } catch (e: IllegalStateException) {
Timber.e(e, "Cannot get max amplitude. Amplitude recording timer will be stopped.") Timber.e(e, "Cannot get max amplitude. Amplitude recording timer will be stopped.")
amplitudeTimerTask?.cancel() amplitudeTimerTask?.cancel()
} catch (e: RuntimeException) {
Timber.e(e, "Cannot get max amplitude (native error). Amplitude recording timer will be stopped.")
amplitudeTimerTask?.cancel()
} }
} }
} }

View File

@ -153,11 +153,14 @@ class VectorPreferences @Inject constructor(private val context: Context) {
const val SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE = "SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE" const val SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE = "SETTINGS_LABS_USE_RESTRICTED_JOIN_RULE"
const val SETTINGS_LABS_SPACES_HOME_AS_ORPHAN = "SETTINGS_LABS_SPACES_HOME_AS_ORPHAN" const val SETTINGS_LABS_SPACES_HOME_AS_ORPHAN = "SETTINGS_LABS_SPACES_HOME_AS_ORPHAN"
const val SETTINGS_LABS_VOICE_MESSAGE = "SETTINGS_LABS_VOICE_MESSAGE"
private const val SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY" private const val SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY"
private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY" private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY"
private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY" private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
private const val SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY" private const val SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY"
// SETTINGS_LABS_HIDE_TECHNICAL_E2E_ERRORS // SETTINGS_LABS_HIDE_TECHNICAL_E2E_ERRORS
private const val SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM = "SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM" private const val SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM = "SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM"
const val SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB = "SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB" const val SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB = "SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB"
@ -973,4 +976,8 @@ class VectorPreferences @Inject constructor(private val context: Context) {
putInt(TAKE_PHOTO_VIDEO_MODE, mode) putInt(TAKE_PHOTO_VIDEO_MODE, mode)
} }
} }
fun labsUseVoiceMessage(): Boolean {
return defaultPrefs.getBoolean(SETTINGS_LABS_VOICE_MESSAGE, false)
}
} }

View File

@ -3419,4 +3419,5 @@
<string name="voice_message_release_to_send_toast">Release to send</string> <string name="voice_message_release_to_send_toast">Release to send</string>
<string name="voice_message_n_seconds_warning_toast">%1$ds left</string> <string name="voice_message_n_seconds_warning_toast">%1$ds left</string>
<string name="voice_message_tap_on_waveform_to_stop_toast">Tap on the waveform to stop and playback</string> <string name="voice_message_tap_on_waveform_to_stop_toast">Tap on the waveform to stop and playback</string>
<string name="labs_use_voice_message">Enable voice message</string>
</resources> </resources>

View File

@ -57,4 +57,9 @@
android:key="SETTINGS_LABS_SPACES_HOME_AS_ORPHAN" android:key="SETTINGS_LABS_SPACES_HOME_AS_ORPHAN"
android:title="@string/labs_space_show_orphan_in_home"/> android:title="@string/labs_space_show_orphan_in_home"/>
<im.vector.app.core.preference.VectorSwitchPreference
android:defaultValue="false"
android:key="SETTINGS_LABS_VOICE_MESSAGE"
android:title="@string/labs_use_voice_message"/>
</androidx.preference.PreferenceScreen> </androidx.preference.PreferenceScreen>