Skip to content

A simple app to provide configured weather alert so that you are ready for next hour or day! Built using Android Jetpack Compose and Circuit UDF.

License

Notifications You must be signed in to change notification settings

hossain-khan/android-weather-alert

Repository files navigation

Android CI Post Merge Check codecov

Android - Weather Alert

A simple app to alert you about specific weather condition based on your configured threshold.

Note

The app has been co-created with the help of GitHub Copilot, ChatGPT and Google Gemini. 🤖

Weather Alert Banner Image

This app helps you to prepare for weather conditions like snow and rain, for example if there would be heavy snow ❄️ this will allow you charge your snow blower batteries, put car in the garage, and other related activities.

This app is a result from personal need to have focused alert compared to all existing apps available in the Play Store.

App Summary

Set it and forget it — get alerted when it matters!

Weather Alert is a simple, no-frills app designed to notify you when specific weather conditions meet the thresholds you set. Whether it’s a snowy driveway or a rainy day, stay ahead with timely alerts that help you prepare with ease.

🎨 Key App Features

🌨 Custom Alerts for Specific Weather Conditions:
Set thresholds for snowfall or rainfall (e.g., 5cm snow, 10mm rain) and receive notifications only when they’re met.

🌐 Choose Your Data Source:
Pick between OpenWeatherMap, Tomorrow.io, OpenMeteo, and WeatherAPI for reliable and accurate forecasts.

🔑 Add Your Own API Key:
Ensure uninterrupted service by using your own API key for weather data.

Set Your Alert Frequency:
Control how often the app checks for weather updates—every 6, 12, or 18 hours—so you get timely notifications without unnecessary checks.

📲 Rich Notifications:
Receive simple, clear notifications with all the details you need to take action.

🛠 Minimalist Interface:
Easily configure and view your alerts in a simple, intuitive tile-based design.

Why Choose Weather Alert?

  • Focused on delivering only what you need: alerts that meet your criteria.
  • Lightweight and efficient, with no unnecessary extras.
  • Built for people who want actionable weather notifications, hassle-free.

Try out Weather Alert today and let the app do the work for you!

Tech Stack 📱

Simple application generated from Android App template that uses:

  • Jetpack Compose
  • ⚡️ Circuit - UDF Architecture
  • Jetpack libraries like - Room, Datastore, Material 3, and so on
  • 🚇 Metro for dependency injection
  • ... and few more. See libs.versions.toml to get more idea.

Here is a diagram of Gradle modules and architecture for this app.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#E3F2FD',
    'primaryTextColor': '#1565C0',
    'primaryBorderColor': '#1976D2',
    'lineColor': '#42A5F5',
    'secondaryColor': '#FFF3E0',
    'tertiaryColor': '#E8F5E9',
    'background': '#FFFFFF',
    'mainBkg': '#FFFFFF',
    'secondBkg': '#FFFFFF',
    'tertiaryBkg': '#FFFFFF'
  }
}}%%
flowchart TB
    subgraph ExternalAPIs["🌐 External Weather APIs"]
        direction LR
        API_OW[("OpenWeatherMap")]
        API_TI[("Tomorrow.io")]
        API_OM[("Open-Meteo")]
        API_WA[("WeatherAPI")]
    end

    subgraph ServiceModule[":service - Weather Service Modules"]
        direction LR
        Service_OW[":openweather<br/>📦"]
        Service_TI[":tomorrowio<br/>📦"]
        Service_OM[":openmeteo<br/>📦"]
        Service_WA[":weatherapi<br/>📦"]
    end

    subgraph DataModel[":data-model"]
        DTO["Shared DTOs &<br/>Data Classes<br/>📋"]
    end

    subgraph AppModule[":app - Main Application"]
        direction TB
        subgraph UI["UI Layer"]
            Compose["Jetpack Compose<br/>Material 3<br/>🎨"]
            Circuit["Circuit UDF<br/>Presenters<br/>⚡"]
        end
        subgraph Data["Data Layer"]
            Room["Room DB<br/>🗄️"]
            DataStore["DataStore<br/>Preferences<br/>⚙️"]
            Repo["Weather<br/>Repository<br/>📊"]
        end
        subgraph Background["Background Processing"]
            WorkManager["WorkManager<br/>⏰"]
            Notifications["Notifications<br/>🔔"]
        end
        subgraph DI["Dependency Injection"]
            Metro["Metro DI<br/>🚇"]
        end
    end

    %% External API connections
    API_OW -.->|"HTTP/REST"| Service_OW
    API_TI -.->|"HTTP/REST"| Service_TI
    API_OM -.->|"HTTP/REST"| Service_OM
    API_WA -.->|"HTTP/REST"| Service_WA

    %% Module dependencies
    DTO -->|"provides models"| Service_OW
    DTO -->|"provides models"| Service_TI
    DTO -->|"provides models"| Service_OM
    DTO -->|"provides models"| Service_WA
    DTO -->|"provides models"| AppModule

    Service_OW -->|"forecast data"| Repo
    Service_TI -->|"forecast data"| Repo
    Service_OM -->|"forecast data"| Repo
    Service_WA -->|"forecast data"| Repo

    %% Internal app connections
    Repo --> WorkManager
    WorkManager --> Notifications
    Room --> Repo
    DataStore --> Repo
    Circuit --> Compose
    Metro -.->|"injects"| UI
    Metro -.->|"injects"| Data
    Metro -.->|"injects"| Background

    %% Styling
    classDef external fill:#FFECB3,stroke:#FF8F00,stroke-width:2px
    classDef service fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
    classDef data fill:#E8F5E9,stroke:#388E3C,stroke-width:2px
    classDef ui fill:#FCE4EC,stroke:#C2185B,stroke-width:2px
    classDef background fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px
    classDef di fill:#ECEFF1,stroke:#546E7A,stroke-width:2px

    %% Apply styling classes
    class API_OW external
    class API_TI external
    class API_OM external
    class API_WA external

    class Service_OW service
    class Service_TI service
    class Service_OM service
    class Service_WA service
    class DTO service

    class Room data
    class DataStore data
    class Repo data

    class Compose ui
    class Circuit ui

    class WorkManager background
    class Notifications background

    class Metro di
Loading

About

A simple app to provide configured weather alert so that you are ready for next hour or day! Built using Android Jetpack Compose and Circuit UDF.

Topics

Resources

License

Stars

Watchers

Forks

Languages