From 93fb40f3235422c244e0c3575893763ab0f97f7e Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 2 Jul 2020 11:29:00 +0200 Subject: [PATCH 01/11] (re-)Enable abortOnError for lint And fix a first issue (on unused code) --- vector/build.gradle | 3 +-- .../vector/riotx/features/form/FormEditTextWithButtonItem.kt | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/build.gradle b/vector/build.gradle index e497b156ae..92e7239dbf 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -232,8 +232,7 @@ android { lintOptions { lintConfig file("lint.xml") - // TODO Restore true once pb with WorkManager is fixed - abortOnError false + abortOnError true } compileOptions { diff --git a/vector/src/main/java/im/vector/riotx/features/form/FormEditTextWithButtonItem.kt b/vector/src/main/java/im/vector/riotx/features/form/FormEditTextWithButtonItem.kt index 0650c0f55c..799f6abe00 100644 --- a/vector/src/main/java/im/vector/riotx/features/form/FormEditTextWithButtonItem.kt +++ b/vector/src/main/java/im/vector/riotx/features/form/FormEditTextWithButtonItem.kt @@ -56,6 +56,7 @@ abstract class FormEditTextWithButtonItem : VectorEpoxyModel<FormEditTextWithBut } override fun bind(holder: Holder) { + super.bind(holder) holder.textInputLayout.isEnabled = enabled holder.textInputLayout.hint = hint From 5713fa4f595b80281e85c65047aba1f668914707 Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 2 Jul 2020 12:17:09 +0200 Subject: [PATCH 02/11] Clean code --- .../java/im/vector/riotx/VectorApplication.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/VectorApplication.kt b/vector/src/main/java/im/vector/riotx/VectorApplication.kt index d0a3174227..ab7c3e1bf7 100644 --- a/vector/src/main/java/im/vector/riotx/VectorApplication.kt +++ b/vector/src/main/java/im/vector/riotx/VectorApplication.kt @@ -63,7 +63,13 @@ import java.util.Locale import java.util.concurrent.Executors import javax.inject.Inject -class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration.Provider, androidx.work.Configuration.Provider { +import androidx.work.Configuration as WorkConfiguration + +class VectorApplication : + Application(), + HasVectorInjector, + MatrixConfiguration.Provider, + WorkConfiguration.Provider { lateinit var appContext: Context @Inject lateinit var legacySessionImporter: LegacySessionImporter @@ -85,6 +91,7 @@ class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration. @Inject lateinit var webRtcPeerConnectionManager: WebRtcPeerConnectionManager lateinit var vectorComponent: VectorComponent + // font thread handler private var fontThreadHandler: Handler? = null @@ -157,7 +164,11 @@ class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration. override fun providesMatrixConfiguration() = MatrixConfiguration(BuildConfig.FLAVOR_DESCRIPTION) - override fun getWorkManagerConfiguration() = androidx.work.Configuration.Builder().setExecutor(Executors.newCachedThreadPool()).build() + override fun getWorkManagerConfiguration(): WorkConfiguration { + return WorkConfiguration.Builder() + .setExecutor(Executors.newCachedThreadPool()) + .build() + } override fun injector(): VectorComponent { return vectorComponent From 1de819b0a3ab6dd3d4e878ed831c3416ce45de59 Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 2 Jul 2020 12:21:23 +0200 Subject: [PATCH 03/11] Fix lint false-positive about WorkManger (#1012) --- CHANGES.md | 2 +- matrix-sdk-android/src/main/AndroidManifest.xml | 6 ------ vector/src/main/AndroidManifest.xml | 6 ++++++ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4a7d0d70af..378ea2279a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,7 +17,7 @@ SDK API changes ⚠️: - Build 🧱: - - + - Fix lint false-positive about WorkManger (#1012) Other changes: - diff --git a/matrix-sdk-android/src/main/AndroidManifest.xml b/matrix-sdk-android/src/main/AndroidManifest.xml index 94b2db2bf1..c02f34f1c9 100644 --- a/matrix-sdk-android/src/main/AndroidManifest.xml +++ b/matrix-sdk-android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" package="im.vector.matrix.android"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> @@ -8,11 +7,6 @@ <application android:networkSecurityConfig="@xml/network_security_config"> - <provider - android:name="androidx.work.impl.WorkManagerInitializer" - android:authorities="${applicationId}.workmanager-init" - android:exported="false" - tools:node="remove" /> <!-- The SDK offers a secured File provider to access downloaded files. Access to these file will be given via the FileService, with a temporary diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 3ed0d95b71..f9b78db17c 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -247,6 +247,12 @@ <!-- Providers --> + <!-- Remove WorkManagerInitializer Provider because we are using on-demand initialization of WorkManager--> + <provider + android:name="androidx.work.impl.WorkManagerInitializer" + android:authorities="${applicationId}.workmanager-init" + tools:node="remove" /> + <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileProvider" From 542d11d7f1fd095fddb7d0b8dd7aaca78ec3ab7d Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 2 Jul 2020 12:44:07 +0200 Subject: [PATCH 04/11] Upgrade build-tools from 3.5.3 to 3.6.6 and gradle from 5.4.1 to 5.6.4 --- CHANGES.md | 2 ++ build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 378ea2279a..3555894bf4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,8 @@ SDK API changes ⚠️: Build 🧱: - Fix lint false-positive about WorkManger (#1012) + - Upgrade build-tools from 3.5.3 to 3.6.6 + - Upgrade gradle from 5.4.1 to 5.6.4 Other changes: - diff --git a/build.gradle b/build.gradle index 74a62f0d17..5f1fa78620 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:3.6.3' classpath 'com.google.gms:google-services:4.3.2' classpath "com.airbnb.okreplay:gradle-plugin:1.5.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 51b92600a0..4da2435f42 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Sep 27 10:10:35 CEST 2019 +#Thu Jul 02 12:33:07 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip From d4050a7b9d18a92b56960c192d5662f2b48184ba Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 2 Jul 2020 23:39:42 +0200 Subject: [PATCH 05/11] Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use --- vector/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vector/build.gradle b/vector/build.gradle index 92e7239dbf..f966f441b2 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -106,6 +106,11 @@ def buildNumber = System.env.BUILDKITE_BUILD_NUMBER as Integer ?: 0 android { compileSdkVersion 29 + + // Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use + // Ref: https://issuetracker.google.com/issues/144111441 + ndkVersion "21.3.6528147" + defaultConfig { applicationId "im.vector.app" // Set to API 21: see #405 From bdfce35d9a11c8aea854b4fbe6f14013aeaad6cd Mon Sep 17 00:00:00 2001 From: Valere <valeref@matrix.org> Date: Fri, 3 Jul 2020 09:34:38 +0200 Subject: [PATCH 06/11] Fix / save media on old android + add numbers to file if needed --- CHANGES.md | 2 + .../core/utils/ExternalApplicationsUtil.kt | 195 ++++++++++++++---- .../home/room/detail/RoomDetailFragment.kt | 24 ++- .../action/MessageSharedActionViewModel.kt | 4 +- 4 files changed, 173 insertions(+), 52 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b56cbef37a..636e848c3b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,8 @@ Improvements 🙌: Bugfix 🐛: - Fix crash when coming from a notification (#1601) - Fix Exception when importing keys (#1576) + - File isn't downloaded when another file with the same name already exists (#1578) + - saved images don't show up in gallery (#1324) Translations 🗣: - diff --git a/vector/src/main/java/im/vector/riotx/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/riotx/core/utils/ExternalApplicationsUtil.kt index d93d4e9089..2520f44f50 100644 --- a/vector/src/main/java/im/vector/riotx/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/riotx/core/utils/ExternalApplicationsUtil.kt @@ -17,29 +17,39 @@ package im.vector.riotx.core.utils import android.app.Activity +import android.app.DownloadManager import android.content.ActivityNotFoundException import android.content.ContentValues import android.content.Context import android.content.Intent import android.graphics.BitmapFactory +import android.media.MediaScannerConnection import android.net.Uri import android.os.Build +import android.os.Environment import android.provider.Browser import android.provider.MediaStore +import android.webkit.MimeTypeMap import android.widget.Toast import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsSession import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.fragment.app.Fragment +import im.vector.matrix.android.api.extensions.tryThis import im.vector.riotx.BuildConfig import im.vector.riotx.R import im.vector.riotx.features.notifications.NotificationUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import okio.buffer import okio.sink import okio.source import timber.log.Timber import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -301,42 +311,20 @@ fun shareMedia(context: Context, file: File, mediaMimeType: String?) { fun saveMedia(context: Context, file: File, title: String, mediaMimeType: String?, notificationUtils: NotificationUtils) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val externalContentUri: Uri - val values = ContentValues() - when { - mediaMimeType?.startsWith("image/") == true -> { - externalContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI - values.put(MediaStore.Images.Media.TITLE, title) - values.put(MediaStore.Images.Media.DISPLAY_NAME, title) - values.put(MediaStore.Images.Media.MIME_TYPE, mediaMimeType) - values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis()) - values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()) - } - mediaMimeType?.startsWith("video/") == true -> { - externalContentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI - values.put(MediaStore.Video.Media.TITLE, title) - values.put(MediaStore.Video.Media.DISPLAY_NAME, title) - values.put(MediaStore.Video.Media.MIME_TYPE, mediaMimeType) - values.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis()) - values.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis()) - } - mediaMimeType?.startsWith("audio/") == true -> { - externalContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI - values.put(MediaStore.Audio.Media.TITLE, title) - values.put(MediaStore.Audio.Media.DISPLAY_NAME, title) - values.put(MediaStore.Audio.Media.MIME_TYPE, mediaMimeType) - values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis()) - values.put(MediaStore.Audio.Media.DATE_TAKEN, System.currentTimeMillis()) - } - else -> { - externalContentUri = MediaStore.Downloads.EXTERNAL_CONTENT_URI - values.put(MediaStore.Downloads.TITLE, title) - values.put(MediaStore.Downloads.DISPLAY_NAME, title) - values.put(MediaStore.Downloads.MIME_TYPE, mediaMimeType) - values.put(MediaStore.Downloads.DATE_ADDED, System.currentTimeMillis()) - values.put(MediaStore.Downloads.DATE_TAKEN, System.currentTimeMillis()) - } + val values = ContentValues().apply { + put(MediaStore.Images.Media.TITLE, title) + put(MediaStore.Images.Media.DISPLAY_NAME, title) + put(MediaStore.Images.Media.MIME_TYPE, mediaMimeType) + put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis()) + put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()) } + val externalContentUri = when { + mediaMimeType?.startsWith("image/") == true -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI + mediaMimeType?.startsWith("video/") == true -> MediaStore.Video.Media.EXTERNAL_CONTENT_URI + mediaMimeType?.startsWith("audio/") == true -> MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + else -> MediaStore.Downloads.EXTERNAL_CONTENT_URI + } + val uri = context.contentResolver.insert(externalContentUri, values) if (uri == null) { Toast.makeText(context, R.string.error_saving_media_file, Toast.LENGTH_LONG).show() @@ -357,16 +345,70 @@ fun saveMedia(context: Context, file: File, title: String, mediaMimeType: String notificationUtils.showNotificationMessage("DL", uri.hashCode(), notification) } } - // TODO add notification? } else { - @Suppress("DEPRECATION") - Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE).also { mediaScanIntent -> - mediaScanIntent.data = Uri.fromFile(file) - context.sendBroadcast(mediaScanIntent) + saveMediaLegacy(context, mediaMimeType, title, file) + } +} + +@Suppress("DEPRECATION") +private fun saveMediaLegacy(context: Context, mediaMimeType: String?, title: String, file: File) { + val state = Environment.getExternalStorageState() + if (Environment.MEDIA_MOUNTED != state) { + context.toast(context.getString(R.string.error_saving_media_file)) + return + } + + GlobalScope.launch(Dispatchers.IO) { + val dest = when { + mediaMimeType?.startsWith("image/") == true -> Environment.DIRECTORY_PICTURES + mediaMimeType?.startsWith("video/") == true -> Environment.DIRECTORY_MOVIES + mediaMimeType?.startsWith("audio/") == true -> Environment.DIRECTORY_MUSIC + else -> Environment.DIRECTORY_DOWNLOADS + } + val downloadDir = Environment.getExternalStoragePublicDirectory(dest) + try { + val outputFilename = if (title.substringAfterLast('.', "").isEmpty()) { + val extension = mediaMimeType?.let { MimeTypeMap.getSingleton().getExtensionFromMimeType(it) } + "$title.$extension" + } else { + title + } + val savedFile = saveFileIntoLegacy(file, downloadDir, outputFilename) + if (savedFile != null) { + val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as? DownloadManager + downloadManager?.addCompletedDownload( + savedFile.name, + title, + true, + mediaMimeType ?: "application/octet-stream", + savedFile.absolutePath, + savedFile.length(), + true) + addToGallery(savedFile, mediaMimeType, context) + } + } catch (error: Throwable) { + GlobalScope.launch(Dispatchers.Main) { + context.toast(context.getString(R.string.error_saving_media_file)) + } } } } +private fun addToGallery(savedFile: File, mediaMimeType: String?, context: Context) { + // MediaScannerConnection provides a way for applications to pass a newly created or downloaded media file to the media scanner service. + var mediaConnection: MediaScannerConnection? = null + val mediaScannerConnectionClient: MediaScannerConnection.MediaScannerConnectionClient = object : MediaScannerConnection.MediaScannerConnectionClient { + override fun onMediaScannerConnected() { + mediaConnection?.scanFile(savedFile.path, mediaMimeType) + } + + override fun onScanCompleted(path: String, uri: Uri?) { + if (path == savedFile.path) mediaConnection?.disconnect() + } + } + mediaConnection = MediaScannerConnection(context, mediaScannerConnectionClient).apply { connect() } +} + /** * Open the play store to the provided application Id, default to this app */ @@ -381,3 +423,76 @@ fun openPlayStore(activity: Activity, appId: String = BuildConfig.APPLICATION_ID } } } + +// ============================================================================================================== +// Media utils +// ============================================================================================================== +/** + * Copy a file into a dstPath directory. + * The output filename can be provided. + * The output file is not overridden if it is already exist. + * + * ~~ This is copied from the old matrix sdk ~~ + * + * @param sourceFile the file source path + * @param dstDirPath the dst path + * @param outputFilename optional the output filename + * @param callback the asynchronous callback + */ +@Suppress("DEPRECATION") +fun saveFileIntoLegacy(sourceFile: File, dstDirPath: File, outputFilename: String?): File? { + // defines another name for the external media + val dstFileName: String + + // build a filename is not provided + if (null == outputFilename) { + // extract the file extension from the uri + val dotPos = sourceFile.name.lastIndexOf(".") + var fileExt = "" + if (dotPos > 0) { + fileExt = sourceFile.name.substring(dotPos) + } + dstFileName = "vector_" + System.currentTimeMillis() + fileExt + } else { + dstFileName = outputFilename + } + + var dstFile = File(dstDirPath, dstFileName) + + // if the file already exists, append a marker + if (dstFile.exists()) { + var baseFileName = dstFileName + var fileExt = "" + val lastDotPos = dstFileName.lastIndexOf(".") + if (lastDotPos > 0) { + baseFileName = dstFileName.substring(0, lastDotPos) + fileExt = dstFileName.substring(lastDotPos) + } + var counter = 1 + while (dstFile.exists()) { + dstFile = File(dstDirPath, "$baseFileName($counter)$fileExt") + counter++ + } + } + + // Copy source file to destination + var inputStream: FileInputStream? = null + var outputStream: FileOutputStream? = null + try { + dstFile.createNewFile() + inputStream = FileInputStream(sourceFile) + outputStream = FileOutputStream(dstFile) + val buffer = ByteArray(1024 * 10) + var len: Int + while (inputStream.read(buffer).also { len = it } != -1) { + outputStream.write(buffer, 0, len) + } + return dstFile + } catch (failure: Throwable) { + return null + } finally { + // Close resources + tryThis { inputStream?.close() } + tryThis { outputStream?.close() } + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index 2d7a26efb7..ea5376fd17 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -22,6 +22,7 @@ import android.content.DialogInterface import android.content.Intent import android.graphics.Typeface import android.net.Uri +import android.os.Build import android.os.Bundle import android.os.Parcelable import android.text.Spannable @@ -222,6 +223,7 @@ class RoomDetailFragment @Inject constructor( private const val AUDIO_CALL_PERMISSION_REQUEST_CODE = 1 private const val VIDEO_CALL_PERMISSION_REQUEST_CODE = 2 + private const val SAVE_ATTACHEMENT_REQUEST_CODE = 3 /** * Sanitize the display name. @@ -1194,17 +1196,12 @@ class RoomDetailFragment @Inject constructor( override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { if (allGranted(grantResults)) { when (requestCode) { -// PERMISSION_REQUEST_CODE_DOWNLOAD_FILE -> { -// val action = roomDetailViewModel.pendingAction -// if (action != null) { -// (action as? RoomDetailAction.DownloadFile) -// ?.messageFileContent -// ?.getFileName() -// ?.let { showSnackWithMessage(getString(R.string.downloading_file, it)) } -// roomDetailViewModel.pendingAction = null -// roomDetailViewModel.handle(action) -// } -// } + SAVE_ATTACHEMENT_REQUEST_CODE -> { + sharedActionViewModel.pendingAction?.let { + handleActions(it) + sharedActionViewModel.pendingAction = null + } + } PERMISSION_REQUEST_CODE_INCOMING_URI -> { val pendingUri = roomDetailViewModel.pendingUri if (pendingUri != null) { @@ -1357,6 +1354,11 @@ class RoomDetailFragment @Inject constructor( } private fun onSaveActionClicked(action: EventSharedAction.Save) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && + !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, SAVE_ATTACHEMENT_REQUEST_CODE)) { + sharedActionViewModel.pendingAction = action + return + } session.fileService().downloadFile( downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, id = action.eventId, diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageSharedActionViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageSharedActionViewModel.kt index 2e041fd2ea..ec5c49f814 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageSharedActionViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/action/MessageSharedActionViewModel.kt @@ -21,4 +21,6 @@ import javax.inject.Inject /** * Activity shared view model to handle message actions */ -class MessageSharedActionViewModel @Inject constructor() : VectorSharedActionViewModel<EventSharedAction>() +class MessageSharedActionViewModel @Inject constructor() : VectorSharedActionViewModel<EventSharedAction>() { + var pendingAction : EventSharedAction? = null +} From 85ee183e4f7a730e6aafb19613d53666157fbd1c Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Fri, 3 Jul 2020 12:28:32 +0200 Subject: [PATCH 07/11] Update vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt --- .../riotx/features/home/room/detail/RoomDetailFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index ea5376fd17..c941784842 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -1354,7 +1354,7 @@ class RoomDetailFragment @Inject constructor( } private fun onSaveActionClicked(action: EventSharedAction.Save) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q && + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, SAVE_ATTACHEMENT_REQUEST_CODE)) { sharedActionViewModel.pendingAction = action return From c4ad90696f782dcdf2e85c4fa5d125d52fff389c Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Fri, 3 Jul 2020 12:28:38 +0200 Subject: [PATCH 08/11] Update vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt --- .../riotx/features/home/room/detail/RoomDetailFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index c941784842..9d7ea58bb5 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -1355,7 +1355,7 @@ class RoomDetailFragment @Inject constructor( private fun onSaveActionClicked(action: EventSharedAction.Save) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q - !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, SAVE_ATTACHEMENT_REQUEST_CODE)) { + && !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, SAVE_ATTACHEMENT_REQUEST_CODE)) { sharedActionViewModel.pendingAction = action return } From e9ba7342d5d3ad5c07136de3bc3160378302b597 Mon Sep 17 00:00:00 2001 From: Tulir Asokan <tulir@maunium.net> Date: Fri, 3 Jul 2020 23:10:44 +0300 Subject: [PATCH 09/11] Fix reply fallback format Signed-off-by: Tulir Asokan <tulir@maunium.net> --- CHANGES.md | 1 + .../session/room/send/LocalEchoEventFactory.kt | 12 +++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c5cae43f67..9138eb6ad2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ Improvements 🙌: Bugfix 🐛: - Fix crash when coming from a notification (#1601) - Fix Exception when importing keys (#1576) + - Fix reply fallback leaking sender locale (#429) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt index 08dc4e80d8..370a81e409 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/LocalEchoEventFactory.kt @@ -177,7 +177,6 @@ internal class LocalEchoEventFactory @Inject constructor( val body = bodyForReply(originalEvent.getLastMessageContent(), originalEvent.root.getClearContent().toModel()) val replyFormatted = REPLY_PATTERN.format( permalink, - stringProvider.getString(R.string.message_reply_to_prefix), userLink, originalEvent.senderInfo.disambiguatedDisplayName, body.takeFormatted(), @@ -372,7 +371,6 @@ internal class LocalEchoEventFactory @Inject constructor( val body = bodyForReply(eventReplied.getLastMessageContent(), eventReplied.root.getClearContent().toModel()) val replyFormatted = REPLY_PATTERN.format( permalink, - stringProvider.getString(R.string.message_reply_to_prefix), userLink, userId, body.takeFormatted(), @@ -434,10 +432,10 @@ internal class LocalEchoEventFactory @Inject constructor( TextContent(content.body, formattedText) } } - MessageType.MSGTYPE_FILE -> return TextContent(stringProvider.getString(R.string.reply_to_a_file)) - MessageType.MSGTYPE_AUDIO -> return TextContent(stringProvider.getString(R.string.reply_to_an_audio_file)) - MessageType.MSGTYPE_IMAGE -> return TextContent(stringProvider.getString(R.string.reply_to_an_image)) - MessageType.MSGTYPE_VIDEO -> return TextContent(stringProvider.getString(R.string.reply_to_a_video)) + MessageType.MSGTYPE_FILE -> return TextContent("sent a file.") + MessageType.MSGTYPE_AUDIO -> return TextContent("sent an audio file.") + MessageType.MSGTYPE_IMAGE -> return TextContent("sent an image.") + MessageType.MSGTYPE_VIDEO -> return TextContent("sent a video.") else -> return TextContent(content?.body ?: "") } } @@ -489,6 +487,6 @@ internal class LocalEchoEventFactory @Inject constructor( // </blockquote> // </mx-reply> // No whitespace because currently breaks temporary formatted text to Span - const val REPLY_PATTERN = """<mx-reply><blockquote><a href="%s">%s</a><a href="%s">%s</a><br />%s</blockquote></mx-reply>%s""" + const val REPLY_PATTERN = """<mx-reply><blockquote><a href="%s">In reply to</a> <a href="%s">%s</a><br />%s</blockquote></mx-reply>%s""" } } From 51e63c5d1de60eabd1c095214ec1b20038667643 Mon Sep 17 00:00:00 2001 From: Tulir Asokan <tulir@maunium.net> Date: Fri, 3 Jul 2020 23:12:38 +0300 Subject: [PATCH 10/11] Remove unused reply fallback translations Signed-off-by: Tulir Asokan <tulir@maunium.net> --- matrix-sdk-android/src/main/res/values-ar/strings.xml | 6 ------ matrix-sdk-android/src/main/res/values-az/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-bg/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-ca/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-cs/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-de/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-el/strings.xml | 6 ------ matrix-sdk-android/src/main/res/values-eo/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-es-rMX/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-es/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-et/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-eu/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-fa/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-fi/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-fr/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-gl/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-hu/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-is/strings.xml | 1 - matrix-sdk-android/src/main/res/values-it/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-ja/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-ko/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-nl/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-nn/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-pl/strings.xml | 6 ------ matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-ru/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-sk/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-sq/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-uk/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-vls/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml | 7 ------- matrix-sdk-android/src/main/res/values/strings.xml | 7 ------- 33 files changed, 222 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-ar/strings.xml b/matrix-sdk-android/src/main/res/values-ar/strings.xml index ab48ea9934..e9aba1721a 100644 --- a/matrix-sdk-android/src/main/res/values-ar/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ar/strings.xml @@ -63,12 +63,6 @@ <string name="summary_user_sent_sticker">أرسل %1$s ملصقا.</string> <string name="notice_avatar_changed_too">(تغيّرت الصورة أيضا)</string> - <string name="message_reply_to_prefix">ردا على</string> - - <string name="reply_to_an_image">أرسل صورة.</string> - <string name="reply_to_a_video">أرسل فديوهًا.</string> - <string name="reply_to_an_audio_file">أرسل ملف صوت.</string> - <string name="reply_to_a_file">أرسل ملفًا.</string> <string name="room_displayname_invite_from">دعوة من %s</string> <string name="room_displayname_empty_room">غرفة فارغة</string> diff --git a/matrix-sdk-android/src/main/res/values-az/strings.xml b/matrix-sdk-android/src/main/res/values-az/strings.xml index c4347619d0..9c60dfafa7 100644 --- a/matrix-sdk-android/src/main/res/values-az/strings.xml +++ b/matrix-sdk-android/src/main/res/values-az/strings.xml @@ -52,8 +52,6 @@ <string name="notice_crypto_unable_to_decrypt">** Şifrəni aça bilmir: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib.</string> - <string name="message_reply_to_prefix">Cavab olaraq</string> - <string name="could_not_redact">Redaktə etmək olmur</string> <string name="unable_to_send_message">Mesaj göndərmək olmur</string> @@ -69,11 +67,6 @@ <string name="medium_email">Elektron poçt ünvanı</string> <string name="medium_phone_number">Telefon nömrəsi</string> - <string name="reply_to_an_image">şəkil göndərdi.</string> - <string name="reply_to_a_video">video göndərdi.</string> - <string name="reply_to_an_audio_file">səs faylı göndərdi.</string> - <string name="reply_to_a_file">fayl göndərdi.</string> - <string name="room_displayname_invite_from">%s-dən dəvət</string> <string name="room_displayname_room_invite">Otağa dəvət</string> diff --git a/matrix-sdk-android/src/main/res/values-bg/strings.xml b/matrix-sdk-android/src/main/res/values-bg/strings.xml index ea53f593fa..07d59852f3 100644 --- a/matrix-sdk-android/src/main/res/values-bg/strings.xml +++ b/matrix-sdk-android/src/main/res/values-bg/strings.xml @@ -63,13 +63,6 @@ <string name="summary_user_sent_sticker">%1$s изпрати стикер.</string> - <string name="message_reply_to_prefix">В отговор на</string> - - <string name="reply_to_an_image">изпрати снимка.</string> - <string name="reply_to_a_video">изпрати видео.</string> - <string name="reply_to_an_audio_file">изпрати аудио файл.</string> - <string name="reply_to_a_file">изпрати файл.</string> - <string name="room_displayname_invite_from">Покана от %s</string> <string name="room_displayname_room_invite">Покана за стая</string> <string name="room_displayname_two_members">%1$s и %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-ca/strings.xml b/matrix-sdk-android/src/main/res/values-ca/strings.xml index c59ee3b23d..2dc2206c8c 100644 --- a/matrix-sdk-android/src/main/res/values-ca/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ca/strings.xml @@ -76,11 +76,4 @@ <string name="summary_user_sent_sticker">%1$s ha enviat un adhesiu.</string> - <string name="message_reply_to_prefix">En resposta a</string> - - <string name="reply_to_an_image">ha enviat una imatge.</string> - <string name="reply_to_a_video">ha enviat un vídeo.</string> - <string name="reply_to_an_audio_file">ha enviat un fitxer d\'àudio.</string> - <string name="reply_to_a_file">ha enviat un fitxer.</string> - </resources> diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index 7e5081b6e9..44908c38f7 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -46,8 +46,6 @@ <string name="notice_crypto_unable_to_decrypt">** Nelze dešifrovat: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Odesílatelovo zařízení neposlalo klíče pro tuto zprávu.</string> - <string name="message_reply_to_prefix">V odpovědi na</string> - <string name="could_not_redact">Nelze vymazat</string> <string name="unable_to_send_message">Zprávu nelze odeslat</string> @@ -63,11 +61,6 @@ <string name="medium_email">E-mailová adresa</string> <string name="medium_phone_number">Telefonní číslo</string> - <string name="reply_to_an_image">odeslal obrázek.</string> - <string name="reply_to_a_video">odeslal video.</string> - <string name="reply_to_an_audio_file">odeslal zvukový soubor.</string> - <string name="reply_to_a_file">odeslal soubor.</string> - <string name="room_displayname_invite_from">Pozvání od %s</string> <string name="room_displayname_room_invite">Pozvání do místnosti</string> diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml index d19396d932..94da3369d8 100644 --- a/matrix-sdk-android/src/main/res/values-de/strings.xml +++ b/matrix-sdk-android/src/main/res/values-de/strings.xml @@ -73,13 +73,6 @@ <string name="summary_user_sent_sticker">%1$s sandte einen Sticker.</string> - <string name="message_reply_to_prefix">Als Antwort auf</string> - - <string name="reply_to_an_image">hat ein Bild gesendet.</string> - <string name="reply_to_a_video">hat ein Video gesendet.</string> - <string name="reply_to_an_audio_file">hat eine Audio-Datei gesendet.</string> - <string name="reply_to_a_file">sandte eine Datei.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Einladung von %s</string> <string name="room_displayname_room_invite">Raumeinladung</string> diff --git a/matrix-sdk-android/src/main/res/values-el/strings.xml b/matrix-sdk-android/src/main/res/values-el/strings.xml index 37eac5351e..9db4e91849 100644 --- a/matrix-sdk-android/src/main/res/values-el/strings.xml +++ b/matrix-sdk-android/src/main/res/values-el/strings.xml @@ -40,8 +40,6 @@ <string name="notice_crypto_unable_to_decrypt">** Αδυναμία αποκρυπτογράφησης: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα.</string> - <string name="message_reply_to_prefix">Προς απάντηση στο</string> - <string name="unable_to_send_message">Αποτυχία αποστολής μηνύματος</string> <string name="message_failed_to_upload">Αποτυχία αναφόρτωσης εικόνας</string> @@ -56,10 +54,6 @@ <string name="notice_voip_finished">Η VoIP διάσκεψη έληξε</string> <string name="notice_room_join">Ο/Η %1$s εισήλθε στο δωμάτιο</string> - <string name="reply_to_an_image">έστειλε μία εικόνα.</string> - <string name="reply_to_a_video">έστειλε ένα βίντεο.</string> - <string name="reply_to_an_audio_file">έστειλε ένα αρχείο ήχου.</string> - <string name="reply_to_a_file">έστειλε ένα αρχείο.</string> <string name="room_displayname_invite_from">Πρόσκληση από %s</string> <string name="room_displayname_room_invite">Πρόσκληση στο δωμάτιο</string> diff --git a/matrix-sdk-android/src/main/res/values-eo/strings.xml b/matrix-sdk-android/src/main/res/values-eo/strings.xml index 69600394ac..4a1e2c4c65 100644 --- a/matrix-sdk-android/src/main/res/values-eo/strings.xml +++ b/matrix-sdk-android/src/main/res/values-eo/strings.xml @@ -17,8 +17,6 @@ <string name="notice_crypto_unable_to_decrypt">** Ne eblas malĉifri: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">La aparato de la sendanto ne sendis al ni la ŝlosilojn por tiu mesaĝo.</string> - <string name="message_reply_to_prefix">Responde al</string> - <string name="summary_message">%1$s: %2$s</string> <string name="notice_display_name_set">%1$s ŝanĝis sian vidigan nomon al %2$s</string> <string name="notice_display_name_changed_from">%1$s ŝanĝis sian vidigan nomon de %2$s al %3$s</string> @@ -62,11 +60,6 @@ <string name="medium_email">Retpoŝtadreso</string> <string name="medium_phone_number">Telefonnumero</string> - <string name="reply_to_an_image">sendis bildon.</string> - <string name="reply_to_a_video">sendis filmon.</string> - <string name="reply_to_an_audio_file">sendis sondosieron.</string> - <string name="reply_to_a_file">sendis dosieron.</string> - <string name="room_displayname_invite_from">Invito de %s</string> <string name="room_displayname_room_invite">Ĉambra invito</string> diff --git a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml b/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml index 56cbe6ace5..35b7bfc829 100644 --- a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml +++ b/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml @@ -73,13 +73,6 @@ <string name="summary_user_sent_sticker">%1$s envió una calcomanía.</string> - <string name="message_reply_to_prefix">En respuesta a</string> - - <string name="reply_to_an_image">envió una imagen.</string> - <string name="reply_to_a_video">envió un video.</string> - <string name="reply_to_an_audio_file">envió un archivo de audio.</string> - <string name="reply_to_a_file">envió un archivo.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Invitación de %s</string> <string name="room_displayname_room_invite">Invitación de Sala</string> diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml index 69f02d2ef4..3c019b3b80 100644 --- a/matrix-sdk-android/src/main/res/values-es/strings.xml +++ b/matrix-sdk-android/src/main/res/values-es/strings.xml @@ -73,13 +73,6 @@ <string name="summary_user_sent_sticker">%1$s envió una pegatina.</string> - <string name="message_reply_to_prefix">En respuesta a</string> - - <string name="reply_to_an_image">envió una imagen.</string> - <string name="reply_to_a_video">envió un vídeo.</string> - <string name="reply_to_an_audio_file">envió un archivo de audio.</string> - <string name="reply_to_a_file">envió un archivo.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Invitación de %s</string> <string name="room_displayname_room_invite">Invitación a Sala</string> diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml index 3a5a1ff767..2536500247 100644 --- a/matrix-sdk-android/src/main/res/values-et/strings.xml +++ b/matrix-sdk-android/src/main/res/values-et/strings.xml @@ -50,8 +50,6 @@ <string name="notice_crypto_unable_to_decrypt">** Ei õnnestu dekrüptida: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid.</string> - <string name="message_reply_to_prefix">Vastuseks kasutajale</string> - <string name="could_not_redact">Ei saanud muuta sõnumit</string> <string name="unable_to_send_message">Sõnumi saatmine ei õnnestunud</string> @@ -67,11 +65,6 @@ <string name="medium_email">E-posti aadress</string> <string name="medium_phone_number">Telefoninumber</string> - <string name="reply_to_an_image">saatis pildi.</string> - <string name="reply_to_a_video">saatis video.</string> - <string name="reply_to_an_audio_file">saatis helifaili.</string> - <string name="reply_to_a_file">saatis faili.</string> - <string name="room_displayname_invite_from">Kutse kasutajalt %s</string> <string name="room_displayname_room_invite">Kutse jututuppa</string> diff --git a/matrix-sdk-android/src/main/res/values-eu/strings.xml b/matrix-sdk-android/src/main/res/values-eu/strings.xml index 7938db3cbd..1a5c81fe5e 100644 --- a/matrix-sdk-android/src/main/res/values-eu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-eu/strings.xml @@ -63,13 +63,6 @@ <string name="summary_user_sent_sticker">%1$s erabiltzaileak eranskailu bat bidali du.</string> - <string name="message_reply_to_prefix">Honi erantzunez</string> - - <string name="reply_to_an_image">irudi bat bidali du.</string> - <string name="reply_to_a_video">bideo bat bidali du.</string> - <string name="reply_to_an_audio_file">audio fitxategi bat bidali du.</string> - <string name="reply_to_a_file">fitxategi bat bidali du.</string> - <string name="room_displayname_invite_from">%s gelarako gonbidapena</string> <string name="room_displayname_room_invite">Gela gonbidapena</string> <string name="room_displayname_two_members">%1$s eta %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml index 7addf22ca8..18d8578e54 100644 --- a/matrix-sdk-android/src/main/res/values-fa/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fa/strings.xml @@ -51,8 +51,6 @@ <string name="notice_crypto_unable_to_decrypt">** ناتوان در رمزگشایی: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است.</string> - <string name="message_reply_to_prefix">در پاسخ به</string> - <string name="unable_to_send_message">ناتوان در فرستادن پیام</string> <string name="message_failed_to_upload">شکست در بارگذاری تصویر</string> @@ -67,11 +65,6 @@ <string name="medium_email">نشانی رایانامه</string> <string name="medium_phone_number">شماره تلفن</string> - <string name="reply_to_an_image">تصویری فرستاد.</string> - <string name="reply_to_a_video">ویدیویی فرستاد.</string> - <string name="reply_to_an_audio_file">پروندهای صوتی فرستاد.</string> - <string name="reply_to_a_file">پروندهای فرستاد.</string> - <string name="room_displayname_invite_from">دعوت از %s</string> <string name="room_displayname_room_invite">دعوت اتاق</string> diff --git a/matrix-sdk-android/src/main/res/values-fi/strings.xml b/matrix-sdk-android/src/main/res/values-fi/strings.xml index 06820183fd..078769942c 100644 --- a/matrix-sdk-android/src/main/res/values-fi/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fi/strings.xml @@ -70,13 +70,6 @@ <string name="summary_user_sent_sticker">%1$s lähetti tarran.</string> - <string name="message_reply_to_prefix">Vastauksena käyttäjälle</string> - - <string name="reply_to_an_image">oli lähettänyt kuvan.</string> - <string name="reply_to_a_video">lähetti videon.</string> - <string name="reply_to_an_audio_file">lähetti äänitiedoston.</string> - <string name="reply_to_a_file">lähetti tiedoston.</string> - <plurals name="room_displayname_three_and_more_members"> <item quantity="one">%1$s ja yksi muu</item> <item quantity="other">%1$s ja %2$d muuta</item> diff --git a/matrix-sdk-android/src/main/res/values-fr/strings.xml b/matrix-sdk-android/src/main/res/values-fr/strings.xml index a744c35b99..aad3bd1afb 100644 --- a/matrix-sdk-android/src/main/res/values-fr/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fr/strings.xml @@ -63,13 +63,6 @@ <string name="summary_user_sent_sticker">%1$s a envoyé un sticker.</string> - <string name="message_reply_to_prefix">En réponse à</string> - - <string name="reply_to_an_image">a envoyé une image.</string> - <string name="reply_to_a_video">a envoyé une vidéo.</string> - <string name="reply_to_an_audio_file">a envoyé un fichier audio.</string> - <string name="reply_to_a_file">a envoyé un fichier.</string> - <string name="room_displayname_invite_from">Invitation de %s</string> <string name="room_displayname_room_invite">Invitation au salon</string> <string name="room_displayname_empty_room">Salon vide</string> diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml index 907730f154..77868e7df3 100644 --- a/matrix-sdk-android/src/main/res/values-gl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-gl/strings.xml @@ -50,8 +50,6 @@ <string name="notice_crypto_unable_to_decrypt">** Imposíbel descifrar: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">O dispositivo do que envía non enviou as chaves desta mensaxe.</string> - <string name="message_reply_to_prefix">Respondéndolle a</string> - <string name="could_not_redact">Non se puido redactar</string> <string name="unable_to_send_message">Non foi posíbel enviar a mensaxe</string> @@ -64,11 +62,6 @@ <string name="medium_phone_number">Número de teléfono</string> - <string name="reply_to_an_image">Responder a</string> - <string name="reply_to_a_video">enviar un vídeo.</string> - <string name="reply_to_an_audio_file">enviar un ficheiro de son.</string> - <string name="reply_to_a_file">enviar un ficheiro.</string> - <string name="room_displayname_two_members">%1$s e %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-hu/strings.xml b/matrix-sdk-android/src/main/res/values-hu/strings.xml index 03d52bef44..35f35eaecd 100644 --- a/matrix-sdk-android/src/main/res/values-hu/strings.xml +++ b/matrix-sdk-android/src/main/res/values-hu/strings.xml @@ -62,13 +62,6 @@ <string name="summary_user_sent_sticker">%1$s küldött egy matricát.</string> - <string name="message_reply_to_prefix">Válasz erre:</string> - - <string name="reply_to_an_image">képet küldött.</string> - <string name="reply_to_a_video">videót küldött.</string> - <string name="reply_to_an_audio_file">hangfájlt küldött.</string> - <string name="reply_to_a_file">fájlt küldött.</string> - <string name="room_displayname_invite_from">Meghívó tőle: %s</string> <string name="room_displayname_room_invite">Meghívó egy szobába</string> <string name="room_displayname_two_members">%1$s és %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-is/strings.xml b/matrix-sdk-android/src/main/res/values-is/strings.xml index 01954ae2b4..ecf19edb8a 100644 --- a/matrix-sdk-android/src/main/res/values-is/strings.xml +++ b/matrix-sdk-android/src/main/res/values-is/strings.xml @@ -24,7 +24,6 @@ <string name="notice_avatar_changed_too">(einnig var skipt um auðkennismynd)</string> <string name="notice_crypto_unable_to_decrypt">** Mistókst að afkóða: %s **</string> - <string name="message_reply_to_prefix">Sem svar til</string> <string name="unable_to_send_message">Gat ekki sent skilaboð</string> diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml index ec86122313..42328b836f 100644 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ b/matrix-sdk-android/src/main/res/values-it/strings.xml @@ -62,13 +62,6 @@ <string name="summary_user_sent_sticker">%1$s ha inviato un adesivo.</string> - <string name="message_reply_to_prefix">In risposta a</string> - - <string name="reply_to_an_image">inviata un\'immagine.</string> - <string name="reply_to_a_video">inviato un video.</string> - <string name="reply_to_an_audio_file">inviato un file audio.</string> - <string name="reply_to_a_file">inviato un file.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Invito da %s</string> <string name="room_displayname_room_invite">Invito nella stanza</string> diff --git a/matrix-sdk-android/src/main/res/values-ja/strings.xml b/matrix-sdk-android/src/main/res/values-ja/strings.xml index b72d1a13ca..366c743494 100644 --- a/matrix-sdk-android/src/main/res/values-ja/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ja/strings.xml @@ -56,8 +56,6 @@ <string name="notice_crypto_unable_to_decrypt">** 解読できません: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">送信者の端末からこのメッセージのキーが送信されていません。</string> - <string name="message_reply_to_prefix">に返信</string> - <string name="could_not_redact">修正できませんでした</string> <string name="unable_to_send_message">メッセージを送信できません</string> @@ -73,9 +71,4 @@ <string name="medium_email">メールアドレス</string> <string name="medium_phone_number">電話番号</string> - <string name="reply_to_an_image">画像を送信しました。</string> - <string name="reply_to_a_video">動画を送りました。</string> - <string name="reply_to_an_audio_file">音声ファイルを送信しました。</string> - <string name="reply_to_a_file">ファイルを送信しました。</string> - </resources> diff --git a/matrix-sdk-android/src/main/res/values-ko/strings.xml b/matrix-sdk-android/src/main/res/values-ko/strings.xml index 68e94bb641..88c5e7d618 100644 --- a/matrix-sdk-android/src/main/res/values-ko/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ko/strings.xml @@ -52,8 +52,6 @@ <string name="notice_crypto_unable_to_decrypt">** 암호를 복호화할 수 없음: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">발신인의 기기에서 이 메시지의 키를 보내지 않았습니다.</string> - <string name="message_reply_to_prefix">관련 대화</string> - <string name="could_not_redact">검열할 수 없습니다</string> <string name="unable_to_send_message">메시지를 보낼 수 없습니다</string> @@ -69,11 +67,6 @@ <string name="medium_email">이메일 주소</string> <string name="medium_phone_number">전화번호</string> - <string name="reply_to_an_image">사진을 보냈습니다.</string> - <string name="reply_to_a_video">동영상을 보냈습니다.</string> - <string name="reply_to_an_audio_file">오디오 파일을 보냈습니다.</string> - <string name="reply_to_a_file">파일을 보냈습니다.</string> - <string name="room_displayname_invite_from">%s에서 초대함</string> <string name="room_displayname_room_invite">방 초대</string> diff --git a/matrix-sdk-android/src/main/res/values-nl/strings.xml b/matrix-sdk-android/src/main/res/values-nl/strings.xml index d08b3c7845..22eb61f109 100644 --- a/matrix-sdk-android/src/main/res/values-nl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nl/strings.xml @@ -71,13 +71,6 @@ <string name="summary_user_sent_sticker">%1$s heeft een sticker gestuurd.</string> - <string name="message_reply_to_prefix">Als antwoord op</string> - - <string name="reply_to_an_image">heeft een afbeelding gestuurd.</string> - <string name="reply_to_a_video">heeft een video gestuurd.</string> - <string name="reply_to_an_audio_file">heeft een audiobestand gestuurd.</string> - <string name="reply_to_a_file">heeft een bestand gestuurd.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Uitnodiging van %s</string> <string name="room_displayname_room_invite">Gespreksuitnodiging</string> diff --git a/matrix-sdk-android/src/main/res/values-nn/strings.xml b/matrix-sdk-android/src/main/res/values-nn/strings.xml index edc50a5a0e..601cf4c9df 100644 --- a/matrix-sdk-android/src/main/res/values-nn/strings.xml +++ b/matrix-sdk-android/src/main/res/values-nn/strings.xml @@ -49,8 +49,6 @@ <string name="notice_crypto_unable_to_decrypt">** Fekk ikkje til å dekryptera: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi.</string> - <string name="message_reply_to_prefix">Som svar til</string> - <string name="could_not_redact">Kunde ikkje gjera um</string> <string name="unable_to_send_message">Fekk ikkje å senda meldingi</string> @@ -64,11 +62,6 @@ <string name="medium_email">Epostadresse</string> <string name="medium_phone_number">Telefonnummer</string> - <string name="reply_to_an_image">sende eit bilæte.</string> - <string name="reply_to_a_video">sende ein video.</string> - <string name="reply_to_an_audio_file">sende ei ljodfil.</string> - <string name="reply_to_a_file">sende ei fil.</string> - <string name="room_displayname_invite_from">Innbjoding frå %s</string> <string name="room_displayname_room_invite">Rominnbjoding</string> <string name="room_displayname_two_members">%1$s og %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-pl/strings.xml b/matrix-sdk-android/src/main/res/values-pl/strings.xml index 4e1d256788..dc380516b7 100644 --- a/matrix-sdk-android/src/main/res/values-pl/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pl/strings.xml @@ -42,7 +42,6 @@ <string name="notice_room_withdraw">%1$s wycofał(a) zaproszenie %2$s</string> <string name="notice_answered_call">%s odebrał(a) połączenie.</string> <string name="notice_avatar_changed_too">(awatar też został zmieniony)</string> - <string name="message_reply_to_prefix">W odpowiedzi do</string> <string name="room_displayname_invite_from">Zaproszenie od %s</string> <string name="room_displayname_room_invite">Zaproszenie do pokoju</string> @@ -76,11 +75,6 @@ <string name="could_not_redact">Nie można zredagować</string> <string name="room_error_join_failed_empty_room">Obecnie nie jest możliwe ponowne dołączenie do pustego pokoju.</string> - <string name="reply_to_an_image">wyślij zdjęcie.</string> - <string name="reply_to_a_video">wyślij wideo.</string> - <string name="reply_to_an_audio_file">wyślij plik audio.</string> - <string name="reply_to_a_file">wyślij plik.</string> - <string name="notice_event_redacted">Wiadomość usunięta</string> <string name="notice_event_redacted_by">Wiadomość usunięta przez %1$s</string> <string name="notice_event_redacted_with_reason">Wiadomość usunięta [powód: %1$s]</string> diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml index 17e7ae33a1..a573c659a6 100644 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml @@ -74,13 +74,6 @@ <string name="summary_user_sent_sticker">%1$s enviou um sticker.</string> - <string name="message_reply_to_prefix">Em resposta a</string> - - <string name="reply_to_an_image">enviou uma imagem.</string> - <string name="reply_to_a_video">enviou um vídeo.</string> - <string name="reply_to_an_audio_file">enviou um arquivo de áudio.</string> - <string name="reply_to_a_file">enviou um arquivo.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Convite de %s</string> <string name="room_displayname_room_invite">Convite para sala</string> diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml index 3e20353b7d..bd0dcef3dd 100644 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ru/strings.xml @@ -73,13 +73,6 @@ <string name="summary_user_sent_sticker">%1$s отправил стикер.</string> - <string name="message_reply_to_prefix">В ответ на</string> - - <string name="reply_to_an_image">отправил изображение.</string> - <string name="reply_to_a_video">отправил видео.</string> - <string name="reply_to_an_audio_file">отправил аудиофайл.</string> - <string name="reply_to_a_file">отправил файл.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Приглашение от %s</string> <string name="room_displayname_room_invite">Приглашение в комнату</string> diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml index c6eb6b896b..8aec8fccf9 100644 --- a/matrix-sdk-android/src/main/res/values-sk/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sk/strings.xml @@ -62,13 +62,6 @@ <string name="summary_user_sent_sticker">%1$s poslal nálepku.</string> - <string name="message_reply_to_prefix">Odpoveď na</string> - - <string name="reply_to_an_image">odoslal obrázok.</string> - <string name="reply_to_a_video">odoslal video.</string> - <string name="reply_to_an_audio_file">odoslal zvukový súbor.</string> - <string name="reply_to_a_file">Odoslal súbor.</string> - <string name="room_displayname_invite_from">Pozvanie od %s</string> <string name="room_displayname_room_invite">Pozvanie do miestnosti</string> <string name="room_displayname_two_members">%1$s a %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 853d4729af..e63e28288f 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -34,8 +34,6 @@ <string name="notice_crypto_unable_to_decrypt">** S’arrihet të shfshehtëzohet: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh.</string> - <string name="message_reply_to_prefix">Në përgjigje të</string> - <string name="could_not_redact">S’u redaktua dot</string> <string name="unable_to_send_message">S’arrihet të dërgohet mesazh</string> @@ -51,11 +49,6 @@ <string name="medium_email">Adresë email</string> <string name="medium_phone_number">Numër telefoni</string> - <string name="reply_to_an_image">dërgoi një figurë.</string> - <string name="reply_to_a_video">dërgoi një video.</string> - <string name="reply_to_an_audio_file">dërgoi një kartelë audio.</string> - <string name="reply_to_a_file">dërgoi një kartelë.</string> - <string name="room_displayname_invite_from">Ftesë nga %s</string> <string name="room_displayname_room_invite">Ftesë Dhome</string> diff --git a/matrix-sdk-android/src/main/res/values-uk/strings.xml b/matrix-sdk-android/src/main/res/values-uk/strings.xml index bf83e39d72..eb5071f190 100644 --- a/matrix-sdk-android/src/main/res/values-uk/strings.xml +++ b/matrix-sdk-android/src/main/res/values-uk/strings.xml @@ -56,8 +56,6 @@ <string name="notice_crypto_unable_to_decrypt">** Неможливо розшифрувати: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">Пристрій відправника не надіслав нам ключ для цього повідомлення.</string> - <string name="message_reply_to_prefix">У відповідь на</string> - <string name="could_not_redact">Неможливо відредагувати</string> <string name="unable_to_send_message">Не вдалося надіслати повідомлення</string> @@ -71,11 +69,6 @@ <string name="medium_email">Адреса електронної пошти</string> <string name="medium_phone_number">Номер телефону</string> - <string name="reply_to_an_image">надіслав зображення.</string> - <string name="reply_to_a_video">надіслав відео.</string> - <string name="reply_to_an_audio_file">надіслав аудіо файл.</string> - <string name="reply_to_a_file">надіслав файл.</string> - <plurals name="room_displayname_three_and_more_members"> <item quantity="one">%1$s та 1 інший</item> <item quantity="few">%1$s та %2$d інші</item> diff --git a/matrix-sdk-android/src/main/res/values-vls/strings.xml b/matrix-sdk-android/src/main/res/values-vls/strings.xml index dad88788e4..5c9132ed35 100644 --- a/matrix-sdk-android/src/main/res/values-vls/strings.xml +++ b/matrix-sdk-android/src/main/res/values-vls/strings.xml @@ -50,8 +50,6 @@ <string name="notice_crypto_unable_to_decrypt">** Kun nie ountsleuteln: %s **</string> <string name="notice_crypto_error_unkwown_inbound_session_id">’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd.</string> - <string name="message_reply_to_prefix">Als antwoord ip</string> - <string name="could_not_redact">Kosteg nie verwyderd wordn</string> <string name="unable_to_send_message">Kosteg ’t bericht nie verzendn</string> @@ -67,11 +65,6 @@ <string name="medium_email">E-mailadresse</string> <string name="medium_phone_number">Telefongnumero</string> - <string name="reply_to_an_image">èt e fotootje gesteurd.</string> - <string name="reply_to_a_video">èt e filmtje gesteurd.</string> - <string name="reply_to_an_audio_file">èt e geluudsfragment gesteurd.</string> - <string name="reply_to_a_file">èt e bestand gesteurd.</string> - <string name="room_displayname_invite_from">Uutnodigienge van %s</string> <string name="room_displayname_room_invite">Gespreksuutnodigienge</string> diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml index 0c0953c92d..48dbd27a1b 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml @@ -63,13 +63,6 @@ <string name="summary_message">%1$s:%2$s</string> <string name="summary_user_sent_sticker">%1$s 发送了一张贴纸。</string> - <string name="reply_to_an_image">发送了一张图片。</string> - <string name="reply_to_a_video">发送了一个视频。</string> - <string name="reply_to_an_audio_file">发送了一段音频。</string> - <string name="reply_to_a_file">发送了一个文件。</string> - - <string name="message_reply_to_prefix">回复</string> - <string name="room_displayname_empty_room">空聊天室</string> <string name="room_displayname_invite_from">来自 %s 的邀请</string> <string name="room_displayname_room_invite">聊天室邀请</string> diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml index ca2fd79aa2..f3da62dccc 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -62,13 +62,6 @@ <string name="summary_user_sent_sticker">%1$s 傳送了一張貼圖。</string> - <string name="message_reply_to_prefix">回覆</string> - - <string name="reply_to_an_image">傳送了圖片。</string> - <string name="reply_to_a_video">傳送了影片。</string> - <string name="reply_to_an_audio_file">傳送了音訊檔案。</string> - <string name="reply_to_a_file">傳送了檔案。</string> - <string name="room_displayname_invite_from">來自%s 的邀請</string> <string name="room_displayname_room_invite">聊天室邀請</string> <string name="room_displayname_two_members">%1$s 和 %2$s</string> diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index 9b7fa01eaf..0dc64c1b4b 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -112,7 +112,6 @@ <string name="notice_crypto_error_unkwown_inbound_session_id">The sender\'s device has not sent us the keys for this message.</string> <!-- Messages --> - <string name="message_reply_to_prefix">In reply to</string> <!-- Room Screen --> <string name="could_not_redact">Could not redact</string> @@ -139,12 +138,6 @@ <string name="medium_email">Email address</string> <string name="medium_phone_number">Phone number</string> - <!-- Reply to --> - <string name="reply_to_an_image">sent an image.</string> - <string name="reply_to_a_video">sent a video.</string> - <string name="reply_to_an_audio_file">sent an audio file.</string> - <string name="reply_to_a_file">sent a file.</string> - <!-- Room display name --> <string name="room_displayname_invite_from">Invite from %s</string> <string name="room_displayname_room_invite">Room Invite</string> From 38c54e0f2ccb90ed6fe8dcabf26d2020b5ebb983 Mon Sep 17 00:00:00 2001 From: Valere <valeref@matrix.org> Date: Mon, 6 Jul 2020 18:51:39 +0200 Subject: [PATCH 11/11] QuickFix / crash when starting in airplane mode --- .../matrix/android/internal/crypto/DefaultCryptoService.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt index 02197fb5f3..0af7a2d36d 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt @@ -98,6 +98,7 @@ import im.vector.matrix.android.internal.session.sync.model.SyncResponse import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.TaskThread import im.vector.matrix.android.internal.task.configureWith +import im.vector.matrix.android.internal.task.launchToCallback import im.vector.matrix.android.internal.util.JsonCanonicalizer import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers import im.vector.matrix.android.internal.util.fetchCopied @@ -340,7 +341,7 @@ internal class DefaultCryptoService @Inject constructor( } fun ensureDevice() { - cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { + cryptoCoroutineScope.launchToCallback(coroutineDispatchers.crypto, NoOpMatrixCallback()) { // Open the store cryptoStore.open() // TODO why do that everytime? we should mark that it was done