From ebe7e92982f6555e80ec25b9901befb0ddb5f24b Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Wed, 25 Dec 2024 21:47:45 +0530 Subject: [PATCH] Limit subscription id workaround to Android 14+ --- .../messages/helpers/MessagesImporter.kt | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/messages/helpers/MessagesImporter.kt b/app/src/main/kotlin/org/fossify/messages/helpers/MessagesImporter.kt index 27578f6c..558b48a6 100644 --- a/app/src/main/kotlin/org/fossify/messages/helpers/MessagesImporter.kt +++ b/app/src/main/kotlin/org/fossify/messages/helpers/MessagesImporter.kt @@ -8,10 +8,15 @@ import kotlinx.serialization.json.decodeFromStream import org.fossify.commons.extensions.showErrorToast import org.fossify.commons.extensions.toast import org.fossify.commons.helpers.ensureBackgroundThread +import org.fossify.commons.helpers.isUpsideDownCakePlus import org.fossify.messages.activities.SimpleActivity import org.fossify.messages.dialogs.ImportMessagesDialog import org.fossify.messages.extensions.config -import org.fossify.messages.models.* +import org.fossify.messages.models.BackupType +import org.fossify.messages.models.ImportResult +import org.fossify.messages.models.MessagesBackup +import org.fossify.messages.models.MmsBackup +import org.fossify.messages.models.SmsBackup import org.xmlpull.v1.XmlPullParser import java.io.InputStream @@ -26,7 +31,8 @@ class MessagesImporter(private val activity: SimpleActivity) { fun importMessages(uri: Uri) { try { val fileType = activity.contentResolver.getType(uri).orEmpty() - val isXml = isXmlMimeType(fileType) || (uri.path?.endsWith("txt") == true && isFileXml(uri)) + val isXml = + isXmlMimeType(fileType) || (uri.path?.endsWith("txt") == true && isFileXml(uri)) if (isXml) { activity.toast(org.fossify.commons.R.string.importing) getInputStreamFromUri(uri)!!.importXml() @@ -41,20 +47,28 @@ class MessagesImporter(private val activity: SimpleActivity) { @OptIn(kotlinx.serialization.ExperimentalSerializationApi::class) private fun importJson(uri: Uri) { try { - val deserializedList = activity.contentResolver.openInputStream(uri)!!.buffered().use { inputStream -> - Json.decodeFromStream>(inputStream) - } + val deserializedList = + activity.contentResolver.openInputStream(uri)!!.buffered().use { inputStream -> + Json.decodeFromStream>(inputStream) + } + if (deserializedList.isEmpty()) { activity.toast(org.fossify.commons.R.string.no_entries_for_importing) return } - val messages = deserializedList.map { message -> - // workaround for messages not being imported on Android 14 when the device has a different subscriptionId (see #191) - when (message) { - is SmsBackup -> message.copy(subscriptionId = -1) - is MmsBackup -> message.copy(subscriptionId = -1) + + val messages = if (isUpsideDownCakePlus()) { + deserializedList.map { message -> + // workaround for messages not being imported on Android 14 when the device has a different subscriptionId (see #191) + when (message) { + is SmsBackup -> message.copy(subscriptionId = -1) + is MmsBackup -> message.copy(subscriptionId = -1) + } } + } else { + deserializedList } + ImportMessagesDialog(activity, messages) } catch (e: SerializationException) { activity.toast(org.fossify.commons.R.string.invalid_file_format) @@ -195,7 +209,10 @@ class MessagesImporter(private val activity: SimpleActivity) { } private fun isXmlMimeType(mimeType: String): Boolean { - return mimeType.equals("application/xml", ignoreCase = true) || mimeType.equals("text/xml", ignoreCase = true) + return mimeType.equals("application/xml", ignoreCase = true) || mimeType.equals( + "text/xml", + ignoreCase = true + ) } private fun isJsonMimeType(mimeType: String): Boolean {