From 431a3c5ae0404bce61a8690a4134589037d5a419 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Wed, 20 Mar 2024 08:21:45 +0200 Subject: [PATCH] Use Android 14 compatible backup file format --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 3 +-- .../main/kotlin/com/tutpro/baresip/Utils.kt | 20 +++++++++---------- app/src/main/res/values-fi/strings.xml | 3 +++ app/src/main/res/values/strings.xml | 3 +++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index aeafd67b..09e41b9a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1764,8 +1764,7 @@ class MainActivity : AppCompatActivity() { if (!Utils.unZip(zipFilePath)) { Log.w(TAG, "Failed to unzip file '$zipFile'") Utils.alertView(this, getString(R.string.error), - String.format(getString(R.string.restore_failed), - Utils.fileNameOfUri(applicationContext, downloadsInputUri!!))) + String.format(getString(R.string.restore_unzip_failed), "baresip", "60.0.0")) return } Utils.deleteFile(File(zipFilePath)) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index e80492b8..7a162630 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -765,12 +765,12 @@ object Utils { try { ZipOutputStream(BufferedOutputStream(FileOutputStream(zipFilePath))).use { out -> val data = ByteArray(1024) - for (file in fileNames) { - val filePath = BaresipService.filesPath + "/" + file + for (fileName in fileNames) { + val filePath = BaresipService.filesPath + "/" + fileName if (File(filePath).exists()) { FileInputStream(filePath).use { fi -> BufferedInputStream(fi).use { origin -> - val entry = ZipEntry(filePath) + val entry = ZipEntry(fileName) out.putNextEntry(entry) while (true) { val readBytes = origin.read(data) @@ -794,15 +794,15 @@ object Utils { "gzrtp.zid", "cert.pem", "ca_cert", "ca_certs.crt") val zipFiles = mutableListOf() try { - ZipFile(zipFilePath).use { zip -> + ZipFile(File(zipFilePath)).use { zip -> zip.entries().asSequence().forEach { entry -> - if (!entry.name.contains("/${BaresipService.pName}/")) { - Log.e(TAG, "Backup file is not from this application") - return false - } - zipFiles.add(entry.name.substringAfter("/files/")) + val entryName = if (entry.name.startsWith("/")) + entry.name.substringAfterLast("/") + else + entry.name + zipFiles.add(entryName) zip.getInputStream(entry).use { input -> - File(entry.name).outputStream().use { output -> + File(BaresipService.filesPath + "/" + entryName).outputStream().use { output -> input.copyTo(output) } } diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index dc4b0c76..aa406820 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -548,6 +548,9 @@ annoit oikean salasanan ja että palautustiedosto kuuluu tällä sovellukselle. Android versioon 9 saakka tarkista myös Asetukset → Sovellukset → baresip → Käyttöluvat → Tallennustila ja että tiedosto \'%1$s\' on Download-kansiossa. + Sovelluksen tietojen palauttaminen epäonnistui. Android + versiosta 14 alkaen ei salli tietojen palauttamista, jos ne on tallettu ennen %1$s versioa + %2$s. Et voi käyttää tätä sovellusta ilman Ilmoitukset-lupaa. Et voi soittaa puheluita tai vastata niihin ilman Mikrofoni-lupaa. baresip ei voi havaita Bluetooth-yhteyttä ilman diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 308085a5..9318f600 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -523,6 +523,9 @@ also check Apps → baresip → Permissions → Storage and that file \'%1$s\' exists in Download folder. + Failed to restore application data. Android version 14 and + above does not allow restoring data that was backed up before %1$s version %2$s. + You are not able to use this application without \"Notifications\" permission. baresip needs \"Microphone\" permission for voice calls.