diff --git a/app/src/main/java/com/nextcloud/client/account/RegisteredUser.kt b/app/src/main/java/com/nextcloud/client/account/RegisteredUser.kt index d73a99a747fb..34264d0d34ab 100644 --- a/app/src/main/java/com/nextcloud/client/account/RegisteredUser.kt +++ b/app/src/main/java/com/nextcloud/client/account/RegisteredUser.kt @@ -11,6 +11,7 @@ import android.accounts.Account import android.os.Parcel import android.os.Parcelable import com.owncloud.android.lib.common.OwnCloudAccount +import com.nextcloud.utils.extensions.readParcelableCompat /** * This class represents normal user logged into the Nextcloud server. @@ -30,9 +31,9 @@ internal data class RegisteredUser( } private constructor(source: Parcel) : this( - source.readParcelable(Account::class.java.classLoader) as Account, - source.readParcelable(OwnCloudAccount::class.java.classLoader) as OwnCloudAccount, - source.readParcelable(Server::class.java.classLoader) as Server + source.readParcelableCompat(Account::class.java.classLoader) as Account, + source.readParcelableCompat(OwnCloudAccount::class.java.classLoader) as OwnCloudAccount, + source.readParcelableCompat(Server::class.java.classLoader) as Server ) override val isAnonymous = false diff --git a/app/src/main/java/com/nextcloud/client/account/Server.kt b/app/src/main/java/com/nextcloud/client/account/Server.kt index 63f4dfb86187..132496a29277 100644 --- a/app/src/main/java/com/nextcloud/client/account/Server.kt +++ b/app/src/main/java/com/nextcloud/client/account/Server.kt @@ -9,6 +9,8 @@ package com.nextcloud.client.account import android.os.Parcel import android.os.Parcelable +import com.nextcloud.utils.extensions.readParcelableCompat +import com.nextcloud.utils.extensions.readSerializableCompat import com.owncloud.android.lib.resources.status.OwnCloudVersion import java.net.URI @@ -19,8 +21,8 @@ import java.net.URI data class Server(val uri: URI, val version: OwnCloudVersion) : Parcelable { constructor(source: Parcel) : this( - source.readSerializable() as URI, - source.readParcelable(OwnCloudVersion::class.java.classLoader) as OwnCloudVersion + source.readSerializableCompat(URI::class.java.classLoader) as URI, + source.readParcelableCompat(OwnCloudVersion::class.java.classLoader) as OwnCloudVersion ) override fun describeContents() = 0 diff --git a/app/src/main/java/com/nextcloud/client/files/Request.kt b/app/src/main/java/com/nextcloud/client/files/Request.kt index cc72bcecaf4a..ecd663944910 100644 --- a/app/src/main/java/com/nextcloud/client/files/Request.kt +++ b/app/src/main/java/com/nextcloud/client/files/Request.kt @@ -12,6 +12,8 @@ import android.os.Parcelable import com.nextcloud.client.account.User import com.nextcloud.client.jobs.upload.PostUploadAction import com.nextcloud.client.jobs.upload.UploadTrigger +import com.nextcloud.utils.extensions.readParcelableCompat +import com.nextcloud.utils.extensions.readSerializableCompat import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.UploadsStorageManager import com.owncloud.android.db.OCUpload @@ -54,10 +56,10 @@ class DownloadRequest internal constructor( ) : this(user, file, UUID.randomUUID(), Direction.DOWNLOAD, test) constructor(parcel: Parcel) : this( - user = parcel.readParcelable(User::class.java.classLoader) as User, - file = parcel.readParcelable(OCFile::class.java.classLoader) as OCFile, - uuid = parcel.readSerializable() as UUID, - type = parcel.readSerializable() as Direction, + user = parcel.readParcelableCompat(User::class.java.classLoader) as User, + file = parcel.readParcelableCompat(OCFile::class.java.classLoader) as OCFile, + uuid = parcel.readSerializableCompat(UUID::class.java.classLoader) as UUID, + type = parcel.readSerializableCompat(Direction::class.java.classLoader) as Direction, test = parcel.readInt() != 0 ) @@ -110,11 +112,11 @@ class UploadRequest internal constructor( ) : this(user, upload, false) constructor(parcel: Parcel) : this( - user = parcel.readParcelable(User::class.java.classLoader) as User, - file = parcel.readParcelable(OCFile::class.java.classLoader) as OCFile, - upload = parcel.readParcelable(OCUpload::class.java.classLoader) as OCUpload, - uuid = parcel.readSerializable() as UUID, - type = parcel.readSerializable() as Direction, + user = parcel.readParcelableCompat(User::class.java.classLoader) as User, + file = parcel.readParcelableCompat(OCFile::class.java.classLoader) as OCFile, + upload = parcel.readParcelableCompat(OCUpload::class.java.classLoader) as OCUpload, + uuid = parcel.readSerializableCompat(UUID::class.java.classLoader) as UUID, + type = parcel.readSerializableCompat(Direction::class.java.classLoader) as Direction, test = parcel.readInt() != 0 ) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/ParcableExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/ParcableExtensions.kt index 86e1a26b0ad2..72ddb5cd07fd 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/ParcableExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/ParcableExtensions.kt @@ -10,6 +10,7 @@ package com.nextcloud.utils.extensions import android.os.Parcel import android.os.Parcelable import androidx.core.os.ParcelCompat +import java.io.Serializable inline fun Parcel?.readParcelableCompat(classLoader: ClassLoader?): T? { if (this == null) { @@ -18,3 +19,11 @@ inline fun Parcel?.readParcelableCompat(classLoader: Cl return ParcelCompat.readParcelable(this, classLoader, T::class.java) } + +inline fun Parcel?.readSerializableCompat(classLoader: ClassLoader?): T? { + if (this == null) { + return null + } + + return ParcelCompat.readSerializable(this, classLoader, T::class.java) as T? +} diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index 03d85e22a902..8e0d4e4024f6 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -41,6 +41,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; +import androidx.core.os.ParcelCompat; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import third_parties.daveKoeller.AlphanumComparator; @@ -199,7 +200,11 @@ private OCFile(Parcel source) { encrypted = source.readInt() == 1; ownerId = source.readString(); ownerDisplayName = source.readString(); - mountType = (WebdavEntry.MountType) source.readSerializable(); + mountType = (WebdavEntry.MountType) ParcelCompat.readSerializable( + source, + WebdavEntry.MountType.class.getClassLoader(), + java.io.Serializable.class + ); richWorkspace = source.readString(); previewAvailable = source.readInt() == 1; firstShareTimestamp = source.readLong(); diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt index cca5ae12ec55..2997a2bf392a 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt @@ -22,8 +22,8 @@ data class ConflictDialogData( parcel.readString() ?: "", parcel.readString() ?: "", checkboxData = Pair( - parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", ""), - parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", "") + parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", ""), + parcel.readParcelableCompat(ConflictFileData::class.java.classLoader) ?: ConflictFileData("", "", "") ) )