EBuzz Lite TV is a Java-based Android TV app for browsing live channels and movies with remote-friendly navigation, modern card UI, and API-driven playback.
The project is optimized for real devices, including legacy Android 4.4 TV hardware where memory, TLS, and rendering constraints are common.
- TV-first launcher and fullscreen player flow
- Separate Channels and Movies screens
- Category chips + search filtering
- Favorites and Continue Watching persistence
- Multi-source playback fallback in player
- On-device quality selector (when tracks are available)
- Responsive grid behavior (mobile/tablet/TV)
- Legacy Android (API 19) safety hardening
app/src/main/java/com/ebuzzlite/tv
data/
model/ # DTO/domain objects
network/ # Retrofit + OkHttp API client/service
repository/ # CatalogRepository + UserDataStore
ui/
adapter/ # RecyclerView adapters
*.java # Activities, Fragments, UI helpers
app/src/main/res
layout/ # Activity/fragment/card layouts
drawable/ # Backgrounds, selectors, badges, icons
anim/ # Focus/entry motion resources
values/ # Strings, colors, styles
- Java 8
- AndroidX AppCompat / RecyclerView / SwipeRefreshLayout
- Retrofit
2.9.0 - OkHttp
3.12.13(Android 4.4 compatible line) - Gson converter
- Glide
4.16.0 - ExoPlayer
2.19.1
Configure base URL and endpoints in app/build.gradle:
buildConfigField "String", "BASE_URL", '"https://api.ebuzz.world/"'
buildConfigField "String", "CHANNELS_ENDPOINT", '"api/v1/channels"'
buildConfigField "String", "CHANNELS_ENDPOINT_FALLBACK", '"api/webtv"'
buildConfigField "String", "MOVIES_ENDPOINT", '"api/v1/movies"'
buildConfigField "String", "MOVIES_ENDPOINT_FALLBACK", '"api/movies"'Expected response envelope:
{
"data": [
{
"id": 1,
"title": "CNN",
"poster": "https://...",
"links": { "android": "https://...m3u8" }
}
]
}Movie items should provide at least one playable URL path (direct URL or mirrors list).
./gradlew assembleDebug./gradlew assembleReleaseRelease output:
app/build/outputs/apk/release/app-release.apk
This project supports Gradle properties-based signing:
RELEASE_STORE_FILE=keystore.jks
RELEASE_KEY_ALIAS=your_alias
RELEASE_STORE_PASSWORD=your_store_password
RELEASE_KEY_PASSWORD=your_key_passwordStore these in gradle.properties (or user-level Gradle properties for better security).
This codebase includes specific mitigations for old TVs:
- Legacy TLS-compatible connection specs in API client
- OkHttp pinned to the 3.12.x LTS line
- Focus animation avoids unsupported
translationZon pre-Lollipop - Reduced image prefetch and poster decode pressure
- Legacy grid/item caps to lower OOM risk
- Null-safe catalog filtering
If a TV still crashes, first suspect vendor firmware bugs around codecs/TLS and test with a simpler stream URL.
- Shared catalog device behavior extracted to
CatalogUiProfile - Duplicated span-count and legacy caps removed from fragments
- README and code comments expanded for maintainability
- Commit and push changes.
- Open repository Releases page on GitHub.
- Click Draft a new release.
- Choose a tag (example:
v1.0.0). - Attach
app/build/outputs/apk/release/app-release.apk. - Publish release.
This project is a client template. You are responsible for using legal and authorized content sources.