Skip to content

Sorro/FeedGator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

164 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FeedGator

FeedGator (FG) is a modular Android feed aggregator built with a layered architecture (presentation, domain, data) using MVVM + Repository. Dependencies are wired manually through a shared AppContainer, which is used by the UI, ViewModels, repositories, WorkManager workers, and widgets.

This app was a project for an Android course at JTH with 2 other contributors that remain anonymous. Received grade 5 out of 5.

Showcase

Architecture at a glance

Layer Responsibilities Key types
Presentation Compose UI + ViewModels render StateFlow-driven screens and navigation. NewsFeedScreen, ArticleScreen, FGNavGraph, FeedViewModel
Domain Stable models and contracts that are UI/persistence agnostic. Article, DataSource, FeedMetadata, FeedRepository
Data Room + repositories + provider parsing. FGDatabase, FeedRepositoryRoom, SourceRepositoryRoom, RSSContentProvider
Background WorkManager refresh pipeline. FeedRefreshWorkManager, FeedRefreshWorker, FeedRefreshDispatcherWorker
Manual DI Explicit object graph shared across UI/VM/workers/widgets. FGApplication, FGAppContainer, FGWorkerFactory

Startup & manual dependency injection

FGApplication builds the shared FGAppContainer, installs FGWorkerFactory for WorkManager, and seeds a default RSS source that points at docs/xml/showcase.xml. This keeps the DI graph explicit and re-used across screens, widgets, and background work.

Data flow (DB-first, unidirectional)

FeedGator is DB-first: Room is the single source of truth. UI and widgets subscribe to Flow from repositories. Refresh operations fetch remote content through providers and write back to Room, which in turn emits state updates to the UI.

UI events → ViewModel → FeedRefreshController → WorkManager
   → FeedRefreshWorker → FeedRepositoryRoom → ContentProvider
   → Room update → Flow emission → UI/Widget recomposition

Content & synchronization

Capability Implementation
Pluggable providers ContentProviderFactory routes to RSSContentProvider (RSS/Atom XML today) and can be easily modified for new providers. See WorldNewsAPIContentProvider placeholder
Refresh triggers Pull-to-refresh and periodic background work both enqueue WorkManager jobs.
Rendering Article bodies rendered via WebView with HTML decode + CSS injection.
Rich media High resolution Images/video are supported when present in feed HTML and supported by WebView.

Navigation & UI patterns

  • Navigation is route-based using NavHost (FGNavGraph).
  • Screens are state-driven: FeedViewModel and ArticleViewModel expose StateFlow UI state that Compose collects.
  • User input uses Material 3 UI elements, and the navigation rail surfaces sources with compact icons for quick scanning.

Documentation map

Diagrams

About

Feed aggregator app for Android course at JTH

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors