|
@@ -4,8 +4,9 @@ A calm, configurable Android car dashboard launcher, built with Flutter.
|
|
|
|
|
|
|
|
CarDash replaces the tablet home screen with one landscape page: a large clock,
|
|
CarDash replaces the tablet home screen with one landscape page: a large clock,
|
|
|
battery and Wi-Fi status, a now-playing media card, and up to 16 buttons —
|
|
battery and Wi-Fi status, a now-playing media card, and up to 16 buttons —
|
|
|
-**Navigation**, **Music**, **Radio**, **All apps**, plus any apps you pin from
|
|
|
|
|
-All Apps. The first three can be shown, hidden and assigned to installed apps;
|
|
|
|
|
|
|
+**Navigation**, **Music**, optional **Jellyfin**, **Radio**, **All apps**, plus
|
|
|
|
|
+any apps you pin from All Apps. The fixed slots can be shown, hidden and
|
|
|
|
|
+assigned to installed apps; Jellyfin is a built-in music source when configured.
|
|
|
Settings opens from the gear next to Wi-Fi. External apps open full-screen using
|
|
Settings opens from the gear next to Wi-Fi. External apps open full-screen using
|
|
|
the normal Android launcher mechanism. No overlays, no root, no kiosk setup.
|
|
the normal Android launcher mechanism. No overlays, no root, no kiosk setup.
|
|
|
|
|
|
|
@@ -18,10 +19,10 @@ the normal Android launcher mechanism. No overlays, no root, no kiosk setup.
|
|
|
## Download
|
|
## Download
|
|
|
|
|
|
|
|
- [Gogs release page](https://git.krasi.net/kkazakov/car-interface-android/releases) — published releases
|
|
- [Gogs release page](https://git.krasi.net/kkazakov/car-interface-android/releases) — published releases
|
|
|
-- [cardash-android-1.0.7.apk](releases/cardash-android-1.0.7.apk) — universal Android release
|
|
|
|
|
|
|
+- [cardash-android-1.2.0.apk](releases/cardash-android-1.2.0.apk) — universal Android release
|
|
|
- SHA-256 and build details: [releases/README.md](releases/README.md)
|
|
- SHA-256 and build details: [releases/README.md](releases/README.md)
|
|
|
|
|
|
|
|
-Gogs limits release attachments to 32 MB, so the 54 MB universal APK is linked
|
|
|
|
|
|
|
+Gogs limits release attachments to 32 MB, so the 59 MB universal APK is linked
|
|
|
directly from the repository.
|
|
directly from the repository.
|
|
|
|
|
|
|
|
## Screenshots
|
|
## Screenshots
|
|
@@ -81,12 +82,19 @@ live vehicle data.
|
|
|
play/pause button. The song title and artist scroll along the bottom; paused
|
|
play/pause button. The song title and artist scroll along the bottom; paused
|
|
|
audio stops the scroll and holds its position. When nothing is playing it
|
|
audio stops the scroll and holds its position. When nothing is playing it
|
|
|
reads **Nothing playing**. The volume slider, −/+, and Mute pill remain.
|
|
reads **Nothing playing**. The volume slider, −/+, and Mute pill remain.
|
|
|
-- **Jellyfin (Settings only)** — optional music-server integration in
|
|
|
|
|
- Settings → Jellyfin. Turn it on, enter the server URL and pair it with a
|
|
|
|
|
- Quick Connect code; the saved token is reused on later starts. The card shows
|
|
|
|
|
- connected, offline and error states. A rejected token is cleared and asks for
|
|
|
|
|
- pairing again; a missing network pauses the connection and retries
|
|
|
|
|
- automatically. Nothing on Home uses it yet.
|
|
|
|
|
|
|
+- **Jellyfin** — optional music-server integration in Settings → Jellyfin. Turn
|
|
|
|
|
+ it on, enter the server URL and pair it with a Quick Connect code; the saved
|
|
|
|
|
+ token is reused on later starts. Once configured, turn on the **Jellyfin** Home
|
|
|
|
|
+ button in Settings → General → Home buttons. The tile opens a full-screen
|
|
|
|
|
+ dashboard with **Recently played**, **Recently added** and **Random** album
|
|
|
|
|
+ rows (six cards when they fit, five otherwise), grouped genre selection and a
|
|
|
|
|
+ full album page with track list, previous/next, play/pause and volume.
|
|
|
|
|
+ Playback runs in CarDash through Media3, keeps playing in the background, shows
|
|
|
|
|
+ a media notification when allowed, pauses on audio-focus loss and reports to
|
|
|
|
|
+ Jellyfin. Selecting a Random album re-rolls the row. The home equalizer is
|
|
|
|
|
+ exclusive: Jellyfin while it plays, Music only for another app. A rejected
|
|
|
|
|
+ token is cleared and asks for pairing again; an unreachable server keeps the
|
|
|
|
|
+ token and retries with backoff.
|
|
|
- **Update check** — on startup, CarDash queries the public Gogs release list
|
|
- **Update check** — on startup, CarDash queries the public Gogs release list
|
|
|
without blocking the dashboard. Settings → Updates shows the current version,
|
|
without blocking the dashboard. Settings → Updates shows the current version,
|
|
|
a Check button, and an Update action that downloads the APK and opens Android’s
|
|
a Check button, and an Update action that downloads the APK and opens Android’s
|
|
@@ -97,8 +105,9 @@ live vehicle data.
|
|
|
used only to read the active media session’s title, duration and position.
|
|
used only to read the active media session’s title, duration and position.
|
|
|
CarDash never reads or stores notification content.
|
|
CarDash never reads or stores notification content.
|
|
|
- **Configurable home buttons** — switches in Settings show or hide Navigation,
|
|
- **Configurable home buttons** — switches in Settings show or hide Navigation,
|
|
|
- Music and Radio. **All apps** is always the last button; **Settings** now sits
|
|
|
|
|
- next to Wi-Fi in the top-right status area and is no longer a grid tile.
|
|
|
|
|
|
|
+ Music, Jellyfin and Radio; the Jellyfin switch is disabled and off until the
|
|
|
|
|
+ integration is configured. **All apps** is always the last button; **Settings**
|
|
|
|
|
+ sits next to Wi-Fi in the top-right status area and is no longer a grid tile.
|
|
|
- **Pin any app from All Apps** — long-press an app to add it to Home. The home
|
|
- **Pin any app from All Apps** — long-press an app to add it to Home. The home
|
|
|
page holds up to **16 buttons including All apps**; the grid shrinks as it
|
|
page holds up to **16 buttons including All apps**; the grid shrinks as it
|
|
|
fills and stays anchored to the bottom edge.
|
|
fills and stays anchored to the bottom edge.
|
|
@@ -110,10 +119,13 @@ live vehicle data.
|
|
|
- **One-time launcher tip** — the first run shows a short notification that the
|
|
- **One-time launcher tip** — the first run shows a short notification that the
|
|
|
default-launcher setting lives in Settings. It is not shown again.
|
|
default-launcher setting lives in Settings. It is not shown again.
|
|
|
- **All apps** — searchable grid of every launchable app, launched full-screen.
|
|
- **All apps** — searchable grid of every launchable app, launched full-screen.
|
|
|
-- **Media-aware Music tile** — while media audio is active and the Music shortcut
|
|
|
|
|
- is assigned, the stylized music icon shows a small animated equalizer. Android
|
|
|
|
|
- exposes media-active state, not the playing package, to a
|
|
|
|
|
- normal launcher; see the limitation below.
|
|
|
|
|
|
|
+- **Media-aware Music and Jellyfin tiles** — the stylized music icon shows a
|
|
|
|
|
+ small animated equalizer while another app is playing; the Jellyfin tile shows
|
|
|
|
|
+ it only while CarDash's Jellyfin player is playing. The two are mutually
|
|
|
|
|
+ exclusive. Android exposes media-active state, not the playing package, to a
|
|
|
|
|
+ normal launcher; Jellyfin is known because CarDash owns that player. The tile
|
|
|
|
|
+ labels are clipped to the rounded button width so long album names cannot
|
|
|
|
|
+ widen the grid.
|
|
|
- **Six accent colors** — Green, Blue, Amber, Rose, Violet or Teal, applied
|
|
- **Six accent colors** — Green, Blue, Amber, Rose, Violet or Teal, applied
|
|
|
across the whole interface.
|
|
across the whole interface.
|
|
|
- **Prevent CarDash from sleeping** — a Settings switch, on by default. Turn it off to use the system display timeout.
|
|
- **Prevent CarDash from sleeping** — a Settings switch, on by default. Turn it off to use the system display timeout.
|
|
@@ -128,9 +140,9 @@ live vehicle data.
|
|
|
cold-starts**, never when returning from an app.
|
|
cold-starts**, never when returning from an app.
|
|
|
- **Standard Android home role** — no overlay, kiosk or root.
|
|
- **Standard Android home role** — no overlay, kiosk or root.
|
|
|
- **Android 10+**, landscape-only, tablet-first (verified at 1280×800).
|
|
- **Android 10+**, landscape-only, tablet-first (verified at 1280×800).
|
|
|
-- No accounts, no telemetry, no T&C screen. Network access is used only for the
|
|
|
|
|
- optional Open-Meteo temperature fallback, the Jellyfin server you configure,
|
|
|
|
|
- and the public release check.
|
|
|
|
|
|
|
+- No CarDash accounts, no telemetry, no T&C screen. Network access is used only
|
|
|
|
|
+ for the optional Open-Meteo temperature fallback, the Jellyfin server you
|
|
|
|
|
+ configure (library, artwork and audio), and the public release check.
|
|
|
|
|
|
|
|
## Requirements
|
|
## Requirements
|
|
|
|
|
|
|
@@ -142,6 +154,7 @@ live vehicle data.
|
|
|
- The prepared tablet AVDs use the **host GPU**; a working GPU driver is recommended
|
|
- The prepared tablet AVDs use the **host GPU**; a working GPU driver is recommended
|
|
|
- Optional: a Bluetooth Classic ELM327 adapter already paired in Android
|
|
- Optional: a Bluetooth Classic ELM327 adapter already paired in Android
|
|
|
- Optional: location access for the Open-Meteo temperature fallback
|
|
- Optional: location access for the Open-Meteo temperature fallback
|
|
|
|
|
+- Optional: a Jellyfin 12.x server and account for the built-in music source
|
|
|
|
|
|
|
|
The Android application ID is `com.wasp.cardash_launcher`. Android package
|
|
The Android application ID is `com.wasp.cardash_launcher`. Android package
|
|
|
segments cannot contain hyphens, so the requested `com.wasp.cardash-launcher`
|
|
segments cannot contain hyphens, so the requested `com.wasp.cardash-launcher`
|
|
@@ -197,14 +210,19 @@ first run shows a one-time tip pointing to this setting.
|
|
|
| Action | Result |
|
|
| Action | Result |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
| Tap Navigation / Music / Radio | Open the assigned app full-screen |
|
|
| Tap Navigation / Music / Radio | Open the assigned app full-screen |
|
|
|
|
|
+| Tap Jellyfin | Open the Jellyfin dashboard (Albums) |
|
|
|
| Long-press Navigation / Music / Radio | Pick a different installed app |
|
|
| Long-press Navigation / Music / Radio | Pick a different installed app |
|
|
|
|
|
+| Long-press Jellyfin | Nothing; Jellyfin is a built-in source |
|
|
|
| Tap an unassigned shortcut | Open the app picker |
|
|
| Tap an unassigned shortcut | Open the app picker |
|
|
|
| Settings → Accent | Pick Green, Blue, Amber, Rose, Violet or Teal |
|
|
| Settings → Accent | Pick Green, Blue, Amber, Rose, Violet or Teal |
|
|
|
| Settings → Battery & charging | Show or hide battery level and charging bolt |
|
|
| Settings → Battery & charging | Show or hide battery level and charging bolt |
|
|
|
| Settings → Prevent CarDash from sleeping | Keep the display on, or use the system timeout |
|
|
| Settings → Prevent CarDash from sleeping | Keep the display on, or use the system timeout |
|
|
|
| Long-press an empty part of Home | Enter black night mode with a dim clock |
|
|
| Long-press an empty part of Home | Enter black night mode with a dim clock |
|
|
|
| Tap the night screen | Return to the dashboard |
|
|
| Tap the night screen | Return to the dashboard |
|
|
|
-| Settings → Home buttons switches | Show or hide Navigation, Music, Radio |
|
|
|
|
|
|
|
+| Settings → Home buttons switches | Show or hide Navigation, Music, Jellyfin, Radio |
|
|
|
|
|
+| Settings → Jellyfin → Allow | Enable the media notification on Android 13+ |
|
|
|
|
|
+| Jellyfin dashboard → album | Start the album and open its track list |
|
|
|
|
|
+| Jellyfin dashboard → Random → album | Start it and re-roll the Random row |
|
|
|
| Long-press an app in All Apps | Add it to Home (up to 16 buttons) |
|
|
| Long-press an app in All Apps | Add it to Home (up to 16 buttons) |
|
|
|
| Long-press an added app on Home | Rename, Change icon or Remove |
|
|
| Long-press an added app on Home | Rename, Change icon or Remove |
|
|
|
| Settings → OBD-II | Pick a paired ELM327 or None; open Bluetooth settings |
|
|
| Settings → OBD-II | Pick a paired ELM327 or None; open Bluetooth settings |
|
|
@@ -214,7 +232,8 @@ first run shows a one-time tip pointing to this setting.
|
|
|
| Temperature row | OBD ambient, or location weather when OBD is off/unavailable |
|
|
| Temperature row | OBD ambient, or location weather when OBD is off/unavailable |
|
|
|
| Settings | Theme, accent, media access, battery, home buttons, OBD/speed/temperature, default-home role, PIN |
|
|
| Settings | Theme, accent, media access, battery, home buttons, OBD/speed/temperature, default-home role, PIN |
|
|
|
| All apps | Search every launchable app; tap to open, hold to pin |
|
|
| All apps | Search every launchable app; tap to open, hold to pin |
|
|
|
-| Music tile while media is active | Shows the selected app icon + equalizer |
|
|
|
|
|
|
|
+| Music tile while another app plays | Shows the selected app icon + equalizer |
|
|
|
|
|
+| Jellyfin tile while Jellyfin plays | Shows the headphones icon + equalizer |
|
|
|
| Circular ring | Song progress; tap the centre to play/pause |
|
|
| Circular ring | Song progress; tap the centre to play/pause |
|
|
|
| Song title at the card bottom | Scrolls only while playing; holds when paused |
|
|
| Song title at the card bottom | Scrolls only while playing; holds when paused |
|
|
|
| Screen | Stays awake while CarDash is in front |
|
|
| Screen | Stays awake while CarDash is in front |
|
|
@@ -235,8 +254,10 @@ the app resumes.
|
|
|
- Battery & charging: one switch hides both the level and charging bolt.
|
|
- Battery & charging: one switch hides both the level and charging bolt.
|
|
|
- Prevent CarDash from sleeping: keep the display on; on by default.
|
|
- Prevent CarDash from sleeping: keep the display on; on by default.
|
|
|
- Auto night window (default dark from 19:00, light from 07:00).
|
|
- Auto night window (default dark from 19:00, light from 07:00).
|
|
|
-- Home buttons: show/hide Navigation, Music, Radio; live count out of 16.
|
|
|
|
|
-- Assign the app for each slot; All apps is fixed and last.
|
|
|
|
|
|
|
+- Home buttons: show/hide Navigation, Music, Jellyfin, Radio; live count out of
|
|
|
|
|
+ 16. Jellyfin is disabled and off until configured.
|
|
|
|
|
+- Assign the app for Navigation, Music and Radio; Jellyfin is built-in, and All
|
|
|
|
|
+ apps is fixed and last.
|
|
|
- Settings is always available from the gear next to Wi-Fi.
|
|
- Settings is always available from the gear next to Wi-Fi.
|
|
|
- Home role status and shortcut to the system prompt.
|
|
- Home role status and shortcut to the system prompt.
|
|
|
|
|
|
|
@@ -259,8 +280,23 @@ the app resumes.
|
|
|
**Pair again**.
|
|
**Pair again**.
|
|
|
- Without a network the card shows **No internet — retrying** and retries with
|
|
- Without a network the card shows **No internet — retrying** and retries with
|
|
|
backoff until the server is reachable again.
|
|
backoff until the server is reachable again.
|
|
|
-- Nothing on Home uses the connection yet; the active state is exposed for a
|
|
|
|
|
- later feature.
|
|
|
|
|
|
|
+- **Random genres**: choose up to five grouped families (Metal, Rock, Jazz, Pop,
|
|
|
|
|
+ Folk and so on) in the Jellyfin card. Raw tags such as `Метъл`, `Рок`,
|
|
|
|
|
+ `Melodic metal` and `Pop-Rock` are grouped into those families. If none are
|
|
|
|
|
+ selected, the dashboard asks you to choose genres in Settings.
|
|
|
|
|
+- **Home button**: after pairing, turn on **Jellyfin** in Settings → General →
|
|
|
|
|
+ Home buttons. The tile sits after Music and before Radio and opens the
|
|
|
|
|
+ dashboard.
|
|
|
|
|
+- **Dashboard**: Recently played (derived from played tracks across your Jellyfin
|
|
|
|
|
+ devices), Recently added, and Random. Artists is shown but disabled for a
|
|
|
|
|
+ later release. Six albums per row when they fit, otherwise five.
|
|
|
|
|
+- **Album page**: large cover, track list, previous / play-pause / next, current
|
|
|
|
|
+ track and the same volume/mute controls as Home.
|
|
|
|
|
+- **Playback**: in-app Media3 with background playback, a media notification on
|
|
|
|
|
+ Android 13+ when allowed, audio-focus pause/resume, and playback reporting to
|
|
|
|
|
+ Jellyfin. Stops at the end of the album; no autoplay or repeat.
|
|
|
|
|
+- **Allow notifications** asks for Android's notification permission; denying it
|
|
|
|
|
+ only hides the playback notification, not playback itself.
|
|
|
|
|
|
|
|
**OBD-II**
|
|
**OBD-II**
|
|
|
- Adapter dropdown: None plus paired Bluetooth Classic devices that look like
|
|
- Adapter dropdown: None plus paired Bluetooth Classic devices that look like
|
|
@@ -344,7 +380,7 @@ flutter test
|
|
|
./tool/check.sh
|
|
./tool/check.sh
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-The 89 tests cover PIN hashing/persistence, settings persistence, theme/accent,
|
|
|
|
|
|
|
+The 134 tests cover PIN hashing/persistence, settings persistence, theme/accent,
|
|
|
dark accent tinting, battery visibility, first-run state, the ten-minute
|
|
dark accent tinting, battery visibility, first-run state, the ten-minute
|
|
|
onboarding hint, slot visibility, pinned apps, custom labels/icons, the
|
|
onboarding hint, slot visibility, pinned apps, custom labels/icons, the
|
|
|
16-button cap at 1280×800, 1280×720 and 1024×600, the dense shortcut grid, the
|
|
16-button cap at 1280×800, 1280×720 and 1024×600, the dense shortcut grid, the
|
|
@@ -353,18 +389,22 @@ metadata/progress, the marquee, the play/pause ring, fixed-volume handling,
|
|
|
volume-write diagnostics, the keep-awake preference, the night overlay, GPS
|
|
volume-write diagnostics, the keep-awake preference, the night overlay, GPS
|
|
|
speed fallback and its permission prompt, speed/temperature source persistence,
|
|
speed fallback and its permission prompt, speed/temperature source persistence,
|
|
|
weather fallback, the update version/availability logic and the Settings update
|
|
weather fallback, the update version/availability logic and the Settings update
|
|
|
-dot. Native package enumeration, the HOME role, volume, app launching and PIN
|
|
|
|
|
-flows were verified on API 35 and API 29 emulators. Location permission,
|
|
|
|
|
-reverse geocoding and the Open-Meteo fallback were verified live on the API 35
|
|
|
|
|
-emulator. Now-playing
|
|
|
|
|
-title, artist, progress and pause/resume were verified against a live Chrome
|
|
|
|
|
-MediaSession. The OBD hardware path compiles and is covered by the
|
|
|
|
|
-parser/economy design, but no ELM327 adapter is available on this machine;
|
|
|
|
|
-socket behavior still needs a car test. The 1.0.7 universal APK is built from
|
|
|
|
|
-this tree and published; devices on 1.0.6 can pick it up through
|
|
|
|
|
-Settings → Updates. The emulator has verified the in-app update path. 1.0.7
|
|
|
|
|
-moves the Impeller opt-out into the manifest's `<application>` block; Flutter
|
|
|
|
|
-ignored it under `<activity>`.
|
|
|
|
|
|
|
+dot. Jellyfin coverage includes genre grouping, recent-played dedupe, the
|
|
|
|
|
+12.2 request contract, the dashboard controller and widget states, the genre
|
|
|
|
|
+picker and five-family cap, album page/track list/transport, playback queue and
|
|
|
|
|
+state mapping, the settings gating and the Home tile width clipping. Native
|
|
|
|
|
+package enumeration, the HOME role, volume, app launching and PIN flows were
|
|
|
|
|
+verified on API 35 and API 29 emulators. Location permission, reverse geocoding
|
|
|
|
|
+and the Open-Meteo fallback were verified live on the API 35 emulator.
|
|
|
|
|
+Now-playing title, artist, progress and pause/resume were verified against a
|
|
|
|
|
+live Chrome MediaSession. Jellyfin was verified end-to-end on API 34 against a
|
|
|
|
|
+real 12.2 server (Quick Connect, grouped genres, 6/5-card dashboard, album page,
|
|
|
|
|
+background playback, notification, media keys, exclusive equalizers, audio-focus
|
|
|
|
|
+handover, Random re-shuffle) and against a local 12.2 container. The OBD hardware
|
|
|
|
|
+path compiles and is covered by the parser/economy design, but no ELM327 adapter
|
|
|
|
|
+is available on this machine; socket behavior still needs a car test. The 1.2.0
|
|
|
|
|
+universal APK is built from this tree and published. The emulator has verified
|
|
|
|
|
+the in-app update path.
|
|
|
|
|
|
|
|
## Troubleshooting the emulator
|
|
## Troubleshooting the emulator
|
|
|
|
|
|
|
@@ -419,20 +459,36 @@ Android 15 AVD is left running headlessly after development; use
|
|
|
disappears after ten minutes. It is migrated to expired for upgraded installs
|
|
disappears after ten minutes. It is migrated to expired for upgraded installs
|
|
|
and never returns.
|
|
and never returns.
|
|
|
- **No embedded third-party app UI.** Navigation/Music/Radio are launched in
|
|
- **No embedded third-party app UI.** Navigation/Music/Radio are launched in
|
|
|
- their own full-screen windows.
|
|
|
|
|
|
|
+ their own full-screen windows. Jellyfin is the exception: its music library
|
|
|
|
|
+ and player are a first-party CarDash dashboard, because it is an API/music
|
|
|
|
|
+ source rather than an embedded app.
|
|
|
- **Renaming changes the Home label only.** Android does not allow a launcher to
|
|
- **Renaming changes the Home label only.** Android does not allow a launcher to
|
|
|
rename another app's installed label.
|
|
rename another app's installed label.
|
|
|
- **Custom icons** are bundled monochrome SVGs, so they follow the light/dark
|
|
- **Custom icons** are bundled monochrome SVGs, so they follow the light/dark
|
|
|
theme. Default restores the pinned app's own icon.
|
|
theme. Default restores the pinned app's own icon.
|
|
|
-- **Play/pause uses Android media keys.** It resumes a paused session when one
|
|
|
|
|
- responds; if nothing is playing, it opens the app assigned to the Music slot
|
|
|
|
|
- (or asks you to choose one). The ring shows Play whenever audio is inactive.
|
|
|
|
|
|
|
+- **Play/pause uses the Jellyfin player when it is active**, otherwise Android
|
|
|
|
|
+ media keys. With no active session it opens the app assigned to the Music slot
|
|
|
|
|
+ (or asks you to choose one). The ring shows Play whenever the selected source
|
|
|
|
|
+ is paused/inactive.
|
|
|
- **Updates download and invoke Android’s installer.** CarDash never silently
|
|
- **Updates download and invoke Android’s installer.** CarDash never silently
|
|
|
installs. Android requires the user to confirm each install and, once, to allow
|
|
installs. Android requires the user to confirm each install and, once, to allow
|
|
|
CarDash as an unknown-app source.
|
|
CarDash as an unknown-app source.
|
|
|
-- **Song progress/title require notification access.** Without it, Android does
|
|
|
|
|
- not expose MediaSession metadata to a normal launcher; the card still controls
|
|
|
|
|
- playback and shows Nothing playing or Playing.
|
|
|
|
|
|
|
+- **Song progress/title for other apps require notification access.** Without
|
|
|
|
|
+ it, Android does not expose MediaSession metadata to a normal launcher; the
|
|
|
|
|
+ card still controls playback and shows Nothing playing or Playing. Jellyfin's
|
|
|
|
|
+ own title/progress come from CarDash's player and work without it.
|
|
|
|
|
+- **Jellyfin is online-only in 1.2.0.** There is no offline library cache or
|
|
|
|
|
+ download. An unreachable server shows an inline Retry state; selected genres
|
|
|
|
|
+ and the token persist. The Artists tab is disabled for a later release.
|
|
|
|
|
+- **Jellyfin genre grouping is heuristic.** Built-in family rules group known
|
|
|
|
|
+ raw tags (including Cyrillic aliases); unusual tags become standalone families.
|
|
|
|
|
+ The picker is capped at five families.
|
|
|
|
|
+- **Jellyfin notification permission is optional.** On Android 13+, allow it in
|
|
|
|
|
+ Settings → Jellyfin to see the playback notification. Playback continues
|
|
|
|
|
+ without it; the Home card and dashboard still control the player.
|
|
|
|
|
+- **Jellyfin drives the car audio focus.** It pauses on a permanent focus loss
|
|
|
|
|
+ (another music app) and stays paused; a short transient loss (navigation
|
|
|
|
|
+ prompt) resumes only if it was playing. It stops at the end of the album.
|
|
|
- **Speed source** is selectable only while an OBD adapter is selected. GPS
|
|
- **Speed source** is selectable only while an OBD adapter is selected. GPS
|
|
|
fallback requires fine location and the GPS provider enabled; enabling speed
|
|
fallback requires fine location and the GPS provider enabled; enabling speed
|
|
|
with GPS as the source asks for location permission. Stale/no-fix GPS values
|
|
with GPS as the source asks for location permission. Stale/no-fix GPS values
|
|
@@ -446,14 +502,16 @@ Android 15 AVD is left running headlessly after development; use
|
|
|
Weather fallback uses Open-Meteo and the device location; it requires location
|
|
Weather fallback uses Open-Meteo and the device location; it requires location
|
|
|
permission and network access, and hides the row when unavailable.
|
|
permission and network access, and hides the row when unavailable.
|
|
|
- **Location data is not stored.** Only the selected adapter address, the
|
|
- **Location data is not stored.** Only the selected adapter address, the
|
|
|
- speed/temperature choices, the weather preference and the Jellyfin URL are
|
|
|
|
|
- persisted. The Jellyfin access token is kept in Keystore-backed storage.
|
|
|
|
|
|
|
+ speed/temperature choices, the weather preference, the Jellyfin URL and the
|
|
|
|
|
+ selected genre families are persisted. The Jellyfin access token is kept in
|
|
|
|
|
+ Keystore-backed storage.
|
|
|
- **`QUERY_ALL_PACKAGES`** is used to list all launchable apps. It is reasonable
|
|
- **`QUERY_ALL_PACKAGES`** is used to list all launchable apps. It is reasonable
|
|
|
for a launcher but requires a Play policy declaration if the app is ever
|
|
for a launcher but requires a Play policy declaration if the app is ever
|
|
|
distributed; this is a local/sideload build for now.
|
|
distributed; this is a local/sideload build for now.
|
|
|
- **Network access** is used for the optional Open-Meteo temperature fallback,
|
|
- **Network access** is used for the optional Open-Meteo temperature fallback,
|
|
|
- the Jellyfin server you configure and the Gogs release check. There are no
|
|
|
|
|
- accounts, ads, telemetry or silent auto-updates.
|
|
|
|
|
|
|
+ the Jellyfin server you configure (library, artwork and audio) and the Gogs
|
|
|
|
|
+ release check. There are no CarDash accounts, ads, telemetry or silent
|
|
|
|
|
+ auto-updates.
|
|
|
- The launcher cannot replace Android's lock screen. The PIN does not protect a
|
|
- The launcher cannot replace Android's lock screen. The PIN does not protect a
|
|
|
running session, by design.
|
|
running session, by design.
|
|
|
|
|
|