Rebrand as Smithflix and add APK build workflow

- New app id (us.smithflix.tv) so it installs next to the official Jellyfin app
- Smithflix name, launcher icon, Android TV banner and in-app logo
- Signed release APK built on every push and published to the 'latest' release

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011TdkZRTCV92L7gbQX2Z5Ay
This commit is contained in:
Claude 2026-10-09 20:38:42 -04:00
parent 09c912d392
commit 117978e354
No known key found for this signature in database
29 changed files with 104 additions and 367 deletions

View file

@ -1,37 +0,0 @@
name: App / Build
on:
push:
branches:
- master
- release-*
pull_request:
permissions:
contents: read
jobs:
build:
name: Build
runs-on: ubuntu-26.04
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version-file: .tools-versions
- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Assemble debug APKs
run: ./gradlew assembleDebug
- name: Create publish bundle
run: mkdir -p build/gh-app-publish/; find app/build/ -iname "*.apk" -exec mv "{}" build/gh-app-publish/ \;
- name: Upload artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: build-artifacts
retention-days: 14
if-no-files-found: error
path: build/gh-app-publish/

View file

@ -1,41 +0,0 @@
name: App / Lint
on:
push:
branches:
- master
- release-*
pull_request:
permissions:
contents: read
security-events: write
jobs:
lint:
name: Lint
runs-on: ubuntu-26.04
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version-file: .tools-versions
- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Run detekt and lint tasks
run: ./gradlew detekt lint
- name: Upload Detekt SARIF
uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
if: ${{ always() }}
with:
sarif_file: build/reports/detekt/detekt.sarif
category: detekt
- name: Upload Android SARIF
uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
if: ${{ always() }}
with:
sarif_file: app/build/reports/lint-results-debug.sarif
category: android

View file

@ -1,81 +0,0 @@
name: App / Publish
on:
push:
tags:
- v*
jobs:
publish:
name: Publish
runs-on: ubuntu-26.04
if: ${{ contains(github.repository_owner, 'jellyfin') }}
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version-file: .tools-versions
- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Set JELLYFIN_VERSION
run: echo "JELLYFIN_VERSION=$(echo ${GITHUB_REF#refs/tags/v} | tr / -)" >> $GITHUB_ENV
- name: Decode keystore
run: echo "${{ secrets.KEYSTORE }}" | base64 --decode > keystore.jks
- name: Assemble release files
env:
KEYSTORE_FILE: ${{ github.workspace }}/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: ./gradlew assemble bundleRelease versionTxt
- name: Prepare release archive
run: |
mkdir -p build/jellyfin-publish
mv app/build/outputs/apk/debug/jellyfin-androidtv-*-debug.apk build/jellyfin-publish/
mv app/build/outputs/apk/release/jellyfin-androidtv-*-release.apk build/jellyfin-publish/
mv app/build/outputs/bundle/release/jellyfin-androidtv-*-release.aab build/jellyfin-publish/
mv app/build/version.txt build/jellyfin-publish/
- name: Upload release archive to GitHub release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload "$GITHUB_REF_NAME" build/jellyfin-publish/* --clobber
- name: Configure deployment
run: |
mkdir -p ~/.ssh
echo "${{ secrets.REPO_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
- name: Upload release archive to repo.jellyfin.org
env:
TARGET_PATH: /srv/incoming/androidtv/v${{ env.JELLYFIN_VERSION }}/
SOURCE_PATH: build/jellyfin-publish/
run: rsync -vrptz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no" "$SOURCE_PATH" "${{ secrets.REPO_USER }}@${{ secrets.REPO_HOST }}:$TARGET_PATH"
- name: Update repo.jellyfin.org symlinks
env:
REPO_HOST: ${{ secrets.REPO_HOST }}
REPO_USER: ${{ secrets.REPO_USER }}
run: |
ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no "${REPO_USER}@${REPO_HOST}" "bash -s" <<EOF
if [ -d "/srv/repository/main/client/androidtv/versions/v${{ env.JELLYFIN_VERSION }}" ] && [ -n "${{ env.JELLYFIN_VERSION }}" ]; then
sudo rm -r /srv/repository/main/client/androidtv/versions/v${{ env.JELLYFIN_VERSION }}
fi
sudo mv /srv/incoming/androidtv/v${{ env.JELLYFIN_VERSION }} /srv/repository/main/client/androidtv/versions/v${{ env.JELLYFIN_VERSION }}
cd /srv/repository/main/client/androidtv;
sudo rm -rf *.apk version.txt;
sudo ln -s versions/v${{ env.JELLYFIN_VERSION }}/jellyfin-androidtv-v${{ env.JELLYFIN_VERSION }}-*.apk .;
sudo ln -s versions/v${{ env.JELLYFIN_VERSION }}/version.txt .;
EOF

View file

@ -1,28 +0,0 @@
name: App / Test
on:
push:
branches:
- master
- release-*
pull_request:
permissions:
contents: read
jobs:
test:
name: Test
runs-on: ubuntu-26.04
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version-file: .tools-versions
- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Run test task
run: ./gradlew test

View file

@ -1,18 +0,0 @@
name: Repo / Label merge conflict
on:
push:
pull_request_target:
types:
- synchronize
jobs:
triage:
name: Triage
runs-on: ubuntu-26.04
if: ${{ contains(github.repository_owner, 'jellyfin') }}
steps:
- uses: eps1lon/actions-label-merge-conflict@0273be72a0bbd58fcd71d0d6c02c209b50d1e5e1 # v3.1.0
with:
dirtyLabel: merge conflict
repoToken: ${{ secrets.JF_BOT_TOKEN }}

View file

@ -1,32 +0,0 @@
name: Repo / Reply stale issue
on:
schedule:
- cron: '30 3 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
triage:
name: Triage
runs-on: ubuntu-26.04
if: ${{ contains(github.repository_owner, 'jellyfin') }}
steps:
- uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0
with:
repo-token: ${{ secrets.JF_BOT_TOKEN }}
days-before-stale: 120
days-before-pr-stale: -1
days-before-close: 21
days-before-pr-close: -1
exempt-issue-labels: enhancement,confirmed
stale-issue-label: stale
stale-issue-message: |-
This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments.
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or master branch, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on [Matrix or Social Media](https://docs.jellyfin.org/general/getting-help.html).

View file

@ -1,19 +0,0 @@
name: Repo / Triage
on:
pull_request_target:
types:
- opened
- ready_for_review
jobs:
review-add:
name: Add to reviews project
runs-on: ubuntu-26.04
if: ${{ contains(github.repository_owner, 'jellyfin') && !github.event.pull_request.draft }}
steps:
- name: Add pull request to organization project
env:
GH_TOKEN: ${{ secrets.GH_PROJECTS_TOKEN }}
PROJECT_ID: ${{ secrets.PROJECT_ANDROID_TRIAGE }}
run: gh project item-add "$PROJECT_ID" --owner "${{ github.repository_owner }}" --url "${{ github.event.pull_request.html_url }}"

68
.github/workflows/smithflix-build.yaml vendored Normal file
View file

@ -0,0 +1,68 @@
name: Smithflix / Build APK
# Builds a signed Smithflix APK on every push to master and publishes it to the
# "latest" release, so it can always be downloaded from the same address:
# https://github.com/<owner>/smithflix/releases/download/latest/smithflix.apk
on:
push:
branches:
- master
workflow_dispatch:
permissions:
contents: write
concurrency:
group: smithflix-build
cancel-in-progress: true
jobs:
build:
name: Build and publish
runs-on: ubuntu-26.04
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version-file: .tools-versions
- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Build release APK
env:
JELLYFIN_VERSION: 1.0.${{ github.run_number }}
KEYSTORE_FILE: ${{ github.workspace }}/smithflix/smithflix-release.jks
KEYSTORE_PASSWORD: smithflix-release
SIGNING_KEY_ALIAS: smithflix
SIGNING_KEY_PASSWORD: smithflix-release
run: ./gradlew assembleRelease
- name: Collect APK
run: |
apk=$(find app/build/outputs/apk/release -name '*.apk' | head -n1)
test -n "$apk"
cp "$apk" smithflix.apk
ls -la smithflix.apk
- name: Publish to the "latest" release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release delete latest --yes --cleanup-tag || true
gh release create latest smithflix.apk \
--title "Smithflix 1.0.${{ github.run_number }}" \
--notes "Built from ${GITHUB_SHA::7}. Install on Fire TV / Android TV with the Downloader app using the smithflix.apk link." \
--target "${GITHUB_SHA}"
- name: Keep a copy with the run
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: smithflix-apk
retention-days: 30
path: smithflix.apk

View file

@ -13,8 +13,8 @@ android {
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
// Release version
applicationId = namespace
// Smithflix: own application id so it installs alongside the official Jellyfin app
applicationId = "us.smithflix.tv"
versionName = project.getVersionName()
versionCode = getVersionCode(versionName!!)
}
@ -58,9 +58,9 @@ android {
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
// Set package names used in various XML files
resValue("string", "app_id", namespace!!)
resValue("string", "app_search_suggest_authority", "${namespace}.content")
resValue("string", "app_search_suggest_intent_data", "content://${namespace}.content/intent")
resValue("string", "app_id", "us.smithflix.tv")
resValue("string", "app_search_suggest_authority", "us.smithflix.tv.content")
resValue("string", "app_search_suggest_intent_data", "content://us.smithflix.tv.content/intent")
// Set flavored application name
resValue("string", "app_name", "@string/app_name_release")
@ -75,9 +75,9 @@ android {
applicationIdSuffix = ".debug"
// Set package names used in various XML files
resValue("string", "app_id", namespace + applicationIdSuffix)
resValue("string", "app_search_suggest_authority", "${namespace + applicationIdSuffix}.content")
resValue("string", "app_search_suggest_intent_data", "content://${namespace + applicationIdSuffix}.content/intent")
resValue("string", "app_id", "us.smithflix.tv" + applicationIdSuffix)
resValue("string", "app_search_suggest_authority", "us.smithflix.tv${applicationIdSuffix}.content")
resValue("string", "app_search_suggest_intent_data", "content://us.smithflix.tv${applicationIdSuffix}.content/intent")
// Set flavored application name
resValue("string", "app_name", "@string/app_name_debug")
@ -97,7 +97,7 @@ android {
}
}
base.archivesName.set("jellyfin-androidtv-v${project.getVersionName()}")
base.archivesName.set("smithflix-v${project.getVersionName()}")
tasks.register("versionTxt") {
val path = layout.buildDirectory.asFile.get().resolve("version.txt")

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -4,6 +4,6 @@
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#000B25"
android:fillColor="#090C14"
android:pathData="M0,0h108v108h-108z" />
</vector>

View file

@ -4,39 +4,14 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M47.45,59.31C46.59,57.58 52.24,47.33 54,47.33C55.76,47.33 61.4,57.6 60.55,59.31C59.7,61.02 48.31,61.04 47.45,59.31Z">
<path android:pathData="M41.47,27.28L38.82,27.50 36.25,28.09 33.67,29.37 31.69,30.77 29.84,32.84 28.45,35.12 27.37,37.99 27.10,39.20 27.00,40.34 27.18,43.06 27.80,45.71 28.90,48.29 30.26,50.32 31.49,51.62 32.99,52.85 43.43,59.84 44.86,61.32 45.67,62.89 45.91,64.03 45.91,65.16 45.66,66.30 45.15,67.42 44.49,68.32 43.63,69.05 42.68,69.55 41.55,69.86 40.04,69.90 38.67,69.49 37.21,68.54 36.09,67.26 35.56,66.14 35.31,64.94 35.31,63.27 35.72,60.47 35.60,59.95 35.22,59.66 34.41,59.69 33.30,60.08 32.01,60.79 30.73,61.73 29.67,62.72 28.75,63.81 28.10,64.86 27.64,65.99 27.36,67.20 27.23,68.49 27.26,69.63 27.48,70.91 27.91,72.73 28.34,73.94 28.95,75.08 29.85,76.28 31.57,77.96 32.55,78.60 33.60,79.13 37.31,80.35 38.67,80.61 40.11,80.72 41.55,80.68 42.98,80.46 44.65,80.04 46.54,79.40 49.50,77.98 50.62,77.21 51.71,76.28 52.68,75.21 53.78,73.72 54.88,71.97 55.56,70.61 56.06,69.17 56.46,67.43 56.63,66.14 56.66,64.63 56.38,61.60 55.63,59.03 54.39,56.38 52.74,54.12 51.38,52.78 49.87,51.65 44.42,48.12 39.66,45.21 38.50,44.25 37.65,43.28 37.11,42.00 37.16,40.64 37.80,39.15 38.34,38.48 38.93,37.98 40.11,37.49 41.47,37.41 42.98,37.70 44.58,38.37 47.30,39.88 59.56,47.37 65.77,50.99 66.98,51.86 67.68,52.66 67.92,53.29 67.92,53.94 67.67,54.57 67.16,55.20 65.99,56.08 61.03,59.01 60.35,59.59 59.92,60.23 59.65,61.31 59.68,64.25 59.47,66.45 59.17,67.96 58.41,70.46 58.46,70.94 58.71,71.19 59.19,71.22 59.88,71.00 62.66,69.48 71.74,63.98 77.93,59.88 79.28,58.61 80.28,57.14 80.79,55.70 81.00,53.89 80.96,52.75 80.78,51.69 80.41,50.63 79.88,49.66 78.52,48.07 76.13,46.28 64.25,38.91 57.14,34.78 48.36,29.40 46.47,28.47 44.65,27.79 43.06,27.42Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="74"
android:endY="67"
android:startX="40.67"
android:startY="48.67"
android:type="linear">
<item
android:color="#FFAA5CC3"
android:offset="0" />
<item
android:color="#FF00A4DC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillType="evenOdd"
android:pathData="M34.27,68.11C31.67,62.89 48.71,32 54,32C59.3,32 76.31,62.95 73.74,68.11C71.17,73.27 36.87,73.33 34.27,68.11ZM41.08,63.58C42.78,67 65.25,66.96 66.94,63.58C68.62,60.2 57.47,39.92 54.01,39.92C50.54,39.92 39.37,60.16 41.08,63.58Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="74"
android:endY="67"
android:startX="40.67"
android:startY="48.67"
android:type="linear">
<item
android:color="#FFAA5CC3"
android:offset="0" />
<item
android:color="#FF00A4DC"
android:offset="1" />
android:type="linear"
android:startX="27.0" android:startY="81.0"
android:endX="81.0" android:endY="27.0">
<item android:offset="0" android:color="#FF0A63F2" />
<item android:offset="1" android:color="#FF0FE6FF" />
</gradient>
</aapt:attr>
</path>

View file

@ -1,13 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#FFFFFF"
android:pathData="M47.45,59.31C46.59,57.58 52.24,47.33 54,47.33C55.76,47.33 61.4,57.6 60.55,59.31C59.7,61.02 48.31,61.04 47.45,59.31Z" />
<path
android:fillColor="#FFFFFF"
android:pathData="M34.27,68.11C31.67,62.89 48.71,32 54,32C59.3,32 76.31,62.95 73.74,68.11C71.17,73.27 36.87,73.33 34.27,68.11ZM41.08,63.58C42.78,67 65.25,66.96 66.94,63.58C68.62,60.2 57.47,39.92 54.01,39.92C50.54,39.92 39.37,60.16 41.08,63.58Z" />
android:fillColor="#FFFFFFFF"
android:pathData="M41.47,27.28L38.82,27.50 36.25,28.09 33.67,29.37 31.69,30.77 29.84,32.84 28.45,35.12 27.37,37.99 27.10,39.20 27.00,40.34 27.18,43.06 27.80,45.71 28.90,48.29 30.26,50.32 31.49,51.62 32.99,52.85 43.43,59.84 44.86,61.32 45.67,62.89 45.91,64.03 45.91,65.16 45.66,66.30 45.15,67.42 44.49,68.32 43.63,69.05 42.68,69.55 41.55,69.86 40.04,69.90 38.67,69.49 37.21,68.54 36.09,67.26 35.56,66.14 35.31,64.94 35.31,63.27 35.72,60.47 35.60,59.95 35.22,59.66 34.41,59.69 33.30,60.08 32.01,60.79 30.73,61.73 29.67,62.72 28.75,63.81 28.10,64.86 27.64,65.99 27.36,67.20 27.23,68.49 27.26,69.63 27.48,70.91 27.91,72.73 28.34,73.94 28.95,75.08 29.85,76.28 31.57,77.96 32.55,78.60 33.60,79.13 37.31,80.35 38.67,80.61 40.11,80.72 41.55,80.68 42.98,80.46 44.65,80.04 46.54,79.40 49.50,77.98 50.62,77.21 51.71,76.28 52.68,75.21 53.78,73.72 54.88,71.97 55.56,70.61 56.06,69.17 56.46,67.43 56.63,66.14 56.66,64.63 56.38,61.60 55.63,59.03 54.39,56.38 52.74,54.12 51.38,52.78 49.87,51.65 44.42,48.12 39.66,45.21 38.50,44.25 37.65,43.28 37.11,42.00 37.16,40.64 37.80,39.15 38.34,38.48 38.93,37.98 40.11,37.49 41.47,37.41 42.98,37.70 44.58,38.37 47.30,39.88 59.56,47.37 65.77,50.99 66.98,51.86 67.68,52.66 67.92,53.29 67.92,53.94 67.67,54.57 67.16,55.20 65.99,56.08 61.03,59.01 60.35,59.59 59.92,60.23 59.65,61.31 59.68,64.25 59.47,66.45 59.17,67.96 58.41,70.46 58.46,70.94 58.71,71.19 59.19,71.22 59.88,71.00 62.66,69.48 71.74,63.98 77.93,59.88 79.28,58.61 80.28,57.14 80.79,55.70 81.00,53.89 80.96,52.75 80.78,51.69 80.41,50.63 79.88,49.66 78.52,48.07 76.13,46.28 64.25,38.91 57.14,34.78 48.36,29.40 46.47,28.47 44.65,27.79 43.06,27.42Z" />
</vector>

View file

@ -1,46 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="252dp"
android:height="72dp"
android:viewportWidth="252"
android:viewportHeight="72">
<path android:pathData="M24.71,49.16c-1.55,-3.12 8.63,-21.57 11.79,-21.57 3.17,0 13.32,18.49 11.79,21.57 -1.53,3.08 -22.02,3.12 -23.58,0z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="72.5"
android:endY="63"
android:startX="12.5"
android:startY="30"
android:tileMode="clamp">
<item
android:color="#AA5CC3"
android:offset="0" />
<item
android:color="#00A4DC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillType="evenOdd"
android:pathData="M0.98,65C-3.69,55.61 26.98,0 36.5,0c9.53,0 40.15,55.71 35.53,65s-66.37,9.39 -71.04,0m12.26,-8.15c3.07,6.15 43.52,6.08 46.55,0 3.03,-6.09 -17.03,-42.59 -23.27,-42.59S10.17,50.69 13.23,56.85z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="72.5"
android:endY="63"
android:startX="12.5"
android:startY="30"
android:tileMode="clamp">
<item
android:color="#AA5CC3"
android:offset="0" />
<item
android:color="#00A4DC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFF"
android:pathData="M143.24,14.25c-0.28,0 -0.42,0 -0.52,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.53L142.44,55.2c0,0.28 0,0.42 0.05,0.53 0.05,0.09 0.13,0.17 0.22,0.22 0.11,0.05 0.25,0.05 0.53,0.05h5.63c0.28,0 0.42,-0 0.53,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53L149.67,15.06c0,-0.28 0,-0.42 -0.05,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.53,-0.05zM154.86,14.25c-0.28,0 -0.42,0 -0.53,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.53L154.06,55.2c0,0.28 0,0.42 0.05,0.53 0.05,0.09 0.12,0.17 0.22,0.22 0.11,0.05 0.25,0.05 0.53,0.05h5.62c0.28,0 0.42,-0 0.53,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53L161.28,15.06c0,-0.28 0,-0.42 -0.05,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.53,-0.05zM208.55,14.25q-5.18,0 -8.27,2.81 -3.09,2.81 -3.09,7.94L197.19,26h-10.17c-0.3,0 -0.45,0 -0.58,0.05a0.75,0.75 0,0 0,-0.29 0.21c-0.09,0.1 -0.14,0.24 -0.25,0.52l-7.43,19.9 -7.48,-19.9c-0.1,-0.28 -0.16,-0.42 -0.25,-0.52a0.76,0.76 0,0 0,-0.3 -0.2c-0.13,-0.05 -0.28,-0.05 -0.58,-0.05h-5.77c-0.39,0 -0.59,0 -0.72,0.08a0.5,0.5 0,0 0,-0.21 0.31c-0.03,0.15 0.04,0.33 0.19,0.7L174.78,56l-0.66,1.6q-0.88,1.87 -2.04,3.03 -1.1,1.16 -3.58,1.16 -0.88,0 -1.88,-0.17a13,13 0,0 1,-0.73 -0.1c-0.39,-0.06 -0.58,-0.1 -0.71,-0.05a0.47,0.47 0,0 0,-0.26 0.22c-0.07,0.12 -0.07,0.3 -0.07,0.66v4.33c0,0.24 0,0.37 0.05,0.48a0.74,0.74 0,0 0,0.19 0.27c0.09,0.08 0.19,0.12 0.39,0.18a8,8 0,0 0,1.47 0.35q1.16,0.22 2.37,0.22 4.24,0 7.06,-2.43 2.87,-2.37 4.58,-6.73l10.52,-26.58h5.72v22.75c0,0.28 0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.52,0.05h5.63c0.28,0 0.42,-0 0.53,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53L204.42,32.45h5.87c0.28,0 0.42,0 0.52,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53L211.09,26.8c0,-0.28 0,-0.42 -0.05,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.52,-0.05h-5.87v-0.99q0,-2.26 1.32,-3.31 1.38,-1.1 3.75,-1.1 0.46,0 0.94,0.05c0.34,0.03 0.52,0.05 0.63,-0a0.48,0.48 0,0 0,0.24 -0.22c0.06,-0.11 0.06,-0.28 0.06,-0.6v-4.43c0,-0.3 0,-0.46 -0.06,-0.59a0.7,0.7 0,0 0,-0.25 -0.29c-0.12,-0.08 -0.26,-0.1 -0.54,-0.13a14,14 0,0 0,-1.97 -0.13zM99.46,14.92c-0.28,0 -0.42,0 -0.53,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.52v27.82q0,2.54 -1.6,4.08 -1.54,1.49 -4.19,1.49h-1.57c-0.28,0 -0.42,0 -0.53,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.53v5.29c0,0.28 0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.53,0.05h1.57q4.08,0 7.06,-1.6 3.03,-1.6 4.63,-4.47 1.65,-2.87 1.66,-6.67L106.22,15.72c0,-0.28 -0,-0.42 -0.06,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.53,-0.05zM213.99,14.92c-0.16,0 -0.26,0.01 -0.34,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.52v6.12c0,0.28 0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.53,0.05h5.63c0.28,0 0.42,0 0.52,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53v-6.12c0,-0.28 0,-0.42 -0.05,-0.52a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.52,-0.05zM124.56,25.34q-4.19,0 -7.61,2.04 -3.36,2.04 -5.35,5.57 -1.93,3.47 -1.93,8 0,4.36 1.93,7.94c1.93,3.59 3.09,4.28 5.4,5.68q3.47,2.1 8.11,2.1 4.58,0 8,-2.04 3.09,-1.87 4.53,-4.61c0.11,-0.22 0.17,-0.33 0.17,-0.45a0.53,0.53 0,0 0,-0.1 -0.3c-0.07,-0.1 -0.19,-0.16 -0.43,-0.27l-4.27,-2.09c-0.31,-0.15 -0.47,-0.23 -0.61,-0.24a0.6,0.6 0,0 0,-0.35 0.08c-0.12,0.07 -0.24,0.22 -0.48,0.54a8.2,8.2 0,0 1,-2.21 1.99q-1.71,1.05 -4.19,1.05 -3.26,0 -5.46,-1.98 -2.2,-1.99 -2.54,-5.3h21.06c0.2,0 0.3,0 0.39,-0.04a0.55,0.55 0,0 0,0.21 -0.17c0.06,-0.08 0.08,-0.17 0.12,-0.33q0.09,-0.39 0.12,-0.84 0.11,-0.83 0.11,-1.65 0,-4.03 -1.71,-7.33t-4.96,-5.3q-3.26,-2.04 -7.94,-2.04m115.64,0q-2.81,0 -5.07,1.1a7.9,7.9 0,0 0,-3.42 3.25L231.71,26.8c0,-0.28 0,-0.42 -0.05,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.53,-0.05h-5.18c-0.28,0 -0.42,0 -0.53,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.53v28.4c0,0.28 0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.53,0.05h5.62c0.28,0 0.42,0 0.53,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53v-16.79q0,-2.92 1.65,-4.69 1.71,-1.77 4.41,-1.77 2.7,0 4.36,1.77 1.71,1.71 1.71,4.69v16.79c0,0.28 -0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.53,0.05h5.63c0.28,0 0.42,0 0.53,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.06,-0.25 0.06,-0.53v-18.5q-0,-3.37 -1.44,-5.9a10.1,10.1 0,0 0,-4.03 -4.03q-2.54,-1.43 -5.85,-1.43M214.18,26c-0.28,0 -0.42,0 -0.53,0.05a0.5,0.5 0,0 0,-0.22 0.22c-0.05,0.11 -0.05,0.25 -0.05,0.53v28.4c0,0.28 0,0.42 0.05,0.53a0.5,0.5 0,0 0,0.22 0.22c0.11,0.05 0.25,0.05 0.53,0.05h5.63c0.28,0 0.42,0 0.52,-0.05a0.5,0.5 0,0 0,0.22 -0.22c0.05,-0.11 0.05,-0.25 0.05,-0.53L220.61,26.8c0,-0.28 0,-0.42 -0.05,-0.53a0.5,0.5 0,0 0,-0.22 -0.22c-0.11,-0.05 -0.25,-0.05 -0.53,-0.05zM124.56,31.3q2.87,0 4.74,1.76 1.93,1.71 2.15,4.47h-14.12q0.61,-2.98 2.54,-4.58 1.99,-1.65 4.69,-1.65" />
</vector>

View file

@ -2,9 +2,9 @@
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="256"
android:viewportHeight="256">
android:viewportWidth="100"
android:viewportHeight="100">
<path
android:fillColor="@android:color/white"
android:pathData="m127.998,39.598c-23.398,0 -98.717,136.547 -87.232,159.608s163.108,22.794 174.467,0c11.359,-22.794 -63.838,-159.608 -87.232,-159.608zM128.009,74.617c15.329,0 64.6,89.634 57.157,104.581 -7.442,14.942 -106.782,15.109 -114.312,0s41.827,-104.581 57.157,-104.581zM127.998,107.341c-7.765,0 -32.763,45.317 -28.948,52.969s54.128,7.568 57.898,0 -21.183,-52.966 -28.948,-52.969z" />
android:pathData="M26.80,0.52L21.89,0.93 17.13,2.01 12.36,4.39 8.69,6.99 5.26,10.82 2.69,15.03 0.68,20.35 0.18,22.60 0.00,24.70 0.33,29.74 1.49,34.65 3.52,39.42 6.03,43.19 8.32,45.60 11.10,47.87 30.42,60.82 33.07,63.55 34.57,66.46 35.02,68.57 35.01,70.67 34.55,72.77 33.62,74.85 32.38,76.51 30.80,77.87 29.04,78.79 26.94,79.37 24.14,79.45 21.61,78.69 18.90,76.92 16.84,74.56 15.86,72.49 15.38,70.25 15.38,67.17 16.14,61.99 15.92,61.01 15.22,60.49 13.73,60.53 11.66,61.26 9.28,62.57 6.91,64.32 4.94,66.15 3.25,68.16 2.04,70.11 1.18,72.21 0.66,74.45 0.42,76.84 0.48,78.94 0.88,81.32 1.69,84.68 2.48,86.93 3.61,89.03 5.27,91.26 8.47,94.37 10.27,95.56 12.22,96.54 19.09,98.79 21.61,99.28 24.28,99.48 26.94,99.40 29.60,99.00 32.69,98.23 36.19,97.03 41.66,94.41 43.75,92.98 45.76,91.25 47.56,89.28 49.59,86.51 51.63,83.28 52.89,80.76 53.81,78.10 54.56,74.87 54.87,72.49 54.92,69.69 54.40,64.08 53.02,59.32 50.72,54.41 47.66,50.22 45.15,47.75 42.36,45.64 32.26,39.12 23.44,33.73 21.29,31.95 19.73,30.14 18.72,27.78 18.81,25.26 20.00,22.50 21.00,21.25 22.10,20.34 24.28,19.42 26.80,19.28 29.60,19.81 32.55,21.06 37.59,23.85 60.30,37.73 71.79,44.43 74.04,46.03 75.33,47.52 75.78,48.69 75.77,49.89 75.31,51.06 74.37,52.22 72.20,53.85 63.02,59.28 61.76,60.36 60.96,61.53 60.47,63.53 60.51,68.99 60.13,73.05 59.58,75.85 58.16,80.48 58.26,81.37 58.73,81.83 59.61,81.88 60.88,81.48 66.04,78.66 82.86,68.49 94.32,60.88 96.82,58.54 98.66,55.81 99.61,53.15 100.00,49.79 99.93,47.68 99.59,45.72 98.90,43.76 97.92,41.96 95.40,39.01 90.99,35.70 68.98,22.06 55.81,14.41 39.55,4.44 36.05,2.72 32.69,1.46 29.74,0.77Z" />
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name_release" translatable="false" tools:ignore="UnusedResources">Jellyfin</string>
<string name="app_name_debug" translatable="false" tools:ignore="UnusedResources">Jellyfin Debug</string>
<string name="app_name_release" translatable="false" tools:ignore="UnusedResources">Smithflix</string>
<string name="app_name_debug" translatable="false" tools:ignore="UnusedResources">Smithflix Debug</string>
<string name="video_error_unknown_error">Failed to load video</string>
<string name="loading">Loading…</string>
<string name="btn_cancel">Cancel</string>
@ -374,10 +374,10 @@
<string name="user_picker_last_user_summary">Use the last active account</string>
<string name="lbl_switch_user">Switch account</string>
<string name="pref_theme_muted_purple">Muted purple</string>
<string name="no_network_permissions">Jellyfin requires network permissions to function</string>
<string name="no_network_permissions">Smithflix requires network permissions to function</string>
<string name="press_to_close">Press to close</string>
<string name="saved_servers">Saved servers</string>
<string name="welcome_title">Welcome to Jellyfin!</string>
<string name="welcome_title">Welcome to Smithflix!</string>
<string name="welcome_content">Connect to your server to get started.</string>
<string name="no_user_warning">We couldn\'t find any accounts!\nAdd a new account by pressing the \"Add account\" button.</string>
<string name="who_is_watching">Who\'s watching?</string>
@ -434,8 +434,8 @@
<string name="home_next_up_max_days">Next up date cutoff</string>
<string name="home_next_up_max_days_disabled">Disabled</string>
<string name="tv_provider_enabled">Integrate with Android TV home</string>
<string name="tv_provider_enabled_description">Show Jellyfin channels and recommendations on the Android TV home screen</string>
<string name="searchable_hint">Search Jellyfin</string>
<string name="tv_provider_enabled_description">Show Smithflix channels and recommendations on the Android TV home screen</string>
<string name="searchable_hint">Search Smithflix</string>
<string name="searchable_settings_description">Media</string>
<string name="pref_subtitles_background_title">Enable background</string>
<string name="pref_subtitles_background_summary">Show a black background behind the subtitles</string>
@ -505,7 +505,7 @@
<string name="crash_report_toast">Oops! Something went wrong, a crash report was sent to your Jellyfin server.</string>
<string name="server_setup_incomplete">The setup of this server has not been completed. Open Jellyfin in a web browser to finish setup before signing in.</string>
<string name="episode_name_special">special</string>
<string name="app_notification_beta">App updated to %1$s\nThank you for participating in the Jellyfin beta program.</string>
<string name="app_notification_beta">Smithflix updated to %1$s</string>
<string name="item_deleted">%1$s deleted</string>
<string name="item_deletion_failed">Unable to delete %1$s</string>
<string name="pref_enable_media_management">Enable media management</string>
@ -514,7 +514,7 @@
<string name="item_delete_confirm_message">Are you sure you want to delete this item from the server? This action cannot be undone.</string>
<string name="pref_screensaver">Screensaver</string>
<string name="pref_screensaver_inapp_enabled">Use in-app screensaver</string>
<string name="pref_screensaver_inapp_enabled_description">Show the Jellyfin screensaver while the app is open</string>
<string name="pref_screensaver_inapp_enabled_description">Show the Smithflix screensaver while the app is open</string>
<string name="pref_screensaver_inapp_timeout">Start screensaver after</string>
<string name="enable_reactive_homepage">Enable reactive homepage</string>
<string name="not_set">Not set</string>
@ -615,7 +615,7 @@
<string name="playback_video_player">Video player</string>
<string name="video_player_internal">Built-in video player</string>
<string name="video_player_external">External app</string>
<string name="playback_video_player_external_empty">You don\'t have any video player apps installed on your device that can open Jellyfin videos.</string>
<string name="playback_video_player_external_empty">You don\'t have any video player apps installed on your device that can open Smithflix videos.</string>
<string name="filters">Filters</string>
<string name="backdrop_behavior_with_blur">Backdrop with blur</string>
<string name="backdrop_behavior_without_blur">Backdrop without blur</string>

View file

@ -8,10 +8,10 @@
<!-- UserPreferences -->
<include
domain="sharedpref"
path="org.jellyfin.androidtv_preferences" />
path="us.smithflix.tv_preferences" />
<include
domain="sharedpref"
path="org.jellyfin.androidtv.debug_preferences" />
path="us.smithflix.tv.debug_preferences" />
<!-- SystemPreferences -->
<include
domain="sharedpref"

View file

@ -9,10 +9,10 @@
<!-- UserPreferences -->
<include
domain="sharedpref"
path="org.jellyfin.androidtv_preferences" />
path="us.smithflix.tv_preferences" />
<include
domain="sharedpref"
path="org.jellyfin.androidtv.debug_preferences" />
path="us.smithflix.tv.debug_preferences" />
<!-- SystemPreferences -->
<include
domain="sharedpref"
@ -31,10 +31,10 @@
<!-- UserPreferences -->
<include
domain="sharedpref"
path="org.jellyfin.androidtv_preferences" />
path="us.smithflix.tv_preferences" />
<include
domain="sharedpref"
path="org.jellyfin.androidtv.debug_preferences" />
path="us.smithflix.tv.debug_preferences" />
<!-- SystemPreferences -->
<include
domain="sharedpref"

Binary file not shown.