Skip to content

Commit 8108f50

Browse files
fix: guard IS_FAVORITE column with SDK check (#20511)
Co-authored-by: shenlong-tanwen <[email protected]>
1 parent 1b8354e commit 8108f50

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

mobile/android/app/src/main/kotlin/app/alextran/immich/sync/MessagesImplBase.kt

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,24 @@ open class NativeSyncApiImplBase(context: Context) {
2929
MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO.toString()
3030
)
3131
const val BUCKET_SELECTION = "(${MediaStore.Files.FileColumns.BUCKET_ID} = ?)"
32-
val ASSET_PROJECTION = arrayOf(
33-
MediaStore.MediaColumns._ID,
34-
MediaStore.MediaColumns.DATA,
35-
MediaStore.MediaColumns.DISPLAY_NAME,
36-
MediaStore.MediaColumns.DATE_TAKEN,
37-
MediaStore.MediaColumns.DATE_ADDED,
38-
MediaStore.MediaColumns.DATE_MODIFIED,
39-
MediaStore.Files.FileColumns.MEDIA_TYPE,
40-
MediaStore.MediaColumns.BUCKET_ID,
41-
MediaStore.MediaColumns.WIDTH,
42-
MediaStore.MediaColumns.HEIGHT,
43-
MediaStore.MediaColumns.DURATION,
44-
MediaStore.MediaColumns.ORIENTATION,
45-
MediaStore.MediaColumns.IS_FAVORITE,
46-
)
32+
val ASSET_PROJECTION = buildList {
33+
add(MediaStore.MediaColumns._ID)
34+
add(MediaStore.MediaColumns.DATA)
35+
add(MediaStore.MediaColumns.DISPLAY_NAME)
36+
add(MediaStore.MediaColumns.DATE_TAKEN)
37+
add(MediaStore.MediaColumns.DATE_ADDED)
38+
add(MediaStore.MediaColumns.DATE_MODIFIED)
39+
add(MediaStore.Files.FileColumns.MEDIA_TYPE)
40+
add(MediaStore.MediaColumns.BUCKET_ID)
41+
add(MediaStore.MediaColumns.WIDTH)
42+
add(MediaStore.MediaColumns.HEIGHT)
43+
add(MediaStore.MediaColumns.DURATION)
44+
add(MediaStore.MediaColumns.ORIENTATION)
45+
// IS_FAVORITE is only available on Android 11 and above
46+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
47+
add(MediaStore.MediaColumns.IS_FAVORITE)
48+
}
49+
}.toTypedArray()
4750

4851
const val HASH_BUFFER_SIZE = 2 * 1024 * 1024
4952
}
@@ -78,7 +81,7 @@ open class NativeSyncApiImplBase(context: Context) {
7881
val durationColumn = c.getColumnIndexOrThrow(MediaStore.MediaColumns.DURATION)
7982
val orientationColumn =
8083
c.getColumnIndexOrThrow(MediaStore.MediaColumns.ORIENTATION)
81-
val favoriteColumn = c.getColumnIndexOrThrow(MediaStore.MediaColumns.IS_FAVORITE)
84+
val favoriteColumn = c.getColumnIndex(MediaStore.MediaColumns.IS_FAVORITE)
8285

8386
while (c.moveToNext()) {
8487
val id = c.getLong(idColumn).toString()
@@ -107,7 +110,7 @@ open class NativeSyncApiImplBase(context: Context) {
107110
else c.getLong(durationColumn) / 1000
108111
val bucketId = c.getString(bucketIdColumn)
109112
val orientation = c.getInt(orientationColumn)
110-
val isFavorite = c.getInt(favoriteColumn) != 0;
113+
val isFavorite = if (favoriteColumn == -1) false else c.getInt(favoriteColumn) != 0
111114

112115
val asset = PlatformAsset(
113116
id,

0 commit comments

Comments
 (0)