Skip to content

Repository files navigation

Android Automator

A local-first semantic automation engine for Android — turning raw notifications and SMS messages into structured, meaningful actions without sacrificing privacy.

Features (MVP)

  • Notification Capture — Listens to all incoming notifications via NotificationListenerService
  • SMS Capture — Reads incoming SMS messages via BroadcastReceiver
  • Rule Engine — Create custom automation rules with conditions (text match, regex, sender, amount detection, time windows) and actions
  • Expense Automation — Auto-extract amount, currency, merchant, and category from bank/payment notifications
  • Local Storage — All data stored on-device using SQLite (via sqflite)
  • Event Log — Full audit trail of every captured notification and SMS
  • Rule Preview — Test rules against sample text before enabling

Architecture

┌─────────────────────────────────────────┐
│ Flutter UI │
│ (Home, Rules, Expenses, Events, Settings) │
├─────────────────────────────────────────┤
│ Provider State │
│ (Rules, Events, Expenses, Dashboard) │
├─────────────────────────────────────────┤
│ Services Layer │
│ (RuleEngine, ExpenseParser, PlatformChannel) │
├─────────────────────────────────────────┤
│ SQLite Database │
│ (rules, conditions, actions, events, expenses) │
├──────────────────┬──────────────────────┤
│ Platform Channel │ EventChannel │
├──────────────────┴──────────────────────┤
│ Native Android │
│ (NotificationListenerService, │
│ SmsReceiver, MainActivity) │
└─────────────────────────────────────────┘

Project Structure

lib/
├── main.dart # Entry point with provider setup
├── app.dart # App widget, theming, routing
├── models/
│ ├── automator_event.dart # Unified event model
│ ├── rule.dart # Rule, Condition, Action models
│ └── expense.dart # Expense model + categories
├── database/
│ └── database_helper.dart # SQLite database with all CRUD
├── services/
│ ├── rule_engine.dart # Core rule evaluation engine
│ ├── expense_parser.dart # Amount/merchant/category extraction
│ └── platform_channel_service.dart # Flutter <-> Android bridge
├── providers/
│ ├── rules_provider.dart
│ ├── events_provider.dart
│ ├── expenses_provider.dart
│ └── dashboard_provider.dart
└── screens/
├── onboarding/ # Progressive permission onboarding
├── home/ # Dashboard with stats
├── rules/ # Rule list + create rule
├── expenses/ # Expense ledger
├── events/ # Event log / audit trail
└── settings/ # Permissions & app info
android/.../kotlin/.../
├── MainActivity.kt # Platform channels
├── AutomatorNotificationService.kt # Notification listener
└── SmsReceiver.kt # SMS broadcast receiver

Getting Started

# Install dependencies
flutter pub get
# Run on connected Android device
flutter run
# Run tests
flutter test

Permissions

The app requires:

  1. Notification Access — Enabled via system settings (NotificationListenerService)
  2. SMS Read Access — Requested at runtime (RECEIVE_SMS + READ_SMS)

Both permissions are requested progressively during onboarding with clear rationale.

Privacy

  • All processing happens on-device
  • No cloud sync, no background uploads
  • No analytics or tracking
  • Full audit log of every automation

About

Local-first semantic automation engine for Android — turns notifications and SMS into structured actions, all on-device

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages