From 6deb97d5bcdb662feb72748de6a73e87b0d265ae Mon Sep 17 00:00:00 2001 From: Luis Nachtigall <31982496+LeLunZ@users.noreply.github.com> Date: Mon, 2 Mar 2026 23:06:35 +0100 Subject: [PATCH] fix(mobile): android detect supported version for special format column (#26633) * fix(android): detect supported version for special format column * fix(android): remove unnecessary suppression for new API in special format check * fix(android): change visibility of hasSpecialFormatColumn method to private --- .../app/alextran/immich/sync/MessagesImplBase.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt index 173d81613a..0cc642c862 100644 --- a/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt @@ -7,6 +7,7 @@ import android.database.Cursor import androidx.exifinterface.media.ExifInterface import android.os.Build import android.os.Bundle +import android.os.ext.SdkExtensions import android.provider.MediaStore import android.util.Base64 import android.util.Log @@ -78,15 +79,22 @@ open class NativeSyncApiImplBase(context: Context) : ImmichPlugin() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { add(MediaStore.MediaColumns.IS_FAVORITE) } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (hasSpecialFormatColumn()) { add(SPECIAL_FORMAT_COLUMN) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Fallback: read XMP from MediaStore to detect Motion Photos + // only needed if SPECIAL_FORMAT column isn't available add(MediaStore.MediaColumns.XMP) } }.toTypedArray() const val HASH_BUFFER_SIZE = 2 * 1024 * 1024 + + // _special_format requires S Extensions 21+ + // https://developer.android.com/reference/android/provider/MediaStore.Files.FileColumns#SPECIAL_FORMAT + private fun hasSpecialFormatColumn(): Boolean = + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && + SdkExtensions.getExtensionVersion(Build.VERSION_CODES.S) >= 21 } protected fun getCursor(