From 4f661c81a3116a66fa2689b9a31c1ced177ccb12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaquim=20St=C3=A4hli?= Date: Tue, 26 Sep 2023 14:30:04 +0200 Subject: [PATCH 1/7] Add demo shared module and demo tv application --- build.gradle.kts | 1 + gradle/libs.versions.toml | 11 +++ pillarbox-analytics/build.gradle.kts | 1 + pillarbox-core-business/build.gradle.kts | 1 + pillarbox-demo-shared/.gitignore | 1 + pillarbox-demo-shared/build.gradle.kts | 40 +++++++++ pillarbox-demo-shared/consumer-rules.pro | 0 pillarbox-demo-shared/proguard-rules.pro | 21 +++++ .../src/main/AndroidManifest.xml | 8 ++ .../srgssr/pillarbox/demo/data/DemoBrowser.kt | 2 +- .../ch/srgssr/pillarbox/demo/data/DemoItem.kt | 2 +- .../demo/data/MixedMediaItemSource.kt | 2 +- .../ch/srgssr/pillarbox/demo/data/Playlist.kt | 2 +- pillarbox-demo-tv/.gitignore | 1 + pillarbox-demo-tv/build.gradle.kts | 76 ++++++++++++++++++ pillarbox-demo-tv/proguard-rules.pro | 21 +++++ .../src/main/AndroidManifest.xml | 32 ++++++++ .../pillarbox/demo/tv/DemoTvApplication.kt | 14 ++++ .../srgssr/pillarbox/demo/tv/MainActivity.kt | 49 +++++++++++ .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/themes.xml | 8 ++ pillarbox-demo/build.gradle.kts | 2 + .../demo/ui/examples/ExamplesHome.kt | 2 +- pillarbox-player-testutils/build.gradle.kts | 1 + pillarbox-player/build.gradle.kts | 1 + pillarbox-ui/build.gradle.kts | 1 + settings.gradle | 2 + 32 files changed, 300 insertions(+), 5 deletions(-) create mode 100644 pillarbox-demo-shared/.gitignore create mode 100644 pillarbox-demo-shared/build.gradle.kts create mode 100644 pillarbox-demo-shared/consumer-rules.pro create mode 100644 pillarbox-demo-shared/proguard-rules.pro create mode 100644 pillarbox-demo-shared/src/main/AndroidManifest.xml rename {pillarbox-demo => pillarbox-demo-shared}/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt (97%) rename {pillarbox-demo => pillarbox-demo-shared}/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt (99%) rename {pillarbox-demo => pillarbox-demo-shared}/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt (95%) rename {pillarbox-demo => pillarbox-demo-shared}/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt (99%) create mode 100644 pillarbox-demo-tv/.gitignore create mode 100644 pillarbox-demo-tv/build.gradle.kts create mode 100644 pillarbox-demo-tv/proguard-rules.pro create mode 100644 pillarbox-demo-tv/src/main/AndroidManifest.xml create mode 100644 pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/DemoTvApplication.kt create mode 100644 pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/MainActivity.kt create mode 100644 pillarbox-demo-tv/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 pillarbox-demo-tv/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 pillarbox-demo-tv/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 pillarbox-demo-tv/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 pillarbox-demo-tv/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 pillarbox-demo-tv/src/main/res/values/strings.xml create mode 100644 pillarbox-demo-tv/src/main/res/values/themes.xml diff --git a/build.gradle.kts b/build.gradle.kts index 4b37ac619..eb5a1e991 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,7 @@ */ import io.gitlab.arturbosch.detekt.Detekt // Top-level build file where you can add configuration options common to all sub-projects/modules. +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { // known bug for libs : https://developer.android.com/studio/preview/features#gradle-version-catalogs-known-issues alias(libs.plugins.android.application) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0e96f8f41..bbe262468 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,6 +29,11 @@ tagCommanderServerSide = "5.5.0" # ComScore : https://github.com/comScore/ComScore-Android comscore = "6.10.0" androidxComposeBom = "2023.08.00" +leanback = "1.0.0" +tvCompose = "1.0.0-alpha07" +androidx-test-ext-junit = "1.1.5" +appcompat = "1.6.1" +material = "1.9.0" [libraries] accompanist-navigation-material = { module = "com.google.accompanist:accompanist-navigation-material", version.ref = "accompanist" } @@ -37,6 +42,8 @@ androidx-activity-compose = { module = "androidx.activity:activity-compose", ver androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } androidx-paging-compose = { module = "androidx.paging:paging-compose", version.ref = "pagingCompose" } +androidx-tv-foundation = { module = "androidx.tv:tv-foundation", version.ref = "tvCompose" } +androidx-tv-material = { module = "androidx.tv:tv-material", version.ref = "tvCompose" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorVersion" } ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktorVersion" } @@ -80,6 +87,10 @@ androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "u androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" } +leanback = { group = "androidx.leanback", name = "leanback", version.ref = "leanback" } +androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } diff --git a/pillarbox-analytics/build.gradle.kts b/pillarbox-analytics/build.gradle.kts index d9c078a73..f81f90b3b 100644 --- a/pillarbox-analytics/build.gradle.kts +++ b/pillarbox-analytics/build.gradle.kts @@ -2,6 +2,7 @@ * Copyright (c) 2022. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) diff --git a/pillarbox-core-business/build.gradle.kts b/pillarbox-core-business/build.gradle.kts index 593b5dea0..ada2217bf 100644 --- a/pillarbox-core-business/build.gradle.kts +++ b/pillarbox-core-business/build.gradle.kts @@ -2,6 +2,7 @@ * Copyright (c) 2022. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) diff --git a/pillarbox-demo-shared/.gitignore b/pillarbox-demo-shared/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/pillarbox-demo-shared/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/pillarbox-demo-shared/build.gradle.kts b/pillarbox-demo-shared/build.gradle.kts new file mode 100644 index 000000000..fbe609265 --- /dev/null +++ b/pillarbox-demo-shared/build.gradle.kts @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023. SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "ch.srgssr.pillarbox.demo.shared" + compileSdk = AppConfig.compileSdk + + defaultConfig { + minSdk = AppConfig.minSdk + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + compileOnly(project(mapOf("path" to ":pillarbox-core-business"))) + implementation(libs.androidx.ktx) +} diff --git a/pillarbox-demo-shared/consumer-rules.pro b/pillarbox-demo-shared/consumer-rules.pro new file mode 100644 index 000000000..e69de29bb diff --git a/pillarbox-demo-shared/proguard-rules.pro b/pillarbox-demo-shared/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/pillarbox-demo-shared/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/pillarbox-demo-shared/src/main/AndroidManifest.xml b/pillarbox-demo-shared/src/main/AndroidManifest.xml new file mode 100644 index 000000000..09709e5c1 --- /dev/null +++ b/pillarbox-demo-shared/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt similarity index 97% rename from pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt rename to pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt index 1bade0629..0bc7f2f44 100644 --- a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt +++ b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoBrowser.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022. SRG SSR. All rights reserved. + * Copyright (c) 2023. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ package ch.srgssr.pillarbox.demo.data diff --git a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt similarity index 99% rename from pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt rename to pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt index eefe86d95..627f49a73 100644 --- a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt +++ b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/DemoItem.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022. SRG SSR. All rights reserved. + * Copyright (c) 2023. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ @file:Suppress("MaximumLineLength", "MaxLineLength") diff --git a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt similarity index 95% rename from pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt rename to pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt index c404c9d17..6b0b2832b 100644 --- a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt +++ b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/MixedMediaItemSource.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022. SRG SSR. All rights reserved. + * Copyright (c) 2023. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ package ch.srgssr.pillarbox.demo.data diff --git a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt similarity index 99% rename from pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt rename to pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt index 60bdfc8d2..10980b77a 100644 --- a/pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt +++ b/pillarbox-demo-shared/src/main/java/ch/srgssr/pillarbox/demo/data/Playlist.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022. SRG SSR. All rights reserved. + * Copyright (c) 2023. SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ package ch.srgssr.pillarbox.demo.data diff --git a/pillarbox-demo-tv/.gitignore b/pillarbox-demo-tv/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/pillarbox-demo-tv/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/pillarbox-demo-tv/build.gradle.kts b/pillarbox-demo-tv/build.gradle.kts new file mode 100644 index 000000000..07664c18d --- /dev/null +++ b/pillarbox-demo-tv/build.gradle.kts @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023. SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ +@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "ch.srgssr.pillarbox.demo.tv" + compileSdk = AppConfig.compileSdk + + defaultConfig { + applicationId = "ch.srgssr.pillarbox.demo.tv" + minSdk = AppConfig.minSdk + targetSdk = AppConfig.targetSdk + versionCode = VersionConfig.versionCode() + versionName = VersionConfig.versionName() + } + + signingConfigs { + create("release") { + val password = System.getenv("DEMO_KEY_PASSWORD") ?: extra.properties["pillarbox.keystore.password"] as String? + storeFile = file("./demo.keystore") + storePassword = password + keyAlias = "demo" + keyPassword = password + } + } + + buildTypes { + debug { + applicationIdSuffix = ".debug" + versionNameSuffix = "-debug" + } + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + compose = true + } + + composeOptions { + kotlinCompilerExtensionVersion = AppConfig.composeCompiler + } +} + +dependencies { + implementation(project(mapOf("path" to ":pillarbox-core-business"))) + implementation(project(mapOf("path" to ":pillarbox-analytics"))) + implementation(project(mapOf("path" to ":pillarbox-ui"))) + implementation(project(mapOf("path" to ":pillarbox-demo-shared"))) + implementation(libs.androidx.ktx) + implementation(libs.leanback) + + val composeBom = libs.androidx.compose.bom + implementation(platform(composeBom)) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.tooling.preview) + + // Compose for TV dependencies + implementation(libs.androidx.tv.foundation) + implementation(libs.androidx.tv.material) +} diff --git a/pillarbox-demo-tv/proguard-rules.pro b/pillarbox-demo-tv/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/pillarbox-demo-tv/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/pillarbox-demo-tv/src/main/AndroidManifest.xml b/pillarbox-demo-tv/src/main/AndroidManifest.xml new file mode 100644 index 000000000..4490dac6a --- /dev/null +++ b/pillarbox-demo-tv/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/DemoTvApplication.kt b/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/DemoTvApplication.kt new file mode 100644 index 000000000..cb5489b96 --- /dev/null +++ b/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/DemoTvApplication.kt @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023. SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ +package ch.srgssr.pillarbox.demo.tv + +import android.app.Application + +/** + * Demo tv application + * + * @constructor Create empty Demo tv application + */ +class DemoTvApplication : Application() diff --git a/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/MainActivity.kt b/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/MainActivity.kt new file mode 100644 index 000000000..abc12088c --- /dev/null +++ b/pillarbox-demo-tv/src/main/java/ch/srgssr/pillarbox/demo/tv/MainActivity.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023. SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ +@file:OptIn(ExperimentalTvMaterial3Api::class) + +package ch.srgssr.pillarbox.demo.tv + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.tv.material3.ExperimentalTvMaterial3Api +import androidx.tv.material3.MaterialTheme +import androidx.tv.material3.Surface +import androidx.tv.material3.Text + +/** + * Main activity + * + * @constructor Create empty Main activity + */ +class MainActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + MaterialTheme { + Surface { + MainView() + } + } + } + } + + @Composable + private fun MainView() { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Text( + text = "Hello Tv!", + style = MaterialTheme.typography.titleLarge + ) + } + } +} diff --git a/pillarbox-demo-tv/src/main/res/mipmap-hdpi/ic_launcher.webp b/pillarbox-demo-tv/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/pillarbox-demo-tv/src/main/res/mipmap-mdpi/ic_launcher.webp b/pillarbox-demo-tv/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuHB%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!To6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/pillarbox-demo-tv/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/pillarbox-demo-tv/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..28d4b77f9f036a47549d47db79c16788749dca10 GIT binary patch literal 2884 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 + Pillarbox Demo Tv + \ No newline at end of file diff --git a/pillarbox-demo-tv/src/main/res/values/themes.xml b/pillarbox-demo-tv/src/main/res/values/themes.xml new file mode 100644 index 000000000..ee4d5bbf7 --- /dev/null +++ b/pillarbox-demo-tv/src/main/res/values/themes.xml @@ -0,0 +1,8 @@ + + + +