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
2 changes: 2 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ ignore:
- "composeApp/src/androidMain/kotlin/com/nacchofer31/randomboxd/Platform.android.kt"
- "composeApp/src/androidMain/kotlin/com/nacchofer31/randomboxd/core/data/OnboardingPreferences.android.kt"
- "composeApp/src/androidMain/kotlin/com/nacchofer31/randomboxd/AndroidPlatform.kt"
- "composeApp/src/androidMain/kotlin/com/nacchofer31/randomboxd/random_film/data/repository_impl/ShareRepositoryImplAndroid.kt"
- "composeApp/src/iosMain/kotlin/com/nacchofer31/randomboxd/random_film/data/repository_impl/ShareRepositoryImplIos.kt"
2 changes: 2 additions & 0 deletions composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,8 @@ val fileFilter =
// Native platform implementations (require device context)
"com/nacchofer31/randomboxd/random_film/data/repository_impl/InAppReviewRepositoryImplAndroid*",
"com/nacchofer31/randomboxd/random_film/data/repository_impl/InAppReviewRepositoryImplIos*",
"com/nacchofer31/randomboxd/random_film/data/repository_impl/ShareRepositoryImplAndroid*",
"com/nacchofer31/randomboxd/random_film/data/repository_impl/ShareRepositoryImplIos*",
)

tasks.register("jacocoTestReport", JacocoReport::class) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class FilmPosterTest {
releaseYear = "2020",
onClick = {},
onRerollClick = {},
onShareClick = {},
)
}

Expand All @@ -82,6 +83,7 @@ class FilmPosterTest {
releaseYear = "2020",
onClick = {},
onRerollClick = {},
onShareClick = {},
)
}

Expand All @@ -108,6 +110,7 @@ class FilmPosterTest {
releaseYear = "2010",
onClick = { clicked = true },
onRerollClick = {},
onShareClick = {},
)
}

Expand All @@ -134,6 +137,7 @@ class FilmPosterTest {
releaseYear = "2020",
onClick = {},
onRerollClick = {},
onShareClick = {},
numberOfResults = 0,
)
}
Expand All @@ -159,6 +163,7 @@ class FilmPosterTest {
releaseYear = "2020",
onClick = {},
onRerollClick = {},
onShareClick = {},
numberOfResults = 42,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,35 @@ class RandomFilmScreenTest {
assert(rerollClicked)
}

@Test
fun share_button_opens_share_card_dialog() {
val bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
setImageLoader(
FakeImageLoaderEngine
.Builder()
.default(bitmap.asImage())
.build(),
)

composeTestRule.setContent {
val mutableUserNamesFlow = MutableStateFlow<List<UserName>>(emptyList())
RandomFilmScreen(
userNameList = mutableUserNamesFlow,
resultFilm =
Film(
slug = "test-slug",
name = "test-name",
releaseYear = 2000,
imageUrl = "test-image-url",
),
) { }
}

composeTestRule.waitForIdle()
composeTestRule.onNodeWithTag("test-share-button").performClick()
composeTestRule.onNodeWithText("The dice has spoken... Today's pick is...").assertIsDisplayed()
}

@Test
fun film_poster_click_triggers_film_clicked_action() {
val bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,15 @@ class HistoryCardTest {
pick: FilmPick,
onPosterClick: (String) -> Unit = {},
onFavoriteToggle: () -> Unit = {},
onShareClick: () -> Unit = {},
) {
composeTestRule.setContent {
HistoryCard(
pick = pick,
metaText = "Today · 10:30",
onPosterClick = onPosterClick,
onFavoriteToggle = onFavoriteToggle,
onShareClick = onShareClick,
)
}
}
Expand Down Expand Up @@ -186,4 +188,17 @@ class HistoryCardTest {

assertTrue(clickedSlug == "inception")
}

@Test
fun history_card_share_button_triggers_callback() {
var shared = false
setCardContent(
samplePick(),
onShareClick = { shared = true },
)

composeTestRule.onNodeWithContentDescription("Share").performClick()

assertTrue(shared)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.randomboxd.history.presentation

import android.graphics.Bitmap
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
Expand All @@ -10,12 +11,19 @@ import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import coil3.ImageLoader
import coil3.SingletonImageLoader
import coil3.annotation.DelicateCoilApi
import coil3.asImage
import coil3.test.FakeImageLoaderEngine
import com.nacchofer31.randomboxd.history.domain.model.FilmPick
import com.nacchofer31.randomboxd.history.presentation.HistoryScreen
import com.nacchofer31.randomboxd.history.presentation.HistoryScreenRoot
import com.nacchofer31.randomboxd.history.presentation.viewmodel.HistoryAction
import com.nacchofer31.randomboxd.random_film.domain.model.FilmGenre
import com.nacchofer31.randomboxd.random_film.domain.model.FilmSearchMode
import org.junit.After
import org.junit.Assert.assertTrue
import org.junit.Rule
import org.junit.Test
Expand All @@ -29,6 +37,20 @@ class HistoryScreenTest {
@get:Rule
val composeTestRule = createComposeRule()

private val context get() = InstrumentationRegistry.getInstrumentation().targetContext

@After
@OptIn(DelicateCoilApi::class)
fun resetImageLoader() {
SingletonImageLoader.reset()
}

private fun setImageLoader(engine: FakeImageLoaderEngine) {
SingletonImageLoader.setSafe {
ImageLoader.Builder(context).components { add(engine) }.build()
}
}

private fun samplePick(
id: Int,
filmName: String,
Expand Down Expand Up @@ -218,4 +240,31 @@ class HistoryScreenTest {
composeTestRule.onNodeWithContentDescription("Clear history").assertIsDisplayed()
composeTestRule.onNodeWithText("History").assertIsDisplayed()
}

@Test
fun history_screen_share_button_opens_share_dialog() {
val bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
setImageLoader(
FakeImageLoaderEngine
.Builder()
.default(bitmap.asImage())
.build(),
)

composeTestRule.setContent {
HistoryScreen(
picks = listOf(samplePick(id = 1, filmName = "Inception")),
showClearConfirmDialog = false,
isFavoritesOnly = false,
onBackClick = {},
onPosterClick = {},
onAction = {},
isLoading = false,
)
}

composeTestRule.waitForIdle()
composeTestRule.onNodeWithContentDescription("Share").performClick()
composeTestRule.onNodeWithText("The dice has spoken... Today's pick is...").assertIsDisplayed()
}
}
9 changes: 9 additions & 0 deletions composeApp/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,14 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import com.nacchofer31.randomboxd.core.data.OnboardingPreferences
import com.nacchofer31.randomboxd.core.data.RandomBoxdDatabase
import com.nacchofer31.randomboxd.database.getRandomBoxdDatabase
import com.nacchofer31.randomboxd.random_film.data.repository_impl.InAppReviewRepositoryImplAndroid
import com.nacchofer31.randomboxd.random_film.data.repository_impl.ShareRepositoryImplAndroid
import com.nacchofer31.randomboxd.random_film.domain.repository.InAppReviewRepository
import com.nacchofer31.randomboxd.random_film.domain.repository.ShareRepository
import io.ktor.client.engine.HttpClientEngine
import io.ktor.client.engine.okhttp.OkHttp
import org.koin.core.module.Module
Expand All @@ -18,4 +20,5 @@ actual val platformModule: Module
single<RandomBoxdDatabase> { getRandomBoxdDatabase(get()) }
single { OnboardingPreferences(get()) }
single { InAppReviewRepositoryImplAndroid() } bind InAppReviewRepository::class
single { ShareRepositoryImplAndroid(get()) } bind ShareRepository::class
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.nacchofer31.randomboxd.random_film.data.repository_impl

import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.core.content.FileProvider
import com.nacchofer31.randomboxd.random_film.domain.repository.ShareRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File

class ShareRepositoryImplAndroid(
private val context: Context,
) : ShareRepository {
override suspend fun shareImage(
image: ImageBitmap,
fileName: String,
) {
val bitmap = image.asAndroidBitmap()
val safeFileName = sanitizeFileName(fileName)
val uri =
withContext(Dispatchers.IO) {
val dir = File(context.cacheDir, "share")
dir.mkdirs()
val file = File(dir, "$safeFileName.png")
file.outputStream().use { stream ->
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
}
FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file)
}
val intent =
Intent(Intent.ACTION_SEND).apply {
type = "image/png"
putExtra(Intent.EXTRA_STREAM, uri)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
val chooser = Intent.createChooser(intent, null).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
context.startActivity(chooser)
}

private fun sanitizeFileName(fileName: String): String {
val slug = fileName.substringAfterLast('/').trimEnd('/')
val sanitized = slug.replace(Regex("[^A-Za-z0-9._-]"), "_").trim('_')
return sanitized.ifBlank { "randomboxd" }
}
}
4 changes: 4 additions & 0 deletions composeApp/src/androidMain/res/xml/file_paths.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<cache-path name="share" path="share/" />
</paths>
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="180"
android:viewportHeight="53.333"
android:width="180dp"
android:height="53.333dp">
<path
android:pathData="M173.33 53.333h-166.66c-3.6666 0 -6.6665 -2.9999 -6.6665 -6.6665v-39.999c0 -3.6666 2.9999 -6.6665 6.6665 -6.6665h166.66c3.6666 0 6.6665 2.9999 6.6665 6.6665v39.999c0 3.6666 -2.9999 6.6665 -6.6665 6.6665"
android:fillColor="#100F0D" />
<path
android:pathData="M173.33 0.001h-166.66c-3.6666 0 -6.6665 2.9999 -6.6665 6.6665v39.999c0 3.6666 2.9999 6.6665 6.6665 6.6665h166.66c3.6666 0 6.6665 -2.9999 6.6665 -6.6665v-39.999c0 -3.6666 -2.9999 -6.6665 -6.6665 -6.6665zm0 1.0661c3.0879 0 5.5999 2.5125 5.5999 5.6004v39.999c0 3.0879 -2.5119 5.6004 -5.5999 5.6004h-166.66c-3.0879 0 -5.5993 -2.5125 -5.5993 -5.6004v-39.999c0 -3.0879 2.5114 -5.6004 5.5993 -5.6004h166.66"
android:fillColor="#A2A2A1" />
<path
android:pathData="M142.58 40h2.4879v-16.669h-2.4879zm22.409 -10.664l-2.8519 7.2264h-0.0853l-2.9599 -7.2264h-2.6799l4.4399 10.1 -2.5319 5.6185h2.5946l6.8412 -15.718zm-14.11 8.7706c-0.81331 0 -1.9506 -0.40786 -1.9506 -1.4156 0 -1.2865 1.416 -1.7797 2.6373 -1.7797 1.0933 0 1.6093 0.23546 2.2733 0.55732 -0.19333 1.5442 -1.5226 2.6379 -2.9599 2.6379zm0.30133 -9.1352c-1.8013 0 -3.6666 0.79371 -4.4386 2.5521l2.208 0.92184c0.47198 -0.92184 1.3506 -1.2218 2.2733 -1.2218 1.2866 0 2.5946 0.77131 2.6159 2.1442v0.17133c-0.45066 -0.25733 -1.416 -0.64318 -2.5946 -0.64318 -2.3813 0 -4.8039 1.3077 -4.8039 3.7524 0 2.2302 1.952 3.6671 4.1386 3.6671 1.672 0 2.5959 -0.75054 3.1732 -1.6301h0.0867v1.2874h2.4026v-6.391c0 -2.9593 -2.2106 -4.6103 -5.0612 -4.6103zm-15.376 2.3937h-3.5386v-5.7133h3.5386c1.86 0 2.9159 1.5396 2.9159 2.8566 0 1.2917 -1.056 2.8567 -2.9159 2.8567zm-0.064 -8.0337h-5.9614v16.669h2.4869v-6.3149h3.4746c2.7573 0 5.4679 -1.9958 5.4679 -5.1765 0 -3.1801 -2.7106 -5.1769 -5.4679 -5.1769zm-32.507 14.778c-1.7188 0 -3.1573 -1.4396 -3.1573 -3.415 0 -1.9984 1.4385 -3.4583 3.1573 -3.4583 1.6969 0 3.0286 1.46 3.0286 3.4583 0 1.9754 -1.3317 3.415 -3.0286 3.415zm2.8567 -7.8403h-0.086c-0.55826 -0.66572 -1.6328 -1.2672 -2.9853 -1.2672 -2.8359 0 -5.4348 2.4921 -5.4348 5.6925 0 3.1786 2.5989 5.6488 5.4348 5.6488 1.3525 0 2.427 -0.6016 2.9853 -1.2885h0.086v0.81558c0 2.1703 -1.1598 3.3296 -3.0286 3.3296 -1.5245 0 -2.4697 -1.0953 -2.8567 -2.0188l-2.1691 0.90206c0.62238 1.503 2.2759 3.351 5.0259 3.351 2.9218 0 5.392 -1.7188 5.392 -5.9077v-10.181h-2.3634zm4.0822 9.7304h2.4906v-16.669h-2.4906zm6.164 -5.4988c-0.0641 -2.1911 1.6978 -3.3078 2.9645 -3.3078 0.98851 0 1.8254 0.49425 2.1057 1.2026zm7.7326 -1.8906c-0.47238 -1.2666 -1.9114 -3.6082 -4.8541 -3.6082 -2.9218 0 -5.3488 2.2983 -5.3488 5.6707 0 3.1791 2.4062 5.6707 5.6275 5.6707 2.5989 0 4.1031 -1.589 4.7264 -2.513l-1.9333 -1.289c-0.64465 0.94531 -1.5249 1.5682 -2.7931 1.5682 -1.2666 0 -2.1692 -0.58012 -2.7483 -1.7186l7.5815 -3.1359zm-60.409 -1.8682v2.4057h5.7565c-0.17186 1.3532 -0.62292 2.3411 -1.3104 3.0286 -0.83798 0.83745 -2.1483 1.7614 -4.4462 1.7614 -3.5443 0 -6.315 -2.8567 -6.315 -6.4009s2.7707 -6.4013 6.315 -6.4013c1.9118 0 3.3077 0.75198 4.3388 1.7186l1.6974 -1.6973c-1.4396 -1.3745 -3.351 -2.427 -6.0362 -2.427 -4.8552 0 -8.9363 3.9524 -8.9363 8.807 0 4.8541 4.0811 8.8066 8.9363 8.8066 2.6202 0 4.5967 -0.85932 6.143 -2.4702 1.5896 -1.5896 2.0838 -3.8234 2.0838 -5.628 0 -0.55785 -0.04333 -1.0734 -0.1292 -1.5032zm14.772 7.3675c-1.7188 0 -3.201 -1.4177 -3.201 -3.4368 0 -2.0406 1.4822 -3.4364 3.201 -3.4364 1.7181 0 3.2003 1.3958 3.2003 3.4364 0 2.0191 -1.4822 3.4368 -3.2003 3.4368zm0 -9.1075c-3.137 0 -5.6927 2.3842 -5.6927 5.6707 0 3.265 2.5557 5.6707 5.6927 5.6707 3.1358 0 5.692 -2.4057 5.692 -5.6707 0 -3.2865 -2.5562 -5.6707 -5.692 -5.6707zm12.417 9.1075c-1.7176 0 -3.2003 -1.4177 -3.2003 -3.4368 0 -2.0406 1.4828 -3.4364 3.2003 -3.4364 1.7188 0 3.2005 1.3958 3.2005 3.4364 0 2.0191 -1.4817 3.4368 -3.2005 3.4368zm0 -9.1075c-3.1358 0 -5.6915 2.3842 -5.6915 5.6707 0 3.265 2.5557 5.6707 5.6915 5.6707 3.137 0 5.6927 -2.4057 5.6927 -5.6707 0 -3.2865 -2.5557 -5.6707 -5.6927 -5.6707"
android:fillColor="#FFFFFF" />
<path
android:pathData="M27.622 25.899l-14.194 15.066c0.000534 0.0031 0.0016 0.0057 0.0021 0.0089 0.43532 1.636 1.9296 2.8406 3.703 2.8406 0.70892 0 1.3745 -0.19166 1.9453 -0.52812l0.04533 -0.02656 15.978 -9.22 -7.479 -8.141"
android:fillColor="#EB3131" />
<path
android:pathData="M41.983 23.334l-0.0136 -0.0093 -6.8982 -3.999 -7.7717 6.9156 7.7987 7.7977 6.8618 -3.9592c1.203 -0.64945 2.0197 -1.9177 2.0197 -3.3802 0 -1.452 -0.80571 -2.7139 -1.9968 -3.3655"
android:fillColor="#F6B60B" />
<path
android:pathData="M13.426 12.37c-0.08533 0.31466 -0.13018 0.64425 -0.13018 0.98651v26.623c0 0.34162 0.04432 0.67233 0.13072 0.98587l14.684 -14.681 -14.684 -13.914"
android:fillColor="#5778C5" />
<path
android:pathData="M27.727 26.668l7.3473 -7.3451 -15.96 -9.2534c-0.58012 -0.34746 -1.2572 -0.54799 -1.9817 -0.54799 -1.7734 0 -3.2697 1.2068 -3.7051 2.8447 -0.000534 0.0016 -0.000534 0.0027 -0.000534 0.0041l14.3 14.298"
android:fillColor="#3BAD49" />
<path
android:pathData="M63.193 13.042h-3.8895v0.96251h2.9146c-0.0792 0.78545 -0.39172 1.4021 -0.91878 1.85 -0.52705 0.44799 -1.2 0.67292 -1.9958 0.67292 -0.87291 0 -1.6125 -0.30413 -2.2186 -0.90824 -0.59385 -0.61665 -0.89584 -1.3792 -0.89584 -2.2979 0 -0.91864 0.30199 -1.6812 0.89584 -2.2978 0.60612 -0.60412 1.3457 -0.90624 2.2186 -0.90624 0.44799 0 0.87504 0.07707 1.2666 0.24586 0.39172 0.16866 0.70625 0.40412 0.95211 0.70625l0.73958 -0.73958c-0.33546 -0.38132 -0.76038 -0.67292 -1.2876 -0.88544 -0.52705 -0.21253 -1.077 -0.31453 -1.6708 -0.31453 -1.1645 0 -2.1519 0.40412 -2.9582 1.2104 -0.80625 0.80825 -1.2104 1.8041 -1.2104 2.9811 0 1.177 0.40412 2.175 1.2104 2.9813 0.80625 0.80611 1.7937 1.2104 2.9582 1.2104 1.2229 0 2.1979 -0.39172 2.9479 -1.1876 0.66038 -0.66238 0.99784 -1.5582 0.99784 -2.679 0 -0.1896 -0.02293 -0.39172 -0.05627 -0.60425zm1.5068 -3.7332v8.0249h4.6852v-0.98544h-3.654v-2.5457h3.2958v-0.96251h-3.2958v-2.5437h3.654v-0.98758zm11.255 0.98758v-0.98758h-5.5145v0.98758h2.2417v7.0373h1.0312v-7.0373zm4.9925 -0.98758h-1.0312v8.0249h1.0312zm6.8066 0.98758v-0.98758h-5.5144v0.98758h2.2415v7.0373h1.0312v-7.0373zm10.406 0.05626c-0.79585 -0.81877 -1.7708 -1.2229 -2.9354 -1.2229 -1.1666 0 -2.1415 0.40412 -2.9374 1.2104 -0.79585 0.79585 -1.1874 1.7937 -1.1874 2.9811s0.39159 2.1854 1.1874 2.9813c0.79585 0.80611 1.7708 1.2104 2.9374 1.2104 1.1541 0 2.1395 -0.40426 2.9354 -1.2104 0.79585 -0.79585 1.1874 -1.7938 1.1874 -2.9813 0 -1.177 -0.39159 -2.1729 -1.1874 -2.9686zm-5.1332 0.67078c0.59372 -0.60412 1.3229 -0.90624 2.1978 -0.90624 0.87291 0 1.6021 0.30213 2.1854 0.90624 0.59372 0.59372 0.88531 1.3686 0.88531 2.2978 0 0.93131 -0.29159 1.7041 -0.88531 2.2979 -0.58332 0.60412 -1.3125 0.90824 -2.1854 0.90824 -0.87491 0 -1.6041 -0.30413 -2.1978 -0.90824 -0.58132 -0.60625 -0.87291 -1.3666 -0.87291 -2.2979 0 -0.92918 0.29159 -1.6916 0.87291 -2.2978zm8.7706 1.3125l-0.0437 -1.548h0.0437l4.0791 6.5457h1.077v-8.0249h-1.0312v4.6957l0.0437 1.548h-0.0437l-3.8999 -6.2437h-1.2562v8.0249h1.0312z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="0.26666"
android:strokeMiterLimit="10" />
</vector>
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
<string name="rolling_the_dice">جاري رمي النرد...</string>
<string name="finding_random_movie">جاري البحث عن فيلمك العشوائي</string>
<string name="reroll">إعادة الرمي</string>
<string name="share">مشاركة</string>
<string name="share_card_tagline">تحدثت النرد... اختيار اليوم هو...</string>
<string name="history_title">السجل</string>
<string name="history_subtitle">اختياراتك العشوائية</string>
<string name="history_empty_state">لا توجد أفلام مختارة بعد</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
<string name="rolling_the_dice">Llançant els daus...</string>
<string name="finding_random_movie">Trobar la teva pel·lícula aleatòria</string>
<string name="reroll">Tornar a tirar</string>
<string name="share">Compartir</string>
<string name="share_card_tagline">Els daus han parlat... L'elecció d'avui és...</string>
<string name="history_title">Historial</string>
<string name="history_subtitle">Les teves seleccions aleatòries</string>
<string name="history_empty_state">Encara no has seleccionat cap pel·lícula</string>
Expand Down
Loading
Loading