Skip to content
Open
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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ Authority*](https://www.androidauthority.com/best-new-android-apps-october-2025-
productive
- Customizable timer parameters
- Support for Now Bar/Live Updates on Android 16 and later
- Android TV support with Leanback Launcher integration

## Translation

Expand Down
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ dependencies {
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)

// Android TV support
implementation(libs.androidx.leanback)

"playImplementation"(libs.revenuecat.purchases)
"playImplementation"(libs.revenuecat.purchases.ui)

Expand Down
17 changes: 16 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
<uses-permission android:name="android.permission.POST_PROMOTED_NOTIFICATIONS" />
<uses-permission android:name="android.permission.VIBRATE" />

<!-- Declare Android TV support -->
<uses-feature
android:name="android.software.leanback"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />

<application
android:name=".TomatoApplication"
android:allowBackup="true"
Expand All @@ -39,12 +47,19 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.Tomato">
android:theme="@style/Theme.Tomato"
android:banner="@drawable/tv_banner">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Intent filter for Android TV launcher -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".service.TimerService"
Expand Down
43 changes: 43 additions & 0 deletions app/src/main/res/drawable/tv_banner.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="320dp"
android:height="180dp"
android:viewportWidth="320"
android:viewportHeight="180">

<!-- Background with gradient -->
<path
android:pathData="M0,0L320,0L320,180L0,180Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="0"
android:startY="0"
android:endX="320"
android:endY="180"
android:type="linear">
<item android:offset="0" android:color="#FFEC2D01"/>
<item android:offset="1" android:color="#FFC82300"/>
</gradient>
</aapt:attr>
</path>

<!-- Tomato icon - scaled up for TV banner -->
<group
android:scaleX="1.5"
android:scaleY="1.5"
android:translateX="80"
android:translateY="42">
<path
android:pathData="M54,37A27.01,24.67 0,0 1,27 61.67,27.01 24.67,0 0,1 0,37 27.01,24.67 0,0 1,27 12.33,27.01 24.67,0 0,1 54,37Z"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:fillColor="#ffffff"
android:strokeColor="#ffffff"/>
<path
android:pathData="m34,3.5c-9.66,0.52 -9.89,6.71 -9.22,10.6l3.48,0.08c1.13,-2.8 -0.16,-6.5 7.42,-6.91 0,-1.55 0.07,-3.18 -1.68,-3.77zM39.92,11c-3.56,-0.17 -7.58,0.44 -9.39,3.55l7.41,3.5c3.18,-0.94 5.77,-1.16 8.65,-5.93 0,0 -3.11,-0.95 -6.67,-1.12zM12.89,11.16c-3.43,0.14 -6.25,0.96 -6.25,0.96 2.41,2.89 5.24,5.15 9.54,5.21 1.65,-1.88 4.05,-2.62 6.64,-3.08 -2.46,-2.7 -6.5,-3.23 -9.93,-3.09zM26.71,16.68c-9.07,-0.33 -11.94,7.41 -11.94,7.41 4.64,-0.38 8.72,-2.26 11.94,-6.43 2.58,4.94 6.8,6.14 11.59,6.04 0,0 -2.52,-6.7 -11.59,-7.02z"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:fillColor="#087830"
android:strokeColor="#ffffff"/>
</group>
</vector>
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ junit = "4.13.2"
junitVersion = "1.3.0"
kotlin = "2.2.21"
ksp = "2.3.3"
leanback = "1.2.0-alpha04"
lifecycleRuntimeKtx = "2.10.0"
materialKolor = "4.0.5"
navigation3 = "1.0.0"
Expand All @@ -23,6 +24,7 @@ androidx-compose-bom = { group = "androidx.compose", name = "compose-bom-alpha",
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-leanback = { group = "androidx.leanback", name = "leanback", version.ref = "leanback" }
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "lifecycleRuntimeKtx" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" }
Expand Down