Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,48 @@
package fr.free.nrw.commons.fileusages

import android.net.Uri
import timber.log.Timber

/**
* Show where file is being used on Commons and oher wikis.
* shows where file is being used on Commons and other wikis.
*/
data class FileUsagesUiModel(
val title: String,
val link: String?
)

fun FileUsage.toUiModel(): FileUsagesUiModel {
return FileUsagesUiModel(title = title, link = "https://commons.wikimedia.org/wiki/$title")
return FileUsagesUiModel(
title = title,
link = "https://commons.wikimedia.org/wiki/${Uri.encode(title.replace(" ", "_"))}"
)
}

fun GlobalFileUsage.toUiModel(): FileUsagesUiModel {
// link is associated with sub items under wiki group (which is not used ATM)
return FileUsagesUiModel(title = wiki, link = null)
}
Timber.d("GlobalFileUsage: wiki=%s, title=%s", wiki, title)

// handles the empty or invalid wiki/title
if (wiki.isEmpty() || title.isEmpty()) {
Timber.w("Invalid GlobalFileUsage: wiki=%s, title=%s", wiki, title)
return FileUsagesUiModel(title = title, link = null)
}

// determines the domain
val domain = when {
wiki.contains(".") -> wiki // Already a full domain like "en.wikipedia.org"
wiki == "commonswiki" -> "commons.wikimedia.org"
wiki.endsWith("wiki") -> {
val code = wiki.removeSuffix("wiki")
"$code.wikipedia.org"
}
else -> "$wiki.wikipedia.org" // fallback for codes like "en"
}

val normalizedTitle = Uri.encode(title.replace(" ", "_"))

// construct full URL
val url = "https://$domain/wiki/$normalizedTitle"
Timber.d("Generated URL for GlobalFileUsage: %s", url)

return FileUsagesUiModel(title = title, link = url)
}
38 changes: 12 additions & 26 deletions app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2128,22 +2128,17 @@ fun FileUsagesContainer(
val uriHandle = LocalUriHandler.current

Column(modifier = modifier) {

Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {

Text(
text = stringResource(R.string.usages_on_commons_heading),
textAlign = TextAlign.Center,
style = MaterialTheme.typography.titleSmall
)

IconButton(onClick = {
isCommonsListExpanded = !isCommonsListExpanded
}) {
IconButton(onClick = { isCommonsListExpanded = !isCommonsListExpanded }) {
Icon(
imageVector = if (isCommonsListExpanded) Icons.Default.KeyboardArrowUp
else Icons.Default.KeyboardArrowDown,
Expand All @@ -2157,11 +2152,8 @@ fun FileUsagesContainer(
MediaDetailViewModel.FileUsagesContainerState.Loading -> {
LinearProgressIndicator()
}

is MediaDetailViewModel.FileUsagesContainerState.Success -> {

val data = commonsContainerState.data

if (data.isNullOrEmpty()) {
ListItem(headlineContent = {
Text(
Expand All @@ -2181,19 +2173,19 @@ fun FileUsagesContainer(
headlineContent = {
Text(
modifier = Modifier.clickable {
uriHandle.openUri(usage.link!!)
usage.link?.let { uriHandle.openUri(it) }
},
text = usage.title,
style = MaterialTheme.typography.titleSmall.copy(
color = Color(0xFF5A6AEC),
textDecoration = TextDecoration.Underline
)
)
})
}
)
}
}
}

is MediaDetailViewModel.FileUsagesContainerState.Error -> {
ListItem(headlineContent = {
Text(
Expand All @@ -2203,12 +2195,10 @@ fun FileUsagesContainer(
)
})
}

MediaDetailViewModel.FileUsagesContainerState.Initial -> {}
}
}


Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
Expand All @@ -2219,10 +2209,7 @@ fun FileUsagesContainer(
textAlign = TextAlign.Center,
style = MaterialTheme.typography.titleSmall
)

IconButton(onClick = {
isOtherWikisListExpanded = !isOtherWikisListExpanded
}) {
IconButton(onClick = { isOtherWikisListExpanded = !isOtherWikisListExpanded }) {
Icon(
imageVector = if (isOtherWikisListExpanded) Icons.Default.KeyboardArrowUp
else Icons.Default.KeyboardArrowDown,
Expand All @@ -2236,11 +2223,8 @@ fun FileUsagesContainer(
MediaDetailViewModel.FileUsagesContainerState.Loading -> {
LinearProgressIndicator()
}

is MediaDetailViewModel.FileUsagesContainerState.Success -> {

val data = globalContainerState.data

if (data.isNullOrEmpty()) {
ListItem(headlineContent = {
Text(
Expand All @@ -2259,16 +2243,20 @@ fun FileUsagesContainer(
},
headlineContent = {
Text(
modifier = Modifier.clickable {
usage.link?.let { uriHandle.openUri(it) }
},
text = usage.title,
style = MaterialTheme.typography.titleSmall.copy(
color = Color(0xFF5A6AEC),
textDecoration = TextDecoration.Underline
)
)
})
}
)
}
}
}

is MediaDetailViewModel.FileUsagesContainerState.Error -> {
ListItem(headlineContent = {
Text(
Expand All @@ -2278,10 +2266,8 @@ fun FileUsagesContainer(
)
})
}

MediaDetailViewModel.FileUsagesContainerState.Initial -> {}
}
}

}
}
}