Android news application developed in Kotlin with Jetpack Compose, following the MVVM architecture and Android development best practices. The application uses the NewsAPI API to display news, allowing you to save articles locally, navigate between categories, and search for news based on a query.
- Browse news: Access to top news by category (general, business, entertainment, health, science, sports, technology).
- Search: Find news by keyword.
- Bookmark: Save articles in the local database.
- History: View recent searches.
- Offline mode: Access saved articles without a connection.
- Dynamic UI: Animations and transitions with Jetpack Compose (Shared element transition).
The project follows an MVVM (Model - View - ViewModel) architecture, separating responsibilities into different layers to improve code scalability, testability, and maintainability.
| Component | Technology |
|---|---|
| UI | Jetpack Compose |
| Architecture | MVVM & Clean Architecture |
| Dependency Injection | Hilt |
| Networking | Retrofit |
| Local Storage | Room |
| Pagination | Paging 3 (PagingSource & RemoteMediator) |
| Image Loading | Coil |
| Navigation | Compose Navigation |
The app is structured into three main layers: Data, Domain, and UI.
.
├── data
│ ├── local
│ │ ├── dao
│ │ ├── entity
│ │ └── relation
│ ├── paging
│ ├── remote
│ │ └── response
│ └── repository
│
├── domain
│ ├── model
│ ├── repository
│ └── usecases
│
├── ui
│ ├── core
│ │ ├── components
│ │ ├── mappers
│ │ └── navigation
│ ├── screens
│ └── theme
- Data: Contains data access logic.
local: Room database (dao,entity,relation).remote: API consumption with Retrofit (response).paging: Paging logic with Paging 3.repository: Repository implementations that bridgelocalandremote.
- Domain: Defines business rules and domain models.
model: Models used by the domain layer.repository: Interfaces that define contracts for data access.usecases: Use cases that encapsulate business logic.
- UI: Interface with Jetpack Compose.
core:components: Reusable UI components.navigation: Navigation handling with Compose.
screens: Each screen of the application.theme: Definitions of colors, typography, and styles.
| Top Headlines | More Headlines | Article Details |
|---|---|---|
![]() |
![]() |
![]() |
| Search Results | Recent Searches | Bookmarks (Empty) |
![]() |
![]() |
![]() |
| Bookmarked Articles | Swipe to Delete | After Deleting |
![]() |
![]() |
![]() |
- Clone this repository.
- Open the project on Android Studio.
- Set your NewsAPI API key:
- Get an API key from the official website.
- Add it to your
local.propertiesfile:NEWS_API_KEY=your_api_key_here
- Sync the project and run it on an Android device/emulator.
Daniel Frías - danielfb2312@gmail.com - LinkedIn Profile








