From bf0204a99e0721ad5c26e196fd6ea8864f3f4a1e Mon Sep 17 00:00:00 2001 From: PoorPocketsMcNewHold Date: Sun, 15 Aug 2021 09:08:56 +0000 Subject: [PATCH 1/7] Translated using Weblate (French) Currently translated at 98.8% (88 of 89 strings) Translation: SchildiChat/SchildiChat-android Translate-URL: https://weblate.bubu1.eu/projects/schildichat/schildichat-android/fr/ --- vector/src/main/res/values-fr/strings_sc.xml | 37 +++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-fr/strings_sc.xml b/vector/src/main/res/values-fr/strings_sc.xml index 7533b7e19a..7d0da6488a 100644 --- a/vector/src/main/res/values-fr/strings_sc.xml +++ b/vector/src/main/res/values-fr/strings_sc.xml @@ -45,7 +45,7 @@ En-bas Inclure les discussions sans notification dans le comptage des messages par catégorie Marquer les discussions comme non lues - Autoriser de marquer les discussions comme non lues. D\'autres clients matrix ne prennent peut-être pas encore cette fonctionnaloté en charge. + Autoriser de marquer les discussions comme non lues. D’autres clients Matrix ne prennent peut-être pas encore cette fonctionnalité en charge. Prévisualisations des URL dans les discussions chiffrées Ceci fera fuiter les URL de tes messages vers votre serveur domestique ! SchildiChat Android @@ -54,4 +54,39 @@ par ex. @utilisateur:domaine.com Serveur personnalisé Compter les évènements de discussion non importants + Messages vocaux + Crée un bouton pour enregistrer ses messages + Jaune + Chair + Denim + Indigo + Lave + Bleu + Couleurs de thème + Couleur d’accentuation pour les thèmes clairs + Couleur d’accentuation pour les thèmes sombres + Notez que ces options de couleurs ne s’applique que pour les thèmes SC, et non les thèmes Element. + Citron vert + Orange + Vert clair + Vert sombre + Bleu sarcelle + Rose + Violet + Couleurs d’utilisateurs dans les conversations directes + Couleurs d’utilisateurs dans les conversations de groupe + Couleurs d’utilisateurs dans les salons publiques + Ouvrir au premier non lu + Ouvrir la discussion au premier message non lu au lieu du dernier message. + Rouge + Uniformiser + Basé sur le niveau de batterie + Basé sur l’identifiant Matrix + Paramètres de thèmes avancés + Couleurs d’utilisateur + Ambre + Bleu clair + Cyan + Or + Turquoise \ No newline at end of file From d11b6cf1548e3c7e4b0382293147eb1ac39221d1 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Wed, 18 Aug 2021 17:31:56 +0200 Subject: [PATCH 2/7] Add to rageshake whether it is a debug build or not Change-Id: I90336416c10d2f09979eb7518cc651c3e33a40fa --- .../main/java/im/vector/app/features/rageshake/BugReporter.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt index 9c520000ea..ce8fe2379a 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt @@ -259,6 +259,7 @@ class BugReporter @Inject constructor( .addFormDataPart("user_agent", Matrix.getInstance(context).getUserAgent()) .addFormDataPart("user_id", userId) .addFormDataPart("can_contact", canContact.toString()) + .addFormDataPart("is_debug_build", BuildConfig.DEBUG.toString()) .addFormDataPart("device_id", deviceId) .addFormDataPart("version", versionProvider.getVersion(longFormat = true, useBuildNumber = false)) .addFormDataPart("branch_name", context.getString(R.string.git_branch_name)) @@ -317,6 +318,9 @@ class BugReporter @Inject constructor( builder.addFormDataPart("label", BuildConfig.FLAVOR_DESCRIPTION) builder.addFormDataPart("label", context.getString(R.string.git_branch_name)) + if (BuildConfig.DEBUG) { + builder.addFormDataPart("label", "debug_build") + } if (canContact) { builder.addFormDataPart("label", "can contact") } From f9f11b604cf0105f88150ea72545588389cdaa41 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Thu, 19 Aug 2021 10:10:23 +0200 Subject: [PATCH 3/7] Make composer notification (not allowing to send messages) more compact Change-Id: Iba087f569d8928e844bf34d5660ea7256156ad9d --- vector/src/main/res/layout/view_notification_area.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/layout/view_notification_area.xml b/vector/src/main/res/layout/view_notification_area.xml index 488b3e1c29..11e220f9ef 100644 --- a/vector/src/main/res/layout/view_notification_area.xml +++ b/vector/src/main/res/layout/view_notification_area.xml @@ -6,13 +6,13 @@ android:background="?vctr_keys_backup_banner_accent_color" android:minHeight="48dp" android:orientation="horizontal" - android:padding="16dp"> + android:paddingHorizontal="16dp"> @@ -27,6 +27,7 @@ android:gravity="start" android:paddingStart="4dp" android:paddingEnd="0dp" + android:paddingVertical="12dp" android:textColor="?vctr_content_primary" tools:text="@string/room_do_not_have_permission_to_post" /> From 7ba2ba16a6ad08784e2d74d5c1578c39add99c84 Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Wed, 18 Aug 2021 17:48:05 +0000 Subject: [PATCH 4/7] Translated using Weblate (Czech) Currently translated at 100.0% (90 of 90 strings) Translation: SchildiChat/SchildiChat-android Translate-URL: https://weblate.bubu1.eu/projects/schildichat/schildichat-android/cs/ --- vector/src/main/res/values-cs/strings_sc.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/res/values-cs/strings_sc.xml b/vector/src/main/res/values-cs/strings_sc.xml index 756d25f20d..550f5eb369 100644 --- a/vector/src/main/res/values-cs/strings_sc.xml +++ b/vector/src/main/res/values-cs/strings_sc.xml @@ -91,4 +91,5 @@ Džínová Hlasové zprávy Zobrazit tlačítko pro nahrávání hlasových zpráv + Abyste zvýšili viditelnost svého problému a umožnili nám vás kontaktovat, můžete se na tuto zprávu odkázat (uvedením svého matrix ID a přibližného času, kdy byla odeslána) v problému na adrese https://github.com/SchildiChat/SchildiChat-android/issues (nejprve zkontrolujte, zda pro váš problém již neexistuje, a teprve pokud ne, vytvořte nový). \ No newline at end of file From 8917e78ced7f49cf283b20a58e7c9d3e3a9dc4d6 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Thu, 19 Aug 2021 11:52:11 +0200 Subject: [PATCH 5/7] Work around voice message crashes on Android 5 - Catch NPE in onVisibilityChanged (happens for SDK 21 and 22) - Do not allow voice messages on SDK 21: segfaults as soon as recording stops Change-Id: I0cfc55fbb7880dc29e29df4fba14d57af1f82bba --- .../detail/composer/VoiceMessageRecorderView.kt | 13 +++++++++---- .../app/features/settings/VectorPreferences.kt | 6 ++++-- .../features/settings/VectorSettingsLabsFragment.kt | 3 +++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt index 7f1c4f0759..40bc3db2f8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt @@ -90,10 +90,15 @@ class VoiceMessageRecorderView @JvmOverloads constructor( override fun onVisibilityChanged(changedView: View, visibility: Int) { super.onVisibilityChanged(changedView, visibility) - if (changedView == this && visibility == VISIBLE) { - views.voiceMessageMicButton.contentDescription = context.getString(R.string.a11y_start_voice_message) - } else { - views.voiceMessageMicButton.contentDescription = "" + // On Android 5, this can cause a NPE for some unknown reason + try { + if (changedView == this && visibility == VISIBLE) { + views.voiceMessageMicButton.contentDescription = context.getString(R.string.a11y_start_voice_message) + } else { + views.voiceMessageMicButton.contentDescription = "" + } + } catch (e: Exception) { + e.printStackTrace() } } 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 b1b9ccfa70..15e1d366fe 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 @@ -19,6 +19,7 @@ import android.content.Context import android.content.SharedPreferences import android.media.RingtoneManager import android.net.Uri +import android.os.Build import android.provider.MediaStore import androidx.core.content.edit import com.squareup.seismic.ShakeDetector @@ -202,7 +203,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { private const val SETTINGS_USER_COLOR_MODE_DEFAULT = "SETTINGS_USER_COLOR_MODE_DEFAULT" private const val SETTINGS_USER_COLOR_MODE_PUBLIC_ROOM = "SETTINGS_USER_COLOR_MODE_PUBLIC_ROOM" private const val SETTINGS_OPEN_CHATS_AT_FIRST_UNREAD = "SETTINGS_OPEN_CHATS_AT_FIRST_UNREAD" - private const val SETTINGS_VOICE_MESSAGE = "SETTINGS_VOICE_MESSAGE" + const val SETTINGS_VOICE_MESSAGE = "SETTINGS_VOICE_MESSAGE" private const val DID_ASK_TO_ENABLE_SESSION_PUSH = "DID_ASK_TO_ENABLE_SESSION_PUSH" @@ -1004,7 +1005,8 @@ class VectorPreferences @Inject constructor(private val context: Context) { // Element removed this, SC added it back (but this time, default to true) fun useVoiceMessage(): Boolean { - return defaultPrefs.getBoolean(SETTINGS_VOICE_MESSAGE, true) + // Voice messages crash on SDK 21 + return Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP && defaultPrefs.getBoolean(SETTINGS_VOICE_MESSAGE, true) } /** diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt index dc74a1fa4f..e12e9353d2 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt @@ -16,6 +16,7 @@ package im.vector.app.features.settings +import android.os.Build import androidx.preference.Preference import im.vector.app.R import im.vector.app.core.preference.VectorSwitchPreference @@ -56,6 +57,8 @@ class VectorSettingsLabsFragment @Inject constructor( findPreference(VectorPreferences.SETTINGS_ALLOW_URL_PREVIEW_IN_ENCRYPTED_ROOM_KEY)?.isEnabled = vectorPreferences.showUrlPreviews() + findPreference(VectorPreferences.SETTINGS_VOICE_MESSAGE)?.isEnabled = Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP + findPreference(VectorPreferences.SETTINGS_LABS_SPACES_HOME_AS_ORPHAN)!!.let { pref -> pref.setOnPreferenceChangeListener { _, _ -> MainActivity.restartApp(requireActivity(), MainActivityArgs(clearCache = false)) From 2f4d379ed0584b4f7790c31f25d1723c4146f122 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Fri, 20 Aug 2021 09:15:58 +0200 Subject: [PATCH 6/7] Do not crash on sending 0 byte videos java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever._setDataSource(MediaMetadataRetriever.java) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:306) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:327) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:376) at org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory.createVideoEvent at org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory.createMediaEvent at org.matrix.android.sdk.internal.session.room.send.DefaultSendService.sendMedia(DefaultSendService.kt:253) at org.matrix.android.sdk.internal.session.room.send.DefaultSendService.sendMedias(DefaultSendService.kt:240) at org.matrix.android.sdk.internal.session.room.DefaultRoom.sendMedias at im.vector.app.features.home.room.detail.RoomDetailViewModel.handleSendMedia(RoomDetailViewModel.kt:1158) at im.vector.app.features.home.room.detail.RoomDetailViewModel.handle(RoomDetailViewModel.kt:298) at im.vector.app.features.home.room.detail.RoomDetailFragment$contentAttachmentActivityResultLauncher$1.invoke(RoomDetailFragment.kt:1161) at im.vector.app.features.home.room.detail.RoomDetailFragment$contentAttachmentActivityResultLauncher$1.invoke(RoomDetailFragment.kt:1156) at im.vector.app.core.extensions.FragmentKt.registerStartForActivityResult$lambda-0 at im.vector.app.core.extensions.FragmentKt.lambda$6uyRKSScfR1yqThCkGUu8777SL8 at im.vector.app.core.extensions.-$$Lambda$FragmentKt$6uyRKSScfR1yqThCkGUu8777SL8.onActivityResult(lambda:0) at androidx.activity.result.ActivityResultRegistry$1.onStateChanged(ActivityResultRegistry.java:148) at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354) at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265) at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307) at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148) at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134) at androidx.fragment.app.Fragment.performStart(Fragment.java:3026) at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:589) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:300) at androidx.fragment.app.FragmentStore.moveToExpectedState at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) at androidx.fragment.app.FragmentManager.dispatchStart at androidx.fragment.app.FragmentController.dispatchStart at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:510) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455) at android.app.Activity.performStart(Activity.java:8076) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3653) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2203) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7822) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Change-Id: Ib909abe6468703452d53e760bde414e81a8876e3 --- .../internal/session/room/send/LocalEchoEventFactory.kt | 7 ++++++- .../im/vector/lib/multipicker/utils/ContentResolverUtil.kt | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt index c610326a94..adc466f88a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt @@ -58,6 +58,7 @@ import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.session.content.ThumbnailExtractor import org.matrix.android.sdk.internal.session.permalinks.PermalinkFactory import org.matrix.android.sdk.internal.session.room.send.pills.TextPillsUtils +import java.lang.RuntimeException import javax.inject.Inject /** @@ -256,7 +257,11 @@ internal class LocalEchoEventFactory @Inject constructor( private fun createVideoEvent(roomId: String, attachment: ContentAttachmentData): Event { val mediaDataRetriever = MediaMetadataRetriever() - mediaDataRetriever.setDataSource(context, attachment.queryUri) + try { + mediaDataRetriever.setDataSource(context, attachment.queryUri) + } catch (e: RuntimeException) { + e.printStackTrace() + } // Use frame to calculate height and width as we are sure to get the right ones val firstFrame: Bitmap? = mediaDataRetriever.frameAtTime diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt b/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt index 78136c274a..67b1ded065 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt @@ -23,6 +23,7 @@ import android.provider.MediaStore import im.vector.lib.multipicker.entity.MultiPickerAudioType import im.vector.lib.multipicker.entity.MultiPickerImageType import im.vector.lib.multipicker.entity.MultiPickerVideoType +import java.lang.RuntimeException internal fun Uri.toMultiPickerImageType(context: Context): MultiPickerImageType? { val projection = arrayOf( @@ -88,7 +89,11 @@ internal fun Uri.toMultiPickerVideoType(context: Context): MultiPickerVideoType? context.contentResolver.openFileDescriptor(this, "r")?.use { pfd -> val mediaMetadataRetriever = MediaMetadataRetriever() - mediaMetadataRetriever.setDataSource(pfd.fileDescriptor) + try { + mediaMetadataRetriever.setDataSource(pfd.fileDescriptor) + } catch (e: RuntimeException) { + e.printStackTrace() + } duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toLong() ?: 0L width = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toInt() ?: 0 height = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toInt() ?: 0 From 540dd5b77871ae2174989696efa4a5ca05e14445 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Fri, 20 Aug 2021 09:45:42 +0200 Subject: [PATCH 7/7] increment_version.sh: do not always update translations Change-Id: Ia6257e15e50287eeffe1dcdf4bf9dcc11f8418e9 --- increment_version.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/increment_version.sh b/increment_version.sh index f655fcaaaa..ac6a68897a 100755 --- a/increment_version.sh +++ b/increment_version.sh @@ -30,13 +30,15 @@ pushd "$mydir" > /dev/null do_translation_pull=0 -if git remote get-url weblate > /dev/null; then - echo "Pulling translations..." - translation commit && do_translation_pull=1 || echo "translation tool not found, skipping forced commit" - git fetch weblate - git merge weblate/sc --no-edit -else - echo "WARN: remote weblate not found, not updating translations" +if [ "$release_type" = "normal" ] && [ "$preview" != 1 ]; then + if git remote get-url weblate > /dev/null; then + echo "Pulling translations..." + translation commit && do_translation_pull=1 || echo "translation tool not found, skipping forced commit" + git fetch weblate + git merge weblate/sc --no-edit + else + echo "WARN: remote weblate not found, not updating translations" + fi fi last_tag=`downstream_latest_tag`