diff --git a/CHANGELOG.md b/CHANGELOG.md
index e18e0b8e8e..852e35262a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 3.24.1 (February 21, 2022)
+
+- Fix crash in previous version when connecting to old server versions
+
+Minimum: NC 16 Server, Android 6.0 Marshmallow
+
## 3.24.0 (February 13, 2022)
- Several performance optimizations by @starypatyk
diff --git a/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java b/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java
index 69c0e18e98..67ad5238e1 100644
--- a/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java
+++ b/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java
@@ -104,20 +104,20 @@ abstract public class FileDataStorageManagerIT extends AbstractOnServerIT {
assertTrue(new UploadFileRemoteOperation(getDummyFile("chunkedFile.txt").getAbsolutePath(),
"/1/1/chunkedFile.txt",
"text/plain",
- String.valueOf(System.currentTimeMillis() / 1000))
+ System.currentTimeMillis() / 1000)
.execute(client).isSuccess());
assertTrue(new UploadFileRemoteOperation(getDummyFile("chunkedFile.txt").getAbsolutePath(),
"/1/1/chunkedFile2.txt",
"text/plain",
- String.valueOf(System.currentTimeMillis() / 1000))
+ System.currentTimeMillis() / 1000)
.execute(client).isSuccess());
File imageFile = getFile("imageFile.png");
assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(),
"/1/1/imageFile.png",
"image/png",
- String.valueOf(System.currentTimeMillis() / 1000))
+ System.currentTimeMillis() / 1000)
.execute(client).isSuccess());
// sync
@@ -166,7 +166,7 @@ abstract public class FileDataStorageManagerIT extends AbstractOnServerIT {
assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(),
remotePath,
"image/png",
- String.valueOf(System.currentTimeMillis() / 1000))
+ System.currentTimeMillis() / 1000)
.execute(client).isSuccess());
assertNull(sut.getFileByDecryptedRemotePath(remotePath));
@@ -240,7 +240,7 @@ abstract public class FileDataStorageManagerIT extends AbstractOnServerIT {
assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(),
imagePath,
"image/png",
- String.valueOf((System.currentTimeMillis() - 10000) / 1000))
+ (System.currentTimeMillis() - 10000) / 1000)
.execute(client).isSuccess());
// Check that file does not yet exist in local database
@@ -251,7 +251,7 @@ abstract public class FileDataStorageManagerIT extends AbstractOnServerIT {
assertTrue(new UploadFileRemoteOperation(videoFile.getAbsolutePath(),
videoPath,
"video/mpeg",
- String.valueOf((System.currentTimeMillis() + 10000) / 1000))
+ (System.currentTimeMillis() + 10000) / 1000)
.execute(client).isSuccess());
// Check that file does not yet exist in local database
diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java
index d3bce07f0f..98a8e310f1 100644
--- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java
+++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java
@@ -495,7 +495,7 @@ public class UploadFileOperation extends SyncOperation {
}
// Get the last modification date of the file from the file system
- String lastModifiedTimestamp = Long.toString(originalFile.lastModified() / 1000);
+ long lastModifiedTimestamp = originalFile.lastModified() / 1000;
Long creationTimestamp = FileUtil.getCreationTimestamp(originalFile);
@@ -759,7 +759,7 @@ public class UploadFileOperation extends SyncOperation {
}
// Get the last modification date of the file from the file system
- String lastModifiedTimestamp = Long.toString(originalFile.lastModified() / 1000);
+ long lastModifiedTimestamp = originalFile.lastModified() / 1000;
final Long creationTimestamp = FileUtil.getCreationTimestamp(originalFile);
diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java
index 67b2535c6d..4d280abb8e 100644
--- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java
+++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java
@@ -564,7 +564,7 @@ public class DocumentsStorageProvider extends DocumentsProvider {
newFilePath,
mimeType,
"",
- String.valueOf(System.currentTimeMillis() / 1000),
+ System.currentTimeMillis() / 1000,
FileUtil.getCreationTimestamp(emptyFile),
false)
.execute(client);
diff --git a/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java b/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java
index 00032956e2..a53b6d99f3 100644
--- a/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java
+++ b/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java
@@ -324,9 +324,13 @@ public final class ErrorMessageAdapter {
new File(operation.getSavePath()).getName());
} else {
- if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
- return res.getString(R.string.downloader_download_file_not_found);
-
+ switch (result.getCode()) {
+ case FILE_NOT_FOUND:
+ return res.getString(R.string.downloader_download_file_not_found);
+ case CANNOT_CREATE_FILE:
+ return res.getString(R.string.download_cannot_create_file);
+ case INVALID_LOCAL_FILE_NAME:
+ return res.getString(R.string.download_download_invalid_local_file_name);
}
}
return null;
diff --git a/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java b/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
index ae44e5208d..bbe24d7f62 100644
--- a/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
+++ b/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
@@ -466,7 +466,7 @@ public final class FileStorageUtils {
return true;
}
- while (!OCFile.ROOT_PATH.equals(file.getDecryptedRemotePath())) {
+ while (file != null && !OCFile.ROOT_PATH.equals(file.getDecryptedRemotePath())) {
if (file.isEncrypted()) {
return true;
}
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index c6e23bb689..f03b1c63bb 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -32,6 +32,7 @@
Активност
Добави още една връзка
Добавете нова връзка за публично споделяне
+ добавяне на нов, защитено пускане на файлове
Добави към %1$s
Допълнителни настройки
Може да споделя повторно
@@ -683,6 +684,7 @@
Защитена с парола
Може да редактира
Изпускане/Преместване/ на файл
+ Защитено пускане на файлове
Само изглед
Права за споделяне
%1$s (отдалечен)
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 648a02e6ca..94451f0fee 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -138,7 +138,7 @@
Hent kanditat til frigivelse fra F-Droid app
Hent kanditat til frigivelse fra Google Play store
Release candidate
- Denne kandidat til frigivelse (RC) er et snapshot af den kommende version og forventes at være stabil. Testing af dit individuelle miljø kunne hjælpe med at sikre dette. Indkriv dig til testing på Play store eller led manuelt in \"Version\"s afdelingen af F-Droid.
+ Denne kandidat til frigivelse (RC) er et snapshot af den kommende version og forventes at være stabil. Testing af dit individuelle miljø kan hjælpe med at sikre dette. Indskriv dig til testing i Play Store eller led manuelt i \"Version\"s afdelingen af F-Droid.
Fundet en bug? Mærkværdighed?
Hjælp med at test
Rapporter et problem på Github
@@ -501,7 +501,7 @@
Passcode\'erne er ikke ens
Indtast venligst dit kodeord igen
Slet din adgangskode
- Passcode slettet
+ Adgangskode slettet
Passcode blev gendannet
Ukorrekt passcode
Tryk på en side for at zoome ind
@@ -832,8 +832,8 @@ Enheds legitimationsoplysninger er sat op
Upload muligheder
Flyt file til %1$s mappe
Oprindelsesfolder er skrivebeskyttet; fil bliver kun sendt
- Behold filen i source-mappen
- Slet filen fra source-mappen
+ Behold filen i kilde-mappen
+ Slet filen fra kilde-mappen
til at overføre til denne mappe
%1$d%% Uploader %2$s
Sender...
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index fb2284d2ee..dab2e9b952 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -63,8 +63,8 @@
Prøver å logge inn…
Feil brukernavn eller passord
Ukjent feil: %1$s
- Ukjent HTTP feil oppstod!
- Ukjent feil oppstod!
+ Ukjent HTTP feil oppsto!
+ Ukjent feil oppsto!
Fant ikke vert
%1$s støtter ikke flere kontoer
Klarte ikke å opprette tilkobling
@@ -168,7 +168,7 @@
Ingen fil funnet
Fant ikke siste sikkerhetskopi.
Kopiert til utklippstavlen
- En feil oppstod ved kopiering av denne filen eller mappen
+ En feil oppsto ved kopiering av denne filen eller mappen
Det er ikke mulig å kopiere en mappe inn i sin egen undermappe
Filen finnes allerede i målmappen
Kan ikke kopiere. Sjekk om filen eksisterer.
@@ -271,13 +271,15 @@
Feil ved kommentering av fil
%1$s kræsjet
Feil ved oppretting av fil fra mal
+ Feil under visning av filvalg
Feil ved endring av fillåsstatus
Rapporter
Rapporter feil? (Krever GitHub konto.)
- Oppstod feil med å få tilbake filen
+ Oppsto feil med å få tilbake filen
Feil ved henting av mal
Feilet under visning av krypteringsoppsett!
Klarte ikke å starte opp kamera
+ Feil ved start av dokumentskanning
Feil ved bruk av dokument skanning
Kontoer
Jobbnavn
@@ -463,7 +465,7 @@
Største først
Minste først
Mer
- En feil oppstod ved flytting av denne filen eller mappen
+ En feil oppsto ved flytting av denne filen eller mappen
Det er ikke mulig å flytte en mappe inn i sin egen undermappe
Filen finnes allerede i målmappen
Kan ikke flytte filen. Sjekk om den eksisterer.
@@ -557,6 +559,7 @@
Generelt
Mer
Daglig backup av din kaleder & kontakter
+ Uventet feil under oppsett av DAVx5 (tidligere kjent som DAVdroid)
Ende-til-ende -kryptering er satt opp!
E2E mnemonic (hjelper for ende-til-ende kryptering til å huske legitimasjon)
For å vise mnemonic, ver vennlig å aktiver enhet legitimasjon.
@@ -699,6 +702,7 @@
delt
del via lenke
Delt med deg av %1$s
+ Deling feilet
Vis bilder
Vis videoer
Logg på med tilbyder
@@ -807,12 +811,12 @@
Det er uleste kommentarer
Ikke satt kryptering
Fjern fra favoritter
- Det oppstod en feil under oppheving av deling av denne filen eller mappen.
+ Det oppsto en feil under oppheving av deling av denne filen eller mappen.
Kan ikke oppheve deling. Sjekk om filen eksisterer.
å oppheve deling av denne filen
Fjerning av deling feilet
Tilgang gjennom ubetrodd domene. Sjekk dokumentasjonen for mer informasjon.
- Det oppstod en feil under oppdatering av delingen.
+ Det oppsto en feil under oppdatering av delingen.
Kan ikke oppdatere. Sjekk om filen eksisterer.
å oppdatere denne delingen
Oppdatering av deling feilet
@@ -942,6 +946,14 @@
- Eksporterte %d fil
- Eksporterte %d filer
+
+ - Eksportering av %d fil feilet
+ - Eksportering av %d filer feilet
+
+
+ - Eksporterte %d fil, hoppet over resten på grunn av feil
+ - Eksporterte %d filer, hoppet over resten på grunn av feil
+
- %d fil vil bli eksportert. Se varsel for detaljer
- %d filer vil bli eksportert. Se varsel for detaljer
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 25d5e9cde7..f98d81cb21 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1064,9 +1064,9 @@
Remove local encryption
You can remove end-to-end encryption locally on this client. The encrypted files will remain on server, but will not be synced to this computer any longer.
During setup of end-to-end encryption, you will receive a random 12 word mnemonic, which you will need to open your files on other devices. This will only be stored on this device, and can be shown again in this screen. Please note it down in a secure place!
- Error showing setup encryption dialog!
+ Error showing encryption setup dialog!
Add end-to-end encryption to this client
- add new secure file drop
+ Add new secure file drop
Scan page
Done
Generating PDF…
@@ -1075,4 +1075,6 @@
Choose export type
PDF file
Multiple images
+ Cannot create local file
+ Invalid filename for local file