Merge branch 'develop' into feature/vault-format-8

This commit is contained in:
Julian Raufelder 2021-04-14 16:12:37 +02:00
commit 38ef3b2f7f
No known key found for this signature in database
GPG Key ID: 17EE71F6634E381D
15 changed files with 56 additions and 36 deletions

View File

@ -15,7 +15,7 @@ buildscript {
classpath 'com.fernandocejas.frodo:frodo-plugin:0.8.3'
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.0.0"
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1"
}
}
@ -42,7 +42,7 @@ allprojects {
ext {
androidApplicationId = 'org.cryptomator'
androidVersionCode = getVersionCode()
androidVersionName = '1.5.14-SNAPSHOT'
androidVersionName = '1.6.0-SNAPSHOT'
}
repositories {
mavenCentral()

View File

@ -55,7 +55,7 @@ ext {
googleApiServicesVersion = 'v3-rev197-1.25.0'
googlePlayServicesVersion = '19.0.0'
googleClientVersion = '1.31.3'
googleClientVersion = '1.31.4'
msgraphVersion = '2.10.0'
msaAuthVersion = '0.10.0'
@ -70,7 +70,7 @@ ext {
jUnit4Version = '4.13.1'
assertJVersion = '1.7.1'
mockitoVersion = '3.9.0'
mockitoInlineVersion = '3.8.0'
mockitoInlineVersion = '3.9.0'
hamcrestVersion = '1.3'
dexmakerVersion = '1.0'
espressoVersion = '3.3.0'
@ -85,7 +85,7 @@ ext {
androidxViewpagerVersion = '1.0.0'
androidxSwiperefreshVersion = '1.1.0'
androidxPreferenceVersion = '1.0.0' // 1.1.0 and 1.1.2 does have a bug with the text size
androidxRecyclerViewVersion = '1.1.0'
androidxRecyclerViewVersion = '1.2.0'
androidxDocumentfileVersion = '1.0.1'
androidxBiometricVersion = '1.1.0'
androidxTestCoreVersion = '1.3.0'

View File

@ -20,4 +20,4 @@ S3_SECRET_ACCESS_KEY=
SLACK_URL=
GITHUB_TOKEN=
GITHUB_PERSONAL_ACCESS_TOKEN=

View File

@ -32,7 +32,7 @@ platform :android do |options|
slack(
default_payloads: [], # reduce the notification to the minimum
message: ":rocket: Successfully deployed #{version} with code #{build} to the Play Store :cryptomator:",
message: ":rocket: Successfully deployed #{version} with code #{build} :cryptomator:",
payload: {
"Changes" => File.read(release_note_path_en)
}

View File

@ -1,2 +1,4 @@
- Möglichkeit neu erstellte Videos über den automatischen Upload hochzuladen hinzugefügt
- Möglichkeit das Entsperren eines Tresors abzubrechen hinzugefügt
- Native pCloud-Unterstützung hinzugefügt (großen Dank an Manu für die Implementierung)
- App-Absturz beim Wiederherstellen von Cryptomator aus einem Backup behoben
- Verbesserte Anzeige von langen Einstellungen
- Verbessertes Löschen des letzten Bildes über die Vorschau. Springt jetzt zurück in die Tresor-Inhaltsliste

View File

@ -1,2 +1,4 @@
- Added possibility to upload newly created videos via automatic upload as well
- Added possibility to cancel unlocking a vault
- Added pCloud native support (thanks to Manu for this huge contribution)
- Fixed app crash when restoring Cryptomator from a backup
- Enhanced display of long settings
- Enhanced deletion of the last image via the preview. Now jumps back to the vault contents list

View File

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

View File

@ -1,4 +1,6 @@
<ul>
<li>Added possibility to upload newly created videos via automatic upload as well</li>
<li>Added possibility to cancel unlocking a vault</li>
<li>Added pCloud native support (thanks to Manu for this huge contribution)</li>
<li>Fixed app crash when restoring Cryptomator from a backup</li>
<li>Enhanced display of long settings</li>
<li>Enhanced deletion of the last image via the preview. Now jumps back to the vault contents list</li>
</ul>

View File

@ -850,8 +850,7 @@ class BrowseFilesPresenter @Inject constructor( //
private fun createNewDocumentUri(parentUri: Uri, fileName: String): Uri {
val mimeType = mimeTypes.fromFilename(fileName) //
.orElse(MimeType.APPLICATION_OCTET_STREAM)
val newDocumentUri: Uri?
newDocumentUri = try {
return try {
DocumentsContract.createDocument( //
context().contentResolver, //
parentUri, //
@ -859,11 +858,7 @@ class BrowseFilesPresenter @Inject constructor( //
fileName)
} catch (e: FileNotFoundException) {
throw NoSuchCloudFileException(fileName)
}
if (newDocumentUri == null) {
throw IllegalFileNameException()
}
return newDocumentUri
} ?: throw IllegalFileNameException()
}
@Callback
@ -1093,7 +1088,7 @@ class BrowseFilesPresenter @Inject constructor( //
fun openFileFinished() {
try {
// necessary see https://gitlab.skymatic.de/cryptomator/android/-/issues/569
// necessary see https://community.cryptomator.org/t/android-tabelle-nach-upload-unlesbar/6550
Thread.sleep(500)
} catch (e: InterruptedException) {
Timber.tag("BrowseFilesPresenter").e(e, "Failed to sleep after resuming editing, necessary for google office apps")
@ -1107,12 +1102,17 @@ class BrowseFilesPresenter @Inject constructor( //
context().revokeUriPermission(uriToOpenedFile, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
uriToOpenedFile?.let {
val hashAfterEdit = calculateDigestFromUri(it)
if (hashAfterEdit.isPresent && openedCloudFileMd5.isPresent //
&& Arrays.equals(hashAfterEdit.get(), openedCloudFileMd5.get())) {
Timber.tag("BrowseFilesPresenter").i("Opened app finished, file not changed")
} else {
uploadChangedFile()
try {
val hashAfterEdit = calculateDigestFromUri(it)
if (hashAfterEdit.isPresent && openedCloudFileMd5.isPresent //
&& Arrays.equals(hashAfterEdit.get(), openedCloudFileMd5.get())) {
Timber.tag("BrowseFilesPresenter").i("Opened app finished, file not changed")
} else {
uploadChangedFile()
}
} catch (e: FileNotFoundException) {
Timber.tag("BrowseFilesPresenter").e(e, "Failed to read back changes, file isn't present anymore")
Toast.makeText(context(), R.string.error_file_not_found_after_opening_using_3party, Toast.LENGTH_LONG).show()
}
}
}
@ -1159,6 +1159,7 @@ class BrowseFilesPresenter @Inject constructor( //
openWritableFileNotification.ifPresent { obj: OpenWritableFileNotification -> obj.hide() }
}
@Throws(FileNotFoundException::class)
private fun calculateDigestFromUri(uri: Uri): Optional<ByteArray> {
val digest = MessageDigest.getInstance("MD5")
DigestInputStream(context().contentResolver.openInputStream(uri), digest).use { dis ->

View File

@ -6,6 +6,7 @@ import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.widget.Toast
import org.cryptomator.data.cloud.crypto.CryptoCloud
import org.cryptomator.data.util.NetworkConnectionCheck
import org.cryptomator.domain.Cloud
@ -122,7 +123,13 @@ class VaultListPresenter @Inject constructor( //
val intent = Intent(context(), LicenseCheckActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
intent.data = Uri.parse(String.format("app://cryptomator/%s", license))
context().startActivity(intent)
try {
context().startActivity(intent)
} catch (e: ActivityNotFoundException) {
Toast.makeText(context(), "Please contact the support.", Toast.LENGTH_LONG).show()
finish()
}
}
})
}

View File

@ -102,7 +102,6 @@
<string name="screen_share_files_section_location">Speicherort</string>
<string name="screen_share_files_save_button_text">Speichern</string>
<string name="screen_share_files_msg_success">Dateien verschlüsselt</string>
<string name="screen_share_files_new_text_file">text.txt</string>
<!-- ## screen: choose cloud service -->
<string name="screen_choose_cloud_service_title">Cloud-Dienst</string>
<string name="screen_choose_cloud_service_subtitle_add_existing_vault">Neuen Tresor anlegen</string>
@ -216,7 +215,7 @@
<string name="dialog_replace_positive_button_single_file_exists">Ersetzen</string>
<string name="dialog_replace_msg_single_file_exists">Eine Datei names \'%1$s\' existiert bereits. Soll diese ersetzt werden?</string>
<string name="dialog_replace_msg_all_files_exists">Alle Dateien existieren bereits. Sollen diese ersetzt werden?</string>
<string name="dialog_replace_msg_some_files_exists">%d Dateien existieren bereits. Sollen diese ersetzt werden?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d Dateien existieren bereits. Sollen diese ersetzt werden?</string>
<string name="dialog_replace_title_single_file_exists">Datei ersetzen?</string>
<string name="dialog_replace_title_multiple_files_exist">Dateien ersetzen?</string>
<string name="dialog_unable_to_share_title">Teilen nicht möglich</string>
@ -231,8 +230,7 @@
<string name="dialog_unsaved_changes_title">Sie haben ungespeicherte Änderungen</string>
<string name="dialog_unsaved_changes_message">Möchten Sie wirklich beenden, ohne zu speichern?</string>
<string name="dialog_unsaved_changes_discard">Verwerfen</string>
<string name="dialog_unsaved_changes_save">@string/dialog_button_cancel</string>
<string name="dialog_file_name_placeholder">@string/screen_share_files_new_text_file</string>
<string name="dialog_file_name_placeholder">text.txt</string>
<string name="dialog_delete_vault_message">Sind Sie sicher, dass sie den Tresor entfernen wollen?</string>
<string name="dialog_delete_vault_hint">Dieser Vorgang wird den Tresor nur aus dieser Liste entfernen und nicht tatsächlich löschen.</string>
<string name="dialog_upload_file_title">Lade hoch&#8230;</string>

View File

@ -142,7 +142,7 @@
<string name="dialog_replace_positive_button_single_file_exists">Reemplazar</string>
<string name="dialog_replace_msg_single_file_exists">Ya existe un archivo llamado %1$s. ¿Quieres reemplazarlo?</string>
<string name="dialog_replace_msg_all_files_exists">Todos los archivos existen ya. ¿Quieres reemplazarlos?</string>
<string name="dialog_replace_msg_some_files_exists">\"%d archivos existen ya. ¿Quieres reemplazarlos?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d archivos existen ya. ¿Quieres reemplazarlos?</string>
<string name="dialog_replace_title_single_file_exists">\"¿Reemplazar archivo?</string>
<string name="dialog_replace_title_multiple_files_exist">\"¿Reemplazar archivos?</string>
<string name="dialog_unable_to_share_title">No se puede compartir archivos</string>

View File

@ -5,6 +5,7 @@
<!-- # error messages -->
<string name="error_generic">Une erreur est survenue</string>
<string name="error_authentication_failed">Échec de l\'authentification</string>
<string name="error_authentication_failed_re_authenticate">Échec de l\'authentification, veuillez vous connecter en utilisant %1$s</string>
<string name="error_no_network_connection">Pas de connexion au réseau</string>
<string name="error_invalid_passphrase">Mot de passe erroné</string>
<string name="error_file_or_folder_exists">Un fichier ou un dossier existe déjà.</string>
@ -175,6 +176,7 @@
<string name="screen_settings_section_version">Version</string>
<string name="screen_settings_advanced_settings">Paramètres Avancés</string>
<string name="screen_settings_background_unlock_preparation_label">Accélérer le déverrouillage</string>
<string name="screen_settings_background_unlock_preparation_label_summary">Téléchargez la configuration du coffre-fort en arrière-plan lorsque vous êtes invité à entrer le mot de passe ou l\'authentification biométrique</string>
<string name="screen_settings_keep_unlocked_while_editing_files">Maintenir deverouillé</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Gardez les coffres forts déverrouillées pendant l\'édition des fichiers</string>
<!-- ## screen: cloud settings -->
@ -214,7 +216,7 @@
<string name="dialog_replace_positive_button_single_file_exists">Remplacer</string>
<string name="dialog_replace_msg_single_file_exists">Un fichier nommé \'%1$s\' existe déjà. Voulez-vous le remplacer?</string>
<string name="dialog_replace_msg_all_files_exists">Tous les fichiers existent déjà. Voulez-vous les remplacer?</string>
<string name="dialog_replace_msg_some_files_exists">%d fichiers existent déjà. Voulez-vous les remplacer?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d fichiers existent déjà. Voulez-vous les remplacer?</string>
<string name="dialog_replace_title_single_file_exists">Remplacer le fichier?</string>
<string name="dialog_replace_title_multiple_files_exist">Remplacer les fichiers?</string>
<string name="dialog_unable_to_share_title">Impossible de partager des fichiers</string>

View File

@ -200,7 +200,7 @@
<string name="dialog_replace_positive_button_single_file_exists">Değiştir</string>
<string name="dialog_replace_msg_single_file_exists">\'%1$s\' adlı bir dosya zaten var. Değiştirmek istiyor musunuz?</string>
<string name="dialog_replace_msg_all_files_exists">Tüm dosyalar zaten mevcut. Onları değiştirmek ister misin?</string>
<string name="dialog_replace_msg_some_files_exists">%d dosya zaten var. Onları değiştirmek ister misin?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d dosya zaten var. Onları değiştirmek ister misin?</string>
<string name="dialog_replace_title_single_file_exists">Dosya değiştirilsin mi?</string>
<string name="dialog_replace_title_multiple_files_exist">Dosyalar değiştirilsin mi?</string>
<string name="dialog_unable_to_share_title">Dosyalar paylaşılamıyor</string>

View File

@ -35,6 +35,8 @@
<string name="error_vault_version_mismatch">Version specified in vault.cryptomator is different to masterkey.cryptomator</string>
<string name="error_vault_key_invalid">vault.cryptomator does not match with this masterkey.cryptomator</string>
<string name="error_vault_config_loading">General error while loading the vault config</string>
<string name="error_file_not_found_after_opening_using_3party">Local file isn\'t present anymore after switching back to Cryptomator. Possible changes cannot be propagated back to the cloud.</string>
<!-- # clouds -->
<!-- ## cloud names -->
@ -308,7 +310,7 @@
<string name="dialog_replace_positive_button_single_file_exists">Replace</string>
<string name="dialog_replace_msg_single_file_exists">A file named \'%1$s\' already exists. Do you want to replace it?</string>
<string name="dialog_replace_msg_all_files_exists">All files already exist. Do you want to replace them?</string>
<string name="dialog_replace_msg_some_files_exists">%d files already exist. Do you want to replace them?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d files already exist. Do you want to replace them?</string>
<string name="dialog_replace_title_single_file_exists">Replace file?</string>
<string name="dialog_replace_title_multiple_files_exist">Replace files?</string>