An open API service indexing awesome lists of open source software.

https://github.com/sergio11/nimbustv_android

I built NimbusTV as a personal project to dive into Android TV development ๐Ÿ“บ๐Ÿ’ป, using Jetpack Compose ๐Ÿ–Œ๏ธ to create a seamless user interface ๐ŸŒŸ. It's a hands-on journey ๐Ÿš€ where I'm exploring new concepts ๐Ÿ“š and improving my skills ๐Ÿ› ๏ธ in building TV apps for the modern Android ecosystem ๐ŸŒ.
https://github.com/sergio11/nimbustv_android

androidtv clean-architecture dash exoplayer hilt-compose hilt-dependency-injection hls jetpack-compose jetpack-compose-navigation kotlin m3u8-playlist material3-android material3-components mvi mvi-architecture room-database room-persistence-library

Last synced: about 2 months ago
JSON representation

I built NimbusTV as a personal project to dive into Android TV development ๐Ÿ“บ๐Ÿ’ป, using Jetpack Compose ๐Ÿ–Œ๏ธ to create a seamless user interface ๐ŸŒŸ. It's a hands-on journey ๐Ÿš€ where I'm exploring new concepts ๐Ÿ“š and improving my skills ๐Ÿ› ๏ธ in building TV apps for the modern Android ecosystem ๐ŸŒ.

Awesome Lists containing this project

README

          

# NimbusTV ๐Ÿ“บ๐ŸŒ โ€“ A Personal Learning Project for Android TV Development

**NimbusTV** is a personal project I developed to apply and enhance my skills in **Android TV development** ๐Ÿ“บ, **Jetpack Compose for TV** ๐Ÿ–ฅ๏ธ, **Clean Architecture** ๐Ÿ›๏ธ, and **MVI** ๐Ÿ”„. The goal was to build an efficient, user-friendly streaming app that simplifies channel management and gives users easy access to their favorite TV content.

This project allowed me to dive deep into Android TV design patterns, exploring how to create smooth, intuitive user interfaces and ensuring scalability for larger applications. The app supports a variety of content types ๐Ÿ“‚, seamlessly allowing users to organize and switch between categoriesโ€”such as sports ๐Ÿ†, movies ๐ŸŽฌ, news ๐Ÿ“ฐ, and music ๐ŸŽถโ€”while handling modern streaming formats like HLS ๐Ÿ“ก, DASH ๐ŸŽฅ, and encrypted channels ๐Ÿ”.

I also incorporated **EPG (Electronic Program Guides)** ๐Ÿ“… to provide real-time schedules, allowing users to plan their viewing experience and set **custom reminders** ๐Ÿ”” for their favorite shows.

Through this project, I further honed my knowledge of **Jetpack Compose** and how to create a responsive, visually appealing interface for Android TV. **NimbusTV** leverages my understanding of **Clean Architecture** and **MVI** to ensure that the app is not only functional but also well-structured, making future improvements and scaling easier.

Working on **NimbusTV** has been a great way for me to deepen my understanding of Android TV development and design best practices, and I'm proud to showcase this project as a way of documenting my learning journey.

Crafted with **Jetpack Compose for TV** ๐Ÿ–ฅ๏ธ, NimbusTV shines on the big screen, delivering a smooth, elegant experience for Android TV. Built on the reliable **Clean Architecture** ๐Ÿงฉ and **MVI** pattern foundations, itโ€™s designed to be fast, scalable, and visually immersive. Thanks to the [**๐Ÿฎ Fudge**](https://github.com/sergio11/fudge_tv_compose_library) UI Kit, NimbusTV combines a sleek design with easy navigation, putting total control in your hands ๐ŸŽ›๏ธ.

A huge thank you to the creators of **[JetFit](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)** and the contributors to **[PR #183](https://github.com/android/tv-samples/pull/183)** for providing an invaluable foundation for **NimbusTV**. This is an attempt to provide an open-source implementation of JetFit. Licensed under **Apache 2.0** (implementation) and **CC BY 4.0** (design), JetFit served as a key reference for building a seamless **Jetpack Compose for TV** experience. We encourage you to visit the PR, review the effort, and give the deserved recognition. For more details and attributions, please check the **"Credits"** section below. ๐Ÿš€

To handle M3U playlist parsing, Iโ€™ve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing NimbusTV to support even more complex M3U structures, while accommodating the varied and sometimes inconsistent formats found in IPTV playlists. A copy of the original license can be found in the [`LICENSE-M3UPARSER`](LICENSE-M3UPARSER) file.

**NimbusTV is for educational purposes only ๐ŸŽ“**, and I am not responsible for the use or content viewed ๐Ÿšซ. Usage of any media content must comply with local laws and regulations. This project does not endorse the use of unauthorized streams.

Please review the full **Disclaimer** section below for more information ๐Ÿ“œ.

This app, **Nimbustv**, includes images and resources designed by [Freepik](https://www.freepik.com). We would like to acknowledge and thank Freepik for their incredible design assets. The images used in the app are provided with attribution, as required by Freepik's licensing terms. For more information on Freepik's resources, please visit [www.freepik.com](https://www.freepik.com).












Slides are built using the template from [Previewed](https://previewed.app/template/AFC0B4CB). I extend my gratitude to them for their remarkable work and contribution.

## โš ๏ธ Disclaimer

For demonstration and testing purposes, **NimbusTV** utilizes publicly available IPTV playlists from the [IPTV-Org](https://iptv-org.github.io/) project. These playlists offer a diverse collection of international channels in M3U format, enabling users to explore and experience a wide range of content directly from the app.

To handle M3U playlist parsing, weโ€™ve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing **NimbusTV** to support even more complex M3U structures while accommodating the varied and sometimes inconsistent formats found in IPTV playlists.

The name **NimbusTV** was generated using **ChatGPT** as part of a creative brainstorming process. Any resemblance to existing brands, products, or services is purely coincidental.

The **NimbusTV** logo was also generated with **ChatGPT** and is entirely free of copyright restrictions. It may be used freely for personal and open-source projects without any attribution requirements.

**NimbusTV** does not host, distribute, or promote any copyrighted or illegal content. The user is solely responsible for the playlists they load and how the app is used. This project is for educational purposes only.

## Overview ๐ŸŒ

NimbusTV is a personal project I created to improve my skills in Android TV development. It aims to offer an intuitive and seamless way for users to enjoy content on their Android TVs, with a focus on simplicity and ease of use. Through this project, I explored features like M3U playlist management, customizable reminders, and EPG integration, all while learning to implement best practices in UI design and app architecture.



## Technologies Used ๐Ÿ› ๏ธ

NimbusTV harnesses a variety of technologies to deliver a seamless streaming experience on Android TV. ๐ŸŒŸ

- **Kotlin** ๐Ÿฆบ: The preferred language for developing Android applications, offering modern syntax and powerful features to enhance productivity. ๐Ÿš€

- **Room** ๐Ÿ—„๏ธ: Implements a local database schema to persist information about M3U playlists, channels, EPG data, and program entries linked to each user profile. Each user profile in NimbusTV maintains its own independent playlists and EPGs, ensuring personalized content management. ๐Ÿ”๐Ÿ“‚

- **Jetpack DataStore** ๐Ÿ’พ: A modern data storage solution used to store application preferences shared across profiles. It allows users to enable different EPG viewing modes, such as "Channel Overview" or "Now and Schedule," and activate channel search options. ๐Ÿ”โœจ

- **Coil** ๐Ÿ–ผ๏ธ: An image loading library for Android that simplifies the process of loading images from the internet, ensuring smooth and efficient image handling in the app. ๐Ÿ“ธ๐ŸŒ

- **WorkManager** ๐Ÿ•ฐ๏ธ: Used to schedule background tasks, such as updating EPG data daily and sending reminders for upcoming shows, ensuring that users never miss their favorite content. ๐Ÿ“…โฐ

- **Coroutines** ๐ŸŒ€: Simplifies asynchronous programming and efficiently manages background tasks, enhancing app responsiveness. โฑ๏ธโšก

- **Clean Architecture** ๐Ÿ—๏ธ: Promotes a well-structured and scalable app design by separating concerns into distinct layers, enhancing maintainability and testability. ๐Ÿ”

- **MVI (Model-View-Intent)** ๐Ÿ“ˆ: Implements a unidirectional data flow pattern, ensuring a clear separation between UI components and business logic. ๐Ÿ”„

- **Jetpack Compose for TV** ๐Ÿ“บ: Utilizes Jetpack Compose to build modern, responsive UIs tailored for TV screens, optimizing the interface for large displays. ๐ŸŽจ

- **Jetpack Compose Navigation** ๐Ÿ—บ๏ธ: Facilitates in-app navigation and screen transitions with a clear API, supporting deep linking and complex navigation flows effortlessly. ๐Ÿšฆ

- **Material Design 3** ๐ŸŽจ: Applies the latest Material Design guidelines to create a visually appealing and intuitive user interface. ๐Ÿ–Œ๏ธ

- **๐Ÿฎ Fudge** ๐Ÿฐ: Fudge is a Jetpack Compose UI Kit for TV apps, providing pre-built components and tools to craft engaging experiences on the big screen. ๐ŸŽฌ๐Ÿš€

- **Media3 for Media Playback** ๐ŸŽฅ:
- **Media3 ExoPlayer** ๐ŸŽฌ: Part of the Media3 library, ExoPlayer supports various media formats, providing advanced features for high-quality playback. ๐Ÿ“ป๐Ÿฟ
- **HLS (HTTP Live Streaming)** ๐Ÿ“บ: This plugin allows the playback of HLS streams, enabling adaptive streaming for different network conditions. It dynamically adjusts the quality of the video based on the user's internet speed, ensuring smooth playback with minimal buffering. ๐ŸŽฅ๐ŸŒ
- **DASH (Dynamic Adaptive Streaming over HTTP)** ๐Ÿ“ก: This plugin enables the playback of DASH streams, another adaptive streaming format. Similar to HLS, DASH adjusts video quality in real-time, providing a seamless viewing experience by optimizing bandwidth usage and improving playback performance. ๐Ÿ“บโšก
- **Media3 UI** ๐ŸŽจ: Provides UI components for integrating media playback controls into your appโ€™s interface. ๐Ÿ•น๏ธ๐ŸŽถ

- **Dagger Hilt** ๐Ÿงฉ: A dependency injection library simplifying the management of dependencies and enhancing modularity in your app. ๐Ÿ”ง๐Ÿ’ก

- **Mapper Pattern** ๐Ÿ”„: Facilitates conversion between different data models, ensuring data consistency across application components. ๐Ÿ“



## Architecture Overview ๐Ÿ›๏ธ

NimbusTV is designed with a robust architecture for maintainability, testability, and flexibility. The architecture leverages several design patterns and principles:

### **Clean Architecture**
Clean Architecture focuses on separating concerns into distinct layers:
- **Presentation Layer**: Handles UI and user interactions using Jetpack Compose for modern interfaces. ๐Ÿ–ฅ๏ธโœจ
- **Domain Layer**: Contains business logic and use cases, independent of external frameworks. ๐Ÿง ๐Ÿ”—
- **Data Layer**: Manages data sources and repositories, abstracting data retrieval and storage. ๐Ÿ“ฆ๐Ÿ”’

### **Data Sources**
Data sources fetch and manage data from various origins, including:
- **Remote Data Sources** ๐ŸŒ: Interact with cloud services or web APIs (e.g., Firebase Firestore). โ˜๏ธ๐Ÿ”„
- **Local Data Sources** ๐Ÿ’ป: Handle local data storage (e.g., Room and Jetpack DataStore). ๐Ÿ’พ๐Ÿ—ƒ๏ธ

### **Repository Pattern**
The repository pattern provides a unified interface for data access, decoupling data retrieval from the rest of the application for easier testing and maintenance. ๐Ÿ“šโš™๏ธ

### **Use Cases**
In the Domain Layer, Use Cases represent specific actions, encapsulating business logic and interacting with repositories to retrieve or modify data. ๐Ÿงฉ๐Ÿ”

### **Inversion of Control (IoC)** ๐Ÿ”„
IoC inverts control flow, allowing dependencies to be injected rather than hardcoded, promoting modularity and reducing boilerplate code. ๐Ÿ”ง๐Ÿ”„

### **SOLID Principles** ๐Ÿ“
We apply SOLID principles to ensure our codebase remains clean and maintainable:
- **Single Responsibility Principle (SRP)** โœ…: Each class has one responsibility.
- **Open/Closed Principle (OCP)** ๐Ÿ”“: Classes are open for extension but closed for modification.
- **Liskov Substitution Principle (LSP)** ๐Ÿ”„: Subtypes must be substitutable for their base types.
- **Interface Segregation Principle (ISP)** ๐Ÿšซ: Clients should not depend on interfaces they do not use.
- **Dependency Inversion Principle (DIP)** ๐Ÿ“: High-level modules depend on abstractions.

### **MVI (Model-View-Intent)** ๐Ÿ“ˆ
MVI manages state and interactions, ensuring a predictable unidirectional data flow. ๐Ÿ”„๐Ÿ“Š

This architecture ensures that NimbusTV is well-structured, easy to maintain, and scalable, adhering to best practices and design principles. ๐ŸŒˆโœจ

## App Screenshots ๐Ÿ“ธ

Explore **NimbusTV** and its user-friendly design through these screenshots, offering a sneak peek into the app's key features!

### Onboarding and Getting Started ๐ŸŽฌ

The journey with **NimbusTV** begins by creating a profile. This simple step allows you to personalize your experience by organizing your favorite EPGs and playlists. There's no need for online accounts or loginsโ€”everything is handled locally, ensuring a smooth and self-contained experience. I built this feature to learn how to structure and manage app data efficiently while focusing on a seamless user experience.







### Managing Your Profiles ๐Ÿ‘ค

Step into the **Profiles** section, where you can customize **NimbusTV** to suit your viewing preferences. Hereโ€™s what makes the Profiles section so versatile:



- **Profile Selection**: Choose between different profiles in the **Profile Selection** screen. Each profile allows for custom EPGs and playlists, ensuring a unique setup for each viewer.





- **Creating Profiles**: Add up to four profiles, perfect for household members who want their own playlists and EPGs. Customize each with a unique name and avatar, making NimbusTV adaptable and fun for everyone!







- **Editing Profiles**: Update profile details, including name, avatar, and security PIN, all while keeping your data secure and your experience personalized.





- **Deleting Profiles**: When a profile is no longer needed, delete it to keep **NimbusTV** clean and focused on what matters most.





The **Profiles** section makes NimbusTV adaptable to every userโ€™s viewing needs, ensuring a personalized experience on a single device.



### Home Screen ๐Ÿ ๐Ÿ“บ

Welcome to the **Home** screen of **NimbusTV**, your central hub for exploring and enjoying your playlists and channels:





- **Channel Preview** ๐Ÿ”: Hover over any channel to get a quick preview of what's currently playingโ€”ideal for browsing without fully tuning in.





- **Favorites** โญ: Mark your favorite channels to keep them easily accessible for quick viewing.

- **Smooth Playlist Switching** ๐Ÿ”„: Effortlessly switch between playlists to explore channels organized by theme or preference, perfect if you like variety.





- **Playlist Management** ๐ŸŽ›๏ธ: From the main screen, access the **Manage Playlist** button to open the playlist management view, where you can:
- **Add New Playlists** โž•: Add new M3U playlists to expand your channel lineup.
- **Delete Playlists** ๐Ÿ—‘๏ธ: Remove playlists that are no longer needed.
- **Update Playlists** ๐Ÿ”„: Refresh playlists to keep content up-to-date.
- **Explore Channels and Favorites** ๐Ÿ“‹: View each playlist's channels, mark favorites, or play them instantly.









With NimbusTVโ€™s **Home** screen, youโ€™re in control of all your playlists and favorite channels, providing a fully personalized TV experience. ๐ŸŽ‰

### Channel Search Screen ๐Ÿ”Ž๐Ÿ“บ

The **Channel Search** feature in **NimbusTV** is your go-to tool for quickly finding channels across all imported playlists! Accessible from the **Side Menu** (if enabled in **Preferences**), this screen allows you to:

- **Quickly Search Channels** ๐Ÿ”: Type a keyword to search through all registered channels, making it easy to find exactly what youโ€™re looking for in seconds.

- **Intuitive On-Screen Keyboard** โŒจ๏ธ: Use the keyboard on the left side of the screen to input search terms, with the results instantly updating as you type.

- **Results Display** ๐Ÿ“œ: Found channels are shown in a convenient list on the right side of the screen. Browse through and explore results based on your search term.

- **Channel Actions** ๐Ÿ’ฌ: Selecting a channel in the search results opens a dialog with two options:
- **Play Now** โ–ถ๏ธ: Instantly tune in to the channel.
- **Add to Favorites** โญ: Save the channel for quick access from your favorites list.







The **Channel Search** screen streamlines navigation and lets you customize your experience by finding and favoriting channels across your playlists.

### Favorites Section โญ

The **Favorites** section in **NimbusTV** is designed for quick access to the channels you love most. Hereโ€™s what makes it a perfect tool for streamlining your viewing experience:

- **Easy Access to Favorites** ๐Ÿ“œ: Your favorite channels are all listed in one place, making it effortless to start watching right away.

- **Instant Playback** โ–ถ๏ธ: Simply select a channel from the list to begin playback, no need to navigate through different playlists.

- **Manage Favorites** ๐Ÿ—‘๏ธ: Want to declutter? Easily remove channels from your favorites list with a single action, keeping only the content you truly enjoy.

The **Favorites** section keeps your top channels just a click away, making it your personalized hub for entertainment on NimbusTV!





### EPG (Electronic Program Guide) ๐Ÿ“…

The **Electronic Program Guide (EPG)** in **NimbusTV** lets each profile import, view, and manage channel lists and programming schedules. Hereโ€™s an overview of its key features:





#### EPG Viewing Modes ๐ŸŽ›๏ธ

**NimbusTV** offers two EPG display modes, configurable from **Settings**:

- **Now & Schedule Mode** โฐ:
This mode displays the EPG in a two-column format:
- The first column shows all channels with their currently airing programs.
- The second column lists the full schedule for each channel, indicating whether the event is past, live, or upcoming.
You can select any upcoming event to open a dialog and set a reminder, which will notify you 5 minutes before the show starts.









- **Single-Column Mode** ๐Ÿ“œ:
This format organizes the EPG into a single column, with each channel appearing in an individual row alongside its full schedule for the day. Just like in **Now & Schedule Mode**, you can interact with events and set reminders for future shows.





Both modes provide intuitive navigation through each channelโ€™s programming, making it quick and easy to keep track of your favorite shows.

#### EPG Source Management ๐Ÿ”ง

Each profile can access **EPG Source Management**, where you can:



- **Add New EPGs** โž•: Import custom EPG sources to load channel programming schedules.



- **Delete Existing EPGs** ๐Ÿ—‘๏ธ: Remove any EPG sources that you no longer need.



- **Daily Auto-Updates** ๐Ÿ”„: NimbusTV schedules a daily update for each active EPG, refreshing programming data so you always have the latest information.

With these flexible options, each profile in **NimbusTV** can tailor its own program guide, ensuring a viewing experience thatโ€™s convenient and perfectly suited to your preferences. Stay organized, informed, and on top of your favorite channelsโ€™ schedules!



### Full-Screen Player ๐ŸŽฅ

The **Full-Screen Player** in **NimbusTV** provides an immersive viewing experience, allowing you to enjoy channels in full detail. Hereโ€™s what you can do within the player:

- **Full-Screen Playback** ๐Ÿ“บ: Each channel can be viewed in full-screen mode, giving you a clear and focused experience of your selected content.

- **Add to Favorites** โญ: Want quick access to a channel? Add it to your favorites directly from the player screen with just one click.

- **Access System Settings** โš™๏ธ: Open the system settings panel without leaving the player, allowing for quick adjustments to enhance your viewing experience.









#### Audio-Only Player for Music & Radio ๐Ÿ“ป

For music or radio channels, **NimbusTV** launches a special **Audio-Only Player**:

- **Music & Radio Display** ๐ŸŽถ: When tuning into a radio or music channel, the audio-only player displays station or channel information, delivering a streamlined audio experience without video, ideal for listening enjoyment.

With both full-screen video playback and an optimized audio-only mode, **NimbusTV**โ€™s player is designed to adapt to your viewing and listening needs, making every channel as engaging as possible.



### Settings Screen โš™๏ธ

The **Settings** screen in **NimbusTV** offers you a range of customizable options to tailor your viewing experience. Hereโ€™s how you can enhance your interaction with the app:



### Channel Search Settings ๐Ÿ”

The **Channel Search** option allows you to enable or disable the feature to search for channels across your playlists, providing you with flexibility in navigation.

- **Toggle Search Visibility** โš™๏ธ: Enable or disable the channel search feature easily. When activated, the search icon will appear in the side menu, making it simple to find your favorite channels at any time.



- **EPG View Mode Selection** ๐Ÿ“…: Choose how you want to view the Electronic Program Guide (EPG). You can opt for a **"Now & Schedule"** format with two columns for an overview of what's currently airing and what's coming up, or a **unified format** with a single column displaying all programming for the current day in one row per channel.



### Additional Settings ๐Ÿ› ๏ธ

- **Access AndroidTV Settings** ๐Ÿ“ฑ: Quickly navigate to the AndroidTV system settings for further customization and adjustments.

- **Legal Information** ๐Ÿ“œ: View essential documents like **Terms and Conditions**, ensuring you understand the usage of the app.



- **Help Section** โ“: Need assistance? Access the help section for FAQs and troubleshooting tips to enhance your experience.



- **About Us** โ„น๏ธ: Learn more about **NimbusTV** and our mission in the "About NimbusTV" section.

- **Log Out** ๐Ÿšช: Easily log out of your account when youโ€™re done, ensuring your privacy and security.



With these settings, **NimbusTV** empowers you to create a viewing environment that fits your preferences, making your entertainment experience as enjoyable as possible!

---

### Acknowledgments

#### 1. **JetFit Project**
A huge thank you to the creators of **[JetFit](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)** and the contributors to **[PR #183](https://github.com/android/tv-samples/pull/183)** for providing an invaluable foundation for **NimbusTV**. **JetFit** has served as a reference for both the **Jetpack Compose for TV UI framework** and the appโ€™s design structure.

- **License**:
- **Apache 2.0** (Implementation)
- **CC BY 4.0** (Design)

The **JetFit** project significantly influenced the development of NimbusTV. Its **Apache 2.0**-licensed implementation was used to build out the **Jetpack Compose for TV** framework, while its **CC BY 4.0**-licensed design inspired the visual aspects of NimbusTV.

---

### ๐Ÿ“Œ Key Resources:
- **[JetFit GitHub Repository](https://github.com/TheChance101/tv-samples/tree/JetFit/JetFit)**
- **[JetFit Figma Design](https://www.figma.com/community/file/1237433831695839696/jetfit-fitness-app)**
- **[JetFit Case Study & Guidelines](https://developer.android.com/design/ui/tv/samples/jet-fit?hl=es-419)**
- **[Google TV Design Kit (Figma)](https://developer.android.com/design/ui/tv/guidelines)**

These resources, examples, and insights provided in the **JetFit repository** have played a crucial role in accelerating our development process and deepening our understanding of building seamless TV applications with **Jetpack Compose**. We deeply appreciate the contributions of the JetFit team and their commitment to open-source development.

---

#### 2. **IPTV-Org Project**
For demonstration and testing purposes, **NimbusTV** utilizes publicly available IPTV playlists from the **[IPTV-Org](https://iptv-org.github.io/)** project. These playlists provide a wide collection of international channels in M3U format, offering users the ability to explore diverse content directly from the app.

---

#### 3. **M3u Parser Library**
NimbusTV uses and customizes the **[M3u Parser](https://github.com/BjoernPetersen/m3u-parser)** library to handle M3U playlist parsing. Modifications were made to extend its functionality and accommodate more complex M3U structures, allowing the app to handle the varied formats found in IPTV playlists.

- A copy of the original MIT license is included in the [`LICENSE-M3UPARSER`](LICENSE-M3UPARSER) file.

---

#### 4. **ComposeTv Repository**
๐Ÿ™ Special thanks to **[Umair Khalid](https://github.com/UmairKhalid786)** for his excellent work on the **[ComposeTv](https://github.com/UmairKhalid786/ComposeTv)** repository. This repository served as a vital resource and starting point for the NimbusTV project. The clean documentation and high-quality code of **ComposeTv** were invaluable in the learning and development process.

---

#### 5. **Design Resources**
We would like to express our deep appreciation to **[Freepik](https://www.freepik.es/)** for providing the icons and images used in this project.

- **Icons and images taken from** [Freepik](https://www.freepik.com) and [Flaticon](https://www.flaticon.es).

## Disclaimer

NimbusTV is provided for educational and learning purposes only ๐ŸŽ“. The project has been developed to facilitate access and viewing of content through M3U playlists ๐Ÿ“‚, organized in an efficient and accessible manner on Android TV devices ๐Ÿ“บ. NimbusTV is not responsible for the use made of the app or the content viewed through it ๐Ÿšซ.

Users are responsible for ensuring that the content they access through the app does not violate any copyright laws or other applicable regulations in their jurisdiction โš–๏ธ. NimbusTV uses public IPTV sources such as IPTV org ๐ŸŒ, which provide freely accessible and public domain channels ๐Ÿ“ก. NimbusTV does not control or guarantee the availability or legality of the TV channels available through these sources ๐Ÿ”.

By using NimbusTV, you acknowledge that the use of the app is at your own risk โš ๏ธ, and the development team assumes no responsibility for any copyright violations, legal issues, or damages resulting from accessing content through the app ๐Ÿ’ผ.

To handle M3U playlist parsing, weโ€™ve integrated and customized the [M3u parser](https://github.com/BjoernPetersen/m3u-parser) library. Modifications were made to extend the functionality, allowing **NimbusTV** to support even more complex M3U structures while accommodating the varied and sometimes inconsistent formats found in IPTV playlists.

The name **NimbusTV** was generated during a brainstorming session with AI. Any resemblance to existing brands, products, or services is purely coincidental.

The **NimbusTV** logo included in this repository is an original creation and is free to use for personal and open-source projects.

**NimbusTV** does not host, distribute, or promote any copyrighted or illegal content. The user is solely responsible for the playlists they load and how the app is used. This project is for educational purposes only.

## Visitors Count

## License โš–๏ธ

This project is licensed under the **Apache License 2.0**, a permissive open-source software license that allows developers to freely use, modify, and distribute the software. ๐Ÿš€ This includes both personal and commercial use, with some conditions for distribution and modification. ๐Ÿ“œ

Key terms of the Apache License 2.0:

- You are allowed to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software. ๐Ÿ’ป
- If you modify and distribute the software, you must include the original copyright notice, provide a copy of the Apache 2.0 license, and indicate any modifications made. ๐Ÿ“
- You are not allowed to use the name of the project or its contributors to promote derived works without permission. โœ‹
- The software is provided "as is," without any warranties, express or implied. ๐Ÿšซ๐Ÿ›ก๏ธ

Please see the full license text below for more detailed terms.

```
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/

Copyright (c) 2024 Dream software - Sergio Sรกnchez

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
```