Skip to content

MuhammadOusman/eBuzzLite

Repository files navigation

EBuzz Lite TV

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.

Features

  • 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

Project Structure

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

Tech Stack

  • 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

API Contract

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).

Build

Debug Build

./gradlew assembleDebug

Release Build

./gradlew assembleRelease

Release output:

app/build/outputs/apk/release/app-release.apk

Signing Setup

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_password

Store these in gradle.properties (or user-level Gradle properties for better security).

Android 4.4 (API 19) Stability Notes

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 translationZ on 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.

Code Quality / Refactor Notes

  • Shared catalog device behavior extracted to CatalogUiProfile
  • Duplicated span-count and legacy caps removed from fragments
  • README and code comments expanded for maintainability

Create a GitHub Release (Manual)

  1. Commit and push changes.
  2. Open repository Releases page on GitHub.
  3. Click Draft a new release.
  4. Choose a tag (example: v1.0.0).
  5. Attach app/build/outputs/apk/release/app-release.apk.
  6. Publish release.

License & Content Responsibility

This project is a client template. You are responsible for using legal and authorized content sources.

About

Android TV app for channels and movies with D-pad UX, playback fallback, and legacy API 19 support.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages