Skip to content

Commit 1e8eedd

Browse files
committed
fix: deduplicate cloud media in search and location flows + cleanup MediaViewScreen
- Add deduplicateCloudLocal() to remove cloud duplicates when a local counterpart with matching cloudGroupKey exists in search results and location data - Remove unused Configuration/LocalConfiguration imports and simplify landscape padding logic in MediaViewScreen
1 parent 38e2269 commit 1e8eedd

2 files changed

Lines changed: 22 additions & 16 deletions

File tree

app/src/main/kotlin/com/dot/gallery/core/MediaDistributorImpl.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,7 @@ class MediaDistributorImpl @Inject constructor(
10261026
.mapTo(HashSet()) { it.mediaId }
10271027
val filteredMedia = timelineState.media.filter {
10281028
it.id in matchingMediaIds
1029-
}
1029+
}.deduplicateCloudLocal()
10301030
return@combine mapMediaToItem(
10311031
data = filteredMedia,
10321032
error = timelineState.error,
@@ -1041,8 +1041,9 @@ class MediaDistributorImpl @Inject constructor(
10411041
repository.getMetadata(),
10421042
timelineMediaFlow
10431043
) { metadata, timelineState ->
1044-
val mediaById = HashMap<Long, Media.UriMedia>(timelineState.media.size)
1045-
for (m in timelineState.media) { mediaById[m.id] = m }
1044+
val dedupedMedia = timelineState.media.deduplicateCloudLocal()
1045+
val mediaById = HashMap<Long, Media.UriMedia>(dedupedMedia.size)
1046+
for (m in dedupedMedia) { mediaById[m.id] = m }
10461047

10471048
val locationGroupMap = LinkedHashMap<String, Media.UriMedia>()
10481049
val geoList = ArrayList<GeoMedia>(metadata.size / 2)
@@ -1262,4 +1263,18 @@ class MediaDistributorImpl @Inject constructor(
12621263
}
12631264
}
12641265

1266+
/**
1267+
* Remove cloud duplicates when a local counterpart with the same
1268+
* [cloudGroupKey] exists. Keeps local items and cloud-only items.
1269+
*/
1270+
private fun List<Media.UriMedia>.deduplicateCloudLocal(): List<Media.UriMedia> {
1271+
if (none { it.isCloud }) return this
1272+
val localKeys = HashSet<String>()
1273+
for (m in this) {
1274+
if (!m.isCloud) localKeys.add(m.cloudGroupKey)
1275+
}
1276+
if (localKeys.isEmpty()) return this
1277+
return filter { !it.isCloud || it.cloudGroupKey !in localKeys }
1278+
}
1279+
12651280
}

app/src/main/kotlin/com/dot/gallery/feature_node/presentation/mediaview/MediaViewScreen.kt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package com.dot.gallery.feature_node.presentation.mediaview
77

88
import android.content.pm.ActivityInfo
9-
import android.content.res.Configuration
109
import android.graphics.Bitmap
1110
import android.graphics.Rect
1211
import android.net.Uri
@@ -69,7 +68,6 @@ import androidx.compose.ui.draw.clip
6968
import androidx.compose.ui.graphics.Color
7069
import androidx.compose.ui.graphics.graphicsLayer
7170
import androidx.compose.ui.layout.onVisibilityChanged
72-
import androidx.compose.ui.platform.LocalConfiguration
7371
import androidx.compose.ui.platform.LocalContext
7472
import androidx.compose.ui.platform.LocalDensity
7573
import androidx.compose.ui.platform.LocalResources
@@ -424,25 +422,18 @@ fun <T : Media> MediaViewScreen(
424422
}
425423
}
426424

427-
val configuration = LocalConfiguration.current
428-
val isLandscape = remember(configuration) {
429-
configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
430-
}
431425
val isGestureEnabled = rememberGestureNavigationEnabled()
432426
// Extra padding for navigation bar with 3/2-buttons
433-
val extraPaddingWithNavButtons by remember(isLandscape, isGestureEnabled) {
427+
val extraPaddingWithNavButtons by remember(isGestureEnabled) {
434428
mutableStateOf(
435-
if (!isGestureEnabled && !isLandscape) {
429+
if (!isGestureEnabled) {
436430
32.dp
437431
} else 0.dp
438432
)
439433
}
440434
val navigationBarHeight = rememberNavigationBarHeight()
441-
val bottomBarHeightDefault by remember(isGestureEnabled, isLandscape) {
442-
mutableStateOf(
443-
if (!isGestureEnabled && isLandscape) 84.dp
444-
else BOTTOM_BAR_HEIGHT
445-
)
435+
val bottomBarHeightDefault by remember {
436+
mutableStateOf(BOTTOM_BAR_HEIGHT)
446437
}
447438

448439
val bottomPadding = remember(paddingValues) {

0 commit comments

Comments
 (0)