diff --git a/README.md b/README.md index d045a06..8120730 100644 --- a/README.md +++ b/README.md @@ -2,42 +2,92 @@ # ⚡ FlowPilot -**Privacy-first, offline, and lightweight Android automation engine.** +### The private, battery-first Android automation engine — without root. +Automate your device seamlessly with event-driven triggers, privileged system actions via Shizuku, and a fluid Material 3 interface. No telemetry, no cloud accounts, and zero background battery drain. + +
+ +[![GitHub Release](https://img.shields.io/github/v/release/emi-ran/flowpilot?color=4285F4&label=Release&logo=github)](https://github.com/emi-ran/flowpilot/releases) +[![Android Compatibility](https://img.shields.io/badge/Android-8.0%2B%20(API%2026--36)-34A853?logo=android&logoColor=white)](https://developer.android.com) +[![Kotlin](https://img.shields.io/badge/Kotlin-2.2.10-7F52FF?logo=kotlin&logoColor=white)](https://kotlinlang.org) +[![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-4285F4?logo=jetpackcompose&logoColor=white)](https://developer.android.com/jetpack/compose) +[![Shizuku Supported](https://img.shields.io/badge/Shizuku-Supported-FB8C00)](https://shizuku.rikka.app) +[![Privacy](https://img.shields.io/badge/Telemetry-Zero%20%2F%20100%25%20Offline-00C853)](#-privacy--zero-trust-promise) [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](LICENSE) -[![Android Min SDK](https://img.shields.io/badge/Android-8.0%2B%20(API%2026--36)-brightgreen.svg)](https://developer.android.com) -[![Kotlin](https://img.shields.io/badge/Kotlin-2.2.10-purple.svg)](https://kotlinlang.org) -[![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-4285F4.svg)](https://developer.android.com/jetpack/compose) -[![Shizuku](https://img.shields.io/badge/Shizuku-Supported-orange.svg)](https://shizuku.rikka.app) -[![Tested On](https://img.shields.io/badge/Tested%20On-Xiaomi%20HyperOS-FF6900.svg)](https://mi.com) -[![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen.svg)](#build--installation)
-[🇺🇸 English](README.md)  •  [🇹🇷 Türkçe](README.tr.md) +[**🇺🇸 English**](README.md)  •  [**🇹🇷 Türkçe**](README.tr.md) + +
+ +

+ + Download APK + +   + + How It Works + +   + + Presets + +   + + Shizuku Guide + +

--- > [!NOTE] -> **📱 Device Compatibility & Community Testing Notice:** -> FlowPilot is created by an independent developer and is currently **developed and tested primarily on Xiaomi HyperOS (Xiaomi 15T Pro)**, as this is the developer's primary personal device. Standard Android APIs and best practices are adhered to wherever possible, but compatibility with other OEM skins (Google Pixel, Samsung One UI, OxygenOS, Motorola, etc.) has **not been tested yet**. Feedback, test reports on other hardware, and pull requests from other developers are warmly welcomed! +> **📱 Device Compatibility & Community Testing Notice** +> FlowPilot is an independent open-source project, actively developed and primary-tested on **Xiaomi HyperOS (Xiaomi 15T Pro)**. Strict adherence to standard Android Jetpack and system APIs is maintained throughout the codebase, and CI verifies runtime contracts against an **API 35 Android Emulator**. > -> CI runs `connectedDebugAndroidTest` on an API 35 Android Emulator. This checks runtime contracts in `RuntimeContractsInstrumentedTest`; it does not replace physical-device or OEM smoke testing. Release workflow blocks APK publishing when this emulator gate fails. - -## 🌟 Why FlowPilot? +> Because OEM skins (Samsung One UI, Google Pixel, Motorola, OxygenOS, etc.) implement background process limits differently, your test reports, feedback, and pull requests are warmly welcomed! -Most popular automation tools on Android are burdened with cloud requirements, account registrations, intrusive telemetry, battery-draining continuous polling, or complex legacy interfaces. +--- -**FlowPilot** takes a completely different approach: +## 🌟 Why FlowPilot? -- 🔒 **Private by Default:** No telemetry or cloud sync. Configured Webhooks, SMS, and exports can send only data you choose. -- ⚡ **Battery-Efficient & Event-Driven:** No constant CPU wake-locks. Sensors (accelerometer, proximity, ambient light) and broadcast receivers register only on-demand when active rules require them. -- 🛡️ **Shizuku Integration:** Execute system-level tasks (toggle Mobile Data, Airplane Mode, GPS, Dark Mode) securely with user-granted ADB permissions—without requiring root access. -- 🎨 **Modern Material 3 Design:** Fully native Jetpack Compose architecture supporting dynamic Dark & Light themes, fluid animations, and high accessibility standards. -- 🔊 **Offline Text-to-Speech (TTS):** Pre-synthesized on-device voice audio caching with zero cloud dependency. -- 🔄 **Open Ecosystem:** Export, import, and share automation rules as sanitized JSON, or choose password-encrypted full backups with Merge and Replace strategies. +Most Android automation tools force you to choose between steep complexity, heavy battery drain, or intrusive cloud logins. **FlowPilot was built to fix this.** + + + + + + + + + + + + + + +
+

🔋 Battery-First & Event-Driven

+

No constant CPU wake-locks or polling loops. Hardware sensors (accelerometer, proximity, light) and broadcast receivers register only when an active rule needs them and unregister instantly when idle.

+
+

🔒 100% Offline & Private

+

No analytics, no telemetry, no remote servers, and no accounts. Everything happens on your device. Webhooks and SMS actions send only the data you explicitly configure.

+
+

🛡️ Rootless System Superpowers

+

Harness the power of Shizuku to toggle Mobile Data, Airplane Mode, GPS, Dark Mode, and Force Stop apps using elevated ADB permissions—without rooting or voiding warranties.

+
+

🎨 Modern Material 3 & Compose

+

Crafted completely in native Jetpack Compose. Experience fluid 60/120 FPS transitions, dynamic Material You theming, haptic feedback, and glanceable Home Screen widgets.

+
+

🔊 Offline Text-to-Speech (TTS)

+

Let your phone talk to you with on-device synthesized voice caching. Create custom spoken alerts for battery events, bedtime reminders, or location changes—zero internet required.

+
+

🔐 Safe Sharing & Encrypted Backups

+

Export portable sanitized JSON rules to share with friends, or secure your entire library with AES-256-GCM password encryption (PBKDF2 with 100,000 iterations).

+
--- @@ -46,15 +96,17 @@ Most popular automation tools on Android are burdened with cloud requirements, a
- - - - + + + + + - + +
Home ScreenReady PresetsCreate AutomationSettings & AboutHome ScreenReady PresetsRule BuilderSettings & BackupAbout Dialog
Home Screen Ready PresetsCreate AutomationRule BuilderSettings & Backup About Dialog
@@ -62,110 +114,184 @@ Most popular automation tools on Android are burdened with cloud requirements, a --- -## 🚀 Key Features +## 💡 How FlowPilot Works + +FlowPilot follows a clear, intuitive 3-step mental model: + +``` +┌───────────────────────────┐ ┌───────────────────────────┐ ┌───────────────────────────┐ +│ 1. TRIGGER │ │ 2. CONDITIONS │ │ 3. ACTIONS │ +│ "When this happens" │ ───► │ "Only if all match" │ ───► │ "Do this in order" │ +│ (e.g., Arrive at Work) │ │ (e.g., Weekdays Only) │ │ (Silent + Turn on Wi-Fi) │ +└───────────────────────────┘ └───────────────────────────┘ └───────────────────────────┘ +``` + +### Relatable Examples: +- 🌙 **Bedtime Routine:** *When* the clock strikes 23:30 ➔ *Only if* charging ➔ *Turn on* Silent Mode, enable Dark Theme, and dim brightness to 10%. +- 🔋 **Full Charge Alert:** *When* battery reaches 100% ➔ *Speak* "Phone is fully charged, please unplug" and show notification. +- 🔕 **Flip to Silence:** *When* phone is placed face-down on a desk ➔ *Immediately* enable Do Not Disturb with a subtle confirmation pulse. + +--- + +## ⚡ 1-Tap Ready Presets + +Start automating instantly with built-in recipes designed for everyday life: + +| Preset | Trigger | Key Actions | +| :--- | :--- | :--- | +| 🌙 **Bedtime Routine** | Time reaches 23:30 | Enables Dark Mode, sets Silent profile, turns on DND, dims screen to 10% | +| 🔋 **Full Battery Protection** | Battery reaches 100% | Speaks offline unplug voice reminder & pushes persistent notification | +| ⚡ **Battery Saver Emergency** | Battery drops below 15% | Turns on Battery Saver, disables Bluetooth, lowers brightness, enables Dark Mode | +| 🔕 **Flip to Silence** | Phone placed face-down | Dual sensor check (Proximity + Gravity Z-axis) enables DND with a haptic pulse | +| 🔦 **Shake for Flashlight** | Firm phone shake | Toggles rear camera torch with tactile haptic feedback | +| 🎬 **Cinema / Night Reading** | Ambient light drops < 5 lx | Dims brightness to minimum and switches system to Dark Theme | +| 🚗 **Leaving Home Mode** | Disconnected from Home Wi-Fi | Enables Mobile Data (Shizuku), sets Normal ringer, raises volume to 80% | +| 🏠 **Welcome Home Mode** | Connected to Home Wi-Fi | Disables Mobile Data (Shizuku) to save power and restores balanced settings | +| 📍 **SMS Emergency Responder** | Incoming SMS with secret phrase | Locks GPS coordinates and replies with a live Google Maps location link | + +--- + +## 🎛️ Feature Matrix ### 1. Triggers (Events) -FlowPilot responds to a wide spectrum of hardware, system, and user events: -- **Application:** App opened or closed (via low-overhead `UsageStatsManager` transitions). -- **Power & Battery:** Charger plugged in / unplugged, battery drops below or rises above custom threshold percentage. -- **Display & State:** Screen turned on / off, device unlocked. -- **Time & Scheduling:** Daily, weekdays, weekends, or specific custom days and times. -- **Connectivity & Radios:** Wi-Fi connected or disconnected (any or specific SSID), Bluetooth device connected or disconnected (bonded devices). -- **Sensors & Motion:** - - **Device Flip:** Phone placed face down on a surface or turned face up (dual physical validation: Proximity sensor + Gravity/Accelerometer Z-axis with 500ms debounce). - - **Shake:** Firm shake detection with configurable sensitivity. - - **Ambient Light:** Darker than or brighter than lux target with real-time sensor sampling. -- **Location & Geofencing:** Enter or exit designated geographical areas (`GEOFENCE_ENTER`, `GEOFENCE_EXIT`) backed by Google Play Services `GeofencingClient` hardware geofencing. Event-driven battery behavior with zero CPU wake-locks while idle. Persistent DataStore event queueing (up to 50 events) ensures boundary transitions are never lost across engine or process restarts. Requires precise (`ACCESS_FINE_LOCATION`) and background (`ACCESS_BACKGROUND_LOCATION`) location permissions. Home screen displays live registration diagnostics and status (`REGISTERED`, `UNREGISTERED`, `TRANSITION_ENTER`, `TRANSITION_EXIT`, or error). Inbound transition coordinates are directly reused for location template variables (`${location.lat}`, `${location.lng}`, etc.), avoiding unnecessary fresh GPS lookups for notification-only or template-driven geofence actions. -- **Hardware & Tags:** NFC tag scanned (hex UID matching). -- **Communications:** - - **Incoming/Outgoing Calls:** Ringing, answered, outgoing placed, and call ended states. - - **SMS Messages:** Filtered by sender number and matching modes (contains keyword, exact match, prefix, or regex). -- **Notifications:** Notifications received from selected installed apps with optional keyword filter. +FlowPilot listens to a rich spectrum of hardware, radio, and system events: + +- 📱 **App Lifecycle:** App launched or closed (lightweight `UsageStatsManager` transitions). +- 🔌 **Power & Battery:** Charger plugged in / unplugged, battery level rises above or drops below custom percentage. +- 💡 **Screen & State:** Screen turned on/off, device unlocked. +- ⏰ **Schedule & Time:** Daily, weekdays, weekends, or specific days and exact times. +- 📶 **Connectivity:** Wi-Fi connected/disconnected (any or target SSID), Bluetooth device connected/disconnected. +- 🔄 **Sensors & Motion:** + - **Device Flip:** Face-down on table or turned face-up (Proximity + Gravity Z-axis with 500ms debounce). + - **Shake:** Firm shake detection with configurable sensitivity slider. + - **Ambient Light:** Lux drops below or rises above target threshold. +- 📍 **Hardware Geofencing:** Enter or exit defined geographical zones using Google Play Services `GeofencingClient`. Zero idle battery drain, up to 50 persistent queued events across engine restarts, and coordinate reuse for template variables. +- 🏷️ **NFC Tags:** Instant hex UID matching on physical tag scan. +- 📞 **Phone & SMS:** Call ringing, answered, outgoing dialed, call ended; SMS received with keyword, prefix, regex, or exact sender matching. +- 🔔 **Notifications:** Incoming notifications from selected apps with keyword filtering. --- ### 2. Conditions (Logic Gates) -Rules execute only when all specified conditions (AND semantics) are satisfied: -- **Time Window (`TIME_BETWEEN`):** e.g., only run between 23:00 and 07:00, with full overnight midnight-crossing support. -- **Days of the Week (`DAYS_OF_WEEK`):** Filter by weekdays, weekends, or custom day toggles. -- **Battery Level:** Only if battery is $\ge$ or $\le$ threshold. -- **Charger State:** Only while charging or discharging. -- **Screen State:** Only while screen is on or screen is off. -- **Wi-Fi State:** Only while connected to a specific Wi-Fi SSID. +Rules execute only when all specified conditions (AND logic) are satisfied: + +- ⏳ **Time Window:** Run only between specific hours (e.g., 23:00 to 07:00), with full midnight-crossing support. +- 📅 **Days of the Week:** Restrict to weekdays, weekends, or custom individual days. +- 🔋 **Battery Level:** Require battery to be $\ge$ or $\le$ a specific threshold. +- ⚡ **Charging State:** Require device to be currently charging or discharging. +- 📲 **Screen State:** Require screen to be on or off. +- 📶 **Wi-Fi Network:** Require connection to a specific Wi-Fi network (SSID). --- ### 3. Actions (Executors) -Chain multiple sequential actions within a single rule, complete with custom drag-and-drop reordering and individual delay timers (0–300s): -- **Connectivity (via Shizuku):** Toggle Wi-Fi, Mobile Data, Airplane Mode, Bluetooth, and Location. -- **Display & Tools:** Toggle Flashlight (Torch), Dark Theme (Shizuku), Auto-rotate, Screen Brightness, Lock Screen (Shizuku), and Force Stop App (Shizuku). -- **Sound & Alerts:** Do Not Disturb (DND) ON/OFF, Sound Profiles (Normal / Vibrate / Silent), Set Media Volume (0–100%), Play Tone/Custom Audio (1–60s duration), Vibrate (Pulse, Double Tap, Alert, Heartbeat, Triple Tap, SOS), and Show Notification. -- **Speech Synthesis (TTS):** Speak custom voice message using Android offline TTS engine with rate control and on-device cache. -- **Clock & Alarms:** Create system alarm, start background timer (1s–24h with `EXTRA_SKIP_UI`). -- **Apps & Web:** Launch installed application, open website URL. -- **Phone & SMS:** Open dialer, dial phone number, directly place phone call, send direct automated background SMS, prepare SMS draft. -- **HTTPS Webhook:** Send outbound HTTPS requests (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`) with headers, body, AES-256-GCM Keystore encrypted secrets, and live template variables (`${trigger}`, `${batteryPercent}`, `${isCharging}`, `${wifiSsid}`, `${time}`, `${timestamp}`, `${location.lat}`, `${location.lng}`, `${location.coords}`, `${location.maps_url}`). +Chain multiple actions in any custom sequence with drag-and-drop ordering and individual delays (0–300s): + +- 🌐 **Connectivity (via Shizuku):** Toggle Wi-Fi, Mobile Data, Airplane Mode, Bluetooth, and GPS Location. +- 🖥️ **Display & Device:** Toggle Flashlight (Torch), Dark Theme (Shizuku), Auto-rotate, Brightness level, Lock Screen (Shizuku), and Force Stop App (Shizuku). +- 🔊 **Sound & Alerts:** Do Not Disturb (DND) toggle, Sound Profiles (Normal / Vibrate / Silent), Media Volume (0–100%), Custom Audio playback (1–60s duration), Haptic Patterns (Pulse, Double Tap, Alert, Heartbeat, Triple Tap, SOS), and Rich Notifications. +- 🗣️ **Offline Speech (TTS):** Speak custom voice alerts using Android's on-device TTS engine with speech rate control. +- ⏱️ **Clock & Timers:** Set system alarm or start a background timer (1s–24h). +- 🚀 **Apps & Web:** Launch installed app or open web URL. +- 💬 **Phone & SMS:** Open dialer, place direct phone call, send automated background SMS, or prepare SMS draft. +- 🔗 **HTTPS Webhook:** Send outbound HTTP requests (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`) with custom headers, JSON body, AES-256-GCM Keystore encrypted secrets, and dynamic template variables: + - `${trigger}`, `${batteryPercent}`, `${isCharging}`, `${wifiSsid}`, `${time}`, `${timestamp}`, `${location.lat}`, `${location.lng}`, `${location.coords}`, `${location.maps_url}` --- -### 4. Ready-to-Use Presets (Recipes) -FlowPilot includes pre-built one-tap templates to get started quickly: -- 🌙 **Bedtime Routine:** At 23:30, enables Dark Mode, sets sound profile to Silent, turns on DND, and dims brightness to 10%. -- 🔋 **Full Battery Protection (100%):** Announces unplug reminder via offline TTS and shows notification when battery finishes charging. -- ⚡ **Battery Saver Emergency:** At 15% battery, turns on Battery Saver, disables Bluetooth, sets brightness to 15%, and enables Dark Mode. -- 🔕 **Flip to Silence:** Turning phone face down activates Do Not Disturb with a confirmation pulse. -- 🔦 **Shake for Flashlight:** Firm shake toggles the camera torch with haptic feedback. -- 🎬 **Cinema / Night Reading:** Low ambient light (<5 lx) dims brightness and enables dark theme. -- 🚗 **Leaving Home Mode:** Disconnecting from home Wi-Fi activates mobile data, sets normal ringer, and raises media volume to 80%. -- 🏠 **Welcome Home Mode:** Connecting to home Wi-Fi disables mobile data and restores balanced settings. -- 📍 **SMS Emergency Location Responder:** When incoming SMS matches secret keyword, acquires active GPS coordinates and replies with live Google Maps link. +### 4. Smart Productivity & Controls +- **Quick Settings Tile:** Toggle the automation engine or inspect live status directly from Android's notification shade. +- **Material 3 Home Screen Widget:** Glance-powered widget displaying active rule counts with a one-tap pause/resume button. +- **In-App Live Test Run:** Test any rule action directly inside the editor before saving to verify parameters. +- **Safe Rule Duplication:** Clone any rule into an immediately editable disabled copy with freshly encrypted webhook credentials. +- **Execution Run History:** Local persistent audit trail of the last 100 executions with masked sensitive details. +- **Conflict Warnings:** Automatic non-blocking analysis warning you when opposite state actions target the same trigger. --- -### 5. Quick Controls & Widgets -- **Quick Settings Tile:** Toggle the automation engine or view live status directly from Android notification shade. -- **Home Screen Widget (Jetpack Glance):** Modern widget displaying active rule counts with one-tap pause/resume button. -- **In-App Manual Test Run:** Test rule actions directly while editing with real parameters without needing to save first. -- **Safe Rule Duplication:** Duplicate any rule from its list menu into an immediately editable, disabled copy. Configuration is preserved, runtime state is reset, and webhook secrets receive fresh Android Keystore ciphertext. -- **Execution Run History:** Local persistent audit log of the last 100 executions with per-action outcomes rendered in the selected app language; credentials and phone numbers remain redacted/masked. -- **Conflict warnings:** Before save or enable, exact matching trigger targets with opposing state actions are explained as likely or possible conflicts. Warning is non-blocking, links to conflicting rules, and requires a deliberate override. Analyzer does not claim full proof for arbitrary condition/time-window overlap. +## 🛡️ Shizuku Setup Guide + +FlowPilot uses **Shizuku** to perform elevated actions (Mobile Data, Airplane Mode, GPS, Dark Mode, App Killing) safely without needing root. + +1. **Install Shizuku:** Get it from [Google Play](https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api) or [GitHub](https://shizuku.rikka.app/). +2. **Start Shizuku Service:** + - **On Android 11+ (Wireless Debugging):** Start directly on your phone using Developer Options > Wireless Debugging (no PC required). + - **Via PC (ADB):** Run the following command: + ```bash + adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh + ``` +3. **Authorize FlowPilot:** Open FlowPilot and tap **Grant** when prompted for Shizuku access. +4. All elevated actions will now be unlocked and execute instantly! --- -## 🛠️ Architecture & Tech Stack +## 🔒 Privacy & Zero-Trust Promise + +FlowPilot is engineered with an uncompromised commitment to user privacy: + +- 🚫 **Zero Telemetry:** No Firebase Analytics, no Sentry, no remote crash reporters, and zero tracking SDKs. +- 📵 **No Cloud Synchronization:** Your automations, logs, and secrets never touch any third-party cloud. +- 🛡️ **Hardware Keystore Protection:** Webhook secrets, tokens, and sensitive headers are encrypted with AES-256-GCM using hardware-backed Android Keystore keys. +- 🙈 **Strict Log Sanitization:** Phone numbers, webhook credentials, and sensitive headers are masked across all UI screens and audit logs. + +### Transparent Permission Disclosures +FlowPilot declares sensitive permissions solely to power explicit automation features: +- `QUERY_ALL_PACKAGES`: Required to list installed apps in the App Trigger and App Launcher pickers on Android 11+. +- `RECEIVE_SMS` & `SEND_SMS`: Used exclusively by the SMS trigger and direct SMS responder actions. +- `ACCESS_BACKGROUND_LOCATION`: Powers zero-battery hardware geofencing (`GeofencingClient`) and injects coordinates only into user-configured automations. +- `FOREGROUND_SERVICE_LOCATION`: Required by Android 14+ to keep geofencing and active location tasks compliant while running in the background. + +*Note: FlowPilot does not seek Google Play approval because these uncompromised permissions are essential for core automation functionality. Download verified APKs directly from GitHub Releases.* + +--- + +## 📦 Backup & Recovery + +| Mode | Format | Security | Ideal For | +| :--- | :--- | :--- | :--- | +| **Sanitized JSON** | Plain JSON | Webhook URLs & credentials stripped | Sharing automation rules with friends or online communities | +| **Encrypted Backup** | Encrypted Container | **AES-256-GCM + PBKDF2** (100k iterations, salt + IV) | Full backup including secrets, phone numbers, and enabled states | + +Restoring is effortless: choose your file, enter your password, and select **Merge** or **Replace**. Secrets are automatically re-encrypted with your new device's local Android Keystore. + +--- + +## 🛠️ Tech Stack & Architecture + +FlowPilot follows modern Android architecture guidelines: ``` FlowPilot ├── app/src/main/java/com/flowpilot/app/ -│ ├── actions/ # Action executors (Shizuku, TTS, Webhook, Audio, System, Phone) -│ ├── data/ # Models, JSON Serialization, DataStore Repository, Backup/Restore -│ ├── engine/ # Foreground AutomationService, BroadcastReceivers, Sensor Trackers -│ ├── glance/ # Jetpack Glance Home Screen Widget implementation +│ ├── actions/ # Executors: Shizuku, Audio, TTS, Webhook, SMS, System +│ ├── analysis/ # AutomationConflictAnalyzer and logic checks +│ ├── data/ # Models, JSON Serialization, DataStore Repositories, Backups +│ ├── engine/ # Foreground AutomationService, Receivers, Sensor Trackers +│ ├── glance/ # Jetpack Glance Home Screen Widget │ ├── quicksettings/ # System Quick Settings Tile Service │ ├── shizuku/ # Shizuku AIDL IPC client bridge -│ └── ui/ # Jetpack Compose UI (Theme, Screens, Components, Pickers) +│ └── ui/ # Jetpack Compose UI (Material 3 Theme, Screens, Components) └── app/src/test/ # Deterministic JUnit unit test suites ``` - **Language:** Kotlin 2.2.10 -- **UI Framework:** Jetpack Compose & Material 3 -- **Concurrency:** Kotlin Coroutines & StateFlow -- **Persistence:** Android Jetpack DataStore (Preferences & JSON serialization) -- **Security:** Android Keystore (AES-256-GCM encrypted webhook credentials at rest) -- **System Control:** Shizuku AIDL IPC Bridge -- **Widgets:** Android Jetpack Glance (Compose-style App Widgets) -- **Compatibility:** Min SDK 26 (Android 8.0 Oreo) — Target / Compile SDK 36 (Android 16) +- **UI Toolkit:** Jetpack Compose & Material 3 +- **Async Runtime:** Kotlin Coroutines & StateFlow +- **Storage:** Jetpack DataStore (Preferences & JSON) +- **Encryption:** Android Keystore (AES-256-GCM) +- **Privileged Bridge:** Shizuku AIDL IPC +- **Widgets:** Jetpack Glance +- **Target SDK:** Android 16 (API 36) • **Min SDK:** Android 8.0 (API 26) --- -## 📥 Build & Installation +## 📥 Build from Source ### Prerequisites -- JDK 17 (Eclipse Temurin or OpenJDK) -- Android SDK with Platform 36 and Build-Tools 36.0.0+ +- JDK 17 (OpenJDK or Eclipse Temurin) +- Android SDK (Platform 36, Build-Tools 36.0.0+) - Git -### Build from Source ```bash # Clone the repository git clone https://github.com/emi-ran/flowpilot.git @@ -178,72 +304,32 @@ cd flowpilot ./gradlew assembleDebug ``` -The compiled APK will be located at: +Compiled APK output: ```text app/build/outputs/apk/debug/app-debug.apk ``` -### Backup & Restore - -- **Normal JSON export/share:** Portable sanitized rule data. Webhook URL, headers, and body are omitted; normal imports disable imported rules before Merge or Replace. -- **Encrypted full backup:** Choose **Encrypted full backup** in Settings, or when sharing one rule. A password of at least six characters encrypts all rule data, including webhook configuration, phone/SMS fields, and enabled state. -- **Portable format:** AES-256-GCM authenticated encryption with PBKDF2-HMAC-SHA256 key derivation (100,000 iterations), random salt, and random IV. A wrong password or modified backup is rejected before rules are changed. -- **Restore:** Select an encrypted backup, enter its password, then choose Merge or Replace. Secrets are re-encrypted with the receiving device's Android Keystore after import. -- **Scope:** Execution history, temporary geofence diagnostics/queue state, engine state, Android permissions, Shizuku state, and TTS audio cache are not included. - -### Install to Device via ADB +Install directly to your connected device: ```bash adb install -r app/build/outputs/apk/debug/app-debug.apk ``` --- -## 🛡️ Shizuku Integration Guide - -Certain privileged actions (toggling Mobile Data, Airplane Mode, GPS, Dark Mode, or Force Stopping apps) require **Shizuku** to run elevated commands without root access. - -1. Install [Shizuku](https://shizuku.rikka.app/) from Google Play or GitHub. -2. Start Shizuku via **Wireless Debugging** (Android 11+) or via ADB from a computer: - ```bash - adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh - ``` -3. Open **FlowPilot** -> When prompted, grant Shizuku permission to FlowPilot. -4. All Shizuku-gated actions will now show as **Available** and execute seamlessly. - ---- - -## 🔒 Privacy & Permissions Notice - -FlowPilot operates on a **zero-trust privacy model**: -- **No Telemetry or Cloud Sync:** The app contains no crash reporters, analytics endpoints, remote ad SDKs, or cloud synchronization. -- **Configured Data Sharing:** User-configured Webhooks, SMS actions, and exports can send only data you choose. -- **Location:** Used strictly locally to read current Wi-Fi SSID, register hardware geofence boundaries via Google Play Services `GeofencingClient`, and optionally inject coordinates into user-defined Webhooks or SMS replies. -- **Phone & SMS:** Used only to trigger automations on call states or user-specified SMS text patterns. Phone numbers are masked in all logs and history. - -### Distribution and restricted permissions - -FlowPilot declares `QUERY_ALL_PACKAGES` because its user-facing App Picker calls `PackageManager.getInstalledApplications()` and filters launchable packages for app triggers and app-targeted actions. Removing it breaks this core picker on Android versions that limit package visibility. `RECEIVE_SMS` is used by `SmsReceiver` for incoming SMS triggers; `SEND_SMS` is used by `SmsExecutor` for user-configured direct SMS actions. `ACCESS_BACKGROUND_LOCATION` is used by Google Play Services hardware geofencing (`GeofencingClient`) for zero-battery background boundary detection and by `LocationFetcher` when active rules need coordinates while the activity is not visible; `FOREGROUND_SERVICE_LOCATION` authorizes the location foreground-service subtype. Location is not collected continuously via polling when no rule needs it. - -These permissions are restricted or policy-sensitive on Google Play. This repository does **not** claim Play compliance or guaranteed approval. No Play-specific permission-reduced flavor exists: removing these declarations would disable core features. Any Play release requires current policy review, required declarations, accurate Data safety disclosures, and Google approval. Until then, distribute builds through GitHub releases, F-Droid, or sideloading. Users should install only builds from sources they trust. - ---- - ## 🤝 Contributing -Contributions, bug reports, and suggestions are welcome! -- Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. -- Found a bug? Open an issue using the [Bug Report](https://github.com/emi-ran/flowpilot/issues/new?template=bug_report.md) template. -- Have a feature idea? Share it via [Feature Request](https://github.com/emi-ran/flowpilot/issues/new?template=feature_request.md). +Contributions, bug reports, and ideas are welcome! +- Check out [CONTRIBUTING.md](CONTRIBUTING.md) to get started. +- Found a bug? Open a [Bug Report](https://github.com/emi-ran/flowpilot/issues/new?template=bug_report.md). +- Want to propose a new trigger or action? Submit a [Feature Request](https://github.com/emi-ran/flowpilot/issues/new?template=feature_request.md). --- ## 📄 License -FlowPilot is free and open-source software licensed under the **GNU General Public License v3.0 (GPL-3.0)**. -See the [LICENSE](LICENSE) file for complete details. - ---- +FlowPilot is free and open-source software licensed under the **[GNU General Public License v3.0 (GPL-3.0)](LICENSE)**.
-Made with ❤️ for Android Power Users +
+ Made with ❤️ for Android Power Users
diff --git a/README.tr.md b/README.tr.md index 80be4fc..825278b 100644 --- a/README.tr.md +++ b/README.tr.md @@ -2,168 +2,296 @@ # ⚡ FlowPilot -**Gizlilik odaklı, çevrimdışı ve hafif Android otomasyon motoru.** +### Gizlilik odaklı, pil dostu ve hafif Android otomasyon motoru — rootsuz. +Olay odaklı tetikleyiciler, Shizuku ile ayrıcalıklı sistem yetkileri ve akıcı Material 3 arayüzüyle cihazınızı zahmetsizce otomatikleştirin. Telemetri yok, bulut hesabı zorunluluğu yok ve arka planda gereksiz pil tüketimi yok. + +
+ +[![GitHub Sürümü](https://img.shields.io/github/v/release/emi-ran/flowpilot?color=4285F4&label=S%C3%BCr%C3%BCm&logo=github)](https://github.com/emi-ran/flowpilot/releases) +[![Android Uyumluluğu](https://img.shields.io/badge/Android-8.0%2B%20(API%2026--36)-34A853?logo=android&logoColor=white)](https://developer.android.com) +[![Kotlin](https://img.shields.io/badge/Kotlin-2.2.10-7F52FF?logo=kotlin&logoColor=white)](https://kotlinlang.org) +[![Jetpack Compose](https://img.shields.io/badge/Aray%C3%BCz-Jetpack%20Compose-4285F4?logo=jetpackcompose&logoColor=white)](https://developer.android.com/jetpack/compose) +[![Shizuku Desteği](https://img.shields.io/badge/Shizuku-Destekli-FB8C00)](https://shizuku.rikka.app) +[![Gizlilik](https://img.shields.io/badge/Telemetri-S%C4%B1f%C4%B1r%20%2F%20%25100%20%C3%87evrimd%C4%B1%C5%9F%C4%B1-00C853)](#-gizlilik-ve-s%C4%B1f%C4%B1r-g%C3%BCven-ilkesi) [![Lisans: GPL-3.0](https://img.shields.io/badge/Lisans-GPL--3.0-blue.svg)](LICENSE) -[![Android Min SDK](https://img.shields.io/badge/Android-8.0%2B%20(API%2026--36)-brightgreen.svg)](https://developer.android.com) -[![Kotlin](https://img.shields.io/badge/Kotlin-2.2.10-purple.svg)](https://kotlinlang.org) -[![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-4285F4.svg)](https://developer.android.com/jetpack/compose) -[![Shizuku](https://img.shields.io/badge/Shizuku-Destekli-orange.svg)](https://shizuku.rikka.app) -[![Test Edilen Cihaz](https://img.shields.io/badge/Geliştirilen%20%26%20Test%20Edilen-Xiaomi%20HyperOS-FF6900.svg)](https://mi.com) -[![Derleme Durumu](https://img.shields.io/badge/Derleme-Başarılı-brightgreen.svg)](#kaynak-koddan-derleme)
-[🇹🇷 Türkçe](README.tr.md)  •  [🇺🇸 English](README.md) +[**🇹🇷 Türkçe**](README.tr.md)  •  [**🇺🇸 English**](README.md) + +
+ +

+ + APK İndir + +   + + Nasıl Çalışır + +   + + Reçeteler + +   + + Shizuku Rehberi + +

--- > [!NOTE] -> **📱 Cihaz Uyumluluğu & Topluluk Testi Bilgilendirmesi:** -> FlowPilot bağımsız bir geliştirici tarafından geliştirilmekte olup, geliştiricinin şahsi cihazı olduğu için şu an **öncelikli olarak Xiaomi HyperOS (Xiaomi 15T Pro)** üzerinde geliştirilmiş ve bizzat test edilmiştir. Proje genelinde standart Android API'lerine ve en iyi pratiklere sadık kalınmıştır; ancak diğer üretici arayüzlerinde (Google Pixel, Samsung One UI, OxygenOS, Motorola vb.) henüz test imkanı olmamıştır. Farklı cihazlardaki test raporlarınız, hata bildirimleriniz ve geliştirmeleriniz (Pull Request) memnuniyetle karşılanır! - -## 🌟 Neden FlowPilot? +> **📱 Cihaz Uyumluluğu & Topluluk Testi Bilgilendirmesi** +> FlowPilot bağımsız bir açık kaynak projesidir ve bizzat geliştiricinin kişisel cihazı olan **Xiaomi HyperOS (Xiaomi 15T Pro)** üzerinde günlük olarak geliştirilip test edilmektedir. Proje genelinde standart Android Jetpack ve sistem API'lerine titizlikle uyulmuş, CI doğrulamasında ise **API 35 Android Emulator** ile çalışma zamanı sözleşmeleri denetlenmektedir. +> +> Farklı üretici arayüzleri (Samsung One UI, Google Pixel, Motorola, OxygenOS vb.) arka plan kısıtlamalarını farklı uygulayabildiğinden, test geri bildirimleriniz, cihaz deneyimleriniz ve katkılarınız (Pull Request) memnuniyetle karşılanır! -Android ekosistemindeki popüler otomasyon araçlarının büyük kısmı zorunlu bulut hesapları, agresif telemetri/izleyiciler, pili tüketen sürekli yoklama (polling) servisleri ve karmaşık arayüzlerle doludur. +--- -**FlowPilot** bu durumu kökten değiştirir: +## 🌟 Neden FlowPilot? -- 🔒 **Varsayılan Olarak Gizli:** Telemetri veya bulut eşitlemesi yoktur. Yapılandırılmış Webhook, SMS ve dışa aktarma işlemleri yalnızca seçtiğiniz verileri gönderebilir. -- ⚡ **Pil Dostu & Olay Odaklı:** İşlemciyi sürekli uyanık tutan gereksiz döngüler yoktur. Sensörler (ivmeölçer, yakınlık, ortam ışığı) ve yayın alıcıları yalnızca aktif bir kural ihtiyaç duyduğunda dinamik olarak devreye girer. -- 🛡️ **Shizuku Entegrasyonu:** Mobil Veri, Uçak Modu, GPS ve Koyu Tema gibi sistem düzeyindeki ayarları root erişimine gerek kalmadan güvenli ADB yetkileriyle kontrol edin. -- 🎨 **Modern Material 3 Tasarımı:** Dinamik Aydınlık ve Koyu tema, akıcı animasyonlar ve yüksek erişilebilirlik standartlarına sahip saf Jetpack Compose mimarisi. -- 🔊 **Çevrimdışı Metin Okuma (TTS):** İnternet bağlantısı gerektirmeyen, cihaz üzerinde önbelleklenen yüksek kaliteli sesli duyuru altyapısı. -- 🔄 **Açık Ekosistem:** Otomasyon kurallarını güvenli JSON olarak dışa aktarın/paylaşın veya parola şifreli tam yedeklerle Birleştirme / Üzerine Yazma seçeneklerini kullanın. +Geleneksel Android otomasyon uygulamaları genelde karmaşık arayüzler, sürekli arka plan döngüleriyle pili bitiren servisler veya zorunlu bulut üyelikleriyle gelir. **FlowPilot bu anlayışı değiştirmek için geliştirildi.** + + + + + + + + + + + + + + +
+

🔋 Pil Dostu & Olay Odaklı

+

İşlemciyi uyanık tutan (wake-lock) gereksiz döngüler yoktur. Donanım sensörleri (ivmeölçer, yakınlık, ışık) ve yayın alıcıları yalnızca aktif bir kural ihtiyaç duyduğunda devreye girer, işi bitince anında kapanır.

+
+

🔒 %100 Çevrimdışı & Gizli

+

Analitik, telemetri, uzaktaki sunucular veya hesap kayıtları yoktur. Her şey yalnızca cihazınızda gerçekleşir. Yapılandırılmış Webhook ve SMS eylemleri sadece sizin seçtiğiniz verileri iletir.

+
+

🛡️ Root Gerektirmeyen Süper Güçler

+

Shizuku desteği sayesinde Mobil Veri, Uçak Modu, GPS, Koyu Tema ve Uygulama Durdurma gibi yetkili işlemleri cihazınızı rootlamadan, güvenli ADB izinleriyle yönetin.

+
+

🎨 Modern Material 3 & Compose

+

Tamamen yerel Jetpack Compose ile inşa edilmiştir. Akıcı animasyonlar, dinamik Material You renk temaları, dokunsal titreşim geri bildirimleri ve şık Glance ana ekran widget'ı sunar.

+
+

🔊 Çevrimdışı Metin Okuma (TTS)

+

Cihaz içi ses sentezleme motoru sayesinde internete ihtiyaç duymadan telefonunuzun sizinle konuşmasını sağlayın. Şarj uyarısı veya gece rutini için özel sesli anonslar oluşturun.

+
+

🔐 Güvenli Paylaşım & Şifreli Yedek

+

Kurallarınızı temizlenmiş JSON olarak paylaşın veya tüm otomasyon arşivinizi AES-256-GCM parola korumalı (100.000 iterasyon PBKDF2) güvenli yedeklerle koruma altına alın.

+
--- -## 📸 Uygulama İçi Ekran Görüntüleri +## 📸 Ekran Görüntüleri
- - - - + + + + + - - + + +
Ana EkranHazır ŞablonlarKural OluşturmaAyarlar & HakkındaAna EkranHazır ŞablonlarKural OluşturucuAyarlar & YedekHakkında
Ana Ekran Hazır ŞablonlarKural OluşturmaHakkında DiyaloğuKural OluşturucuAyarlar ve YedekHakkında Penceresi
--- -## 🚀 Öne Çıkan Özellikler +## 💡 Nasıl Çalışır? + +FlowPilot son derece sezgisel, 3 adımlı bir zihinsel model izler: + +``` +┌───────────────────────────┐ ┌───────────────────────────┐ ┌───────────────────────────┐ +│ 1. TETİKLEYİCİ │ │ 2. KOŞULLAR │ │ 3. EYLEMLER │ +│ "Şu olduğunda" │ ───► │ "Yalnızca hepsi uyuyorsa"│ ───► │ "Sırayla şunları yap" │ +│ (Örn: İşe vardığımda) │ │ (Örn: Yalnızca Hafta İçi)│ │(Sessize al + Wi-Fi'ı aç) │ +└───────────────────────────┘ └───────────────────────────┘ └───────────────────────────┘ +``` + +### Günlük Hayattan Senaryolar: +- 🌙 **Gece Rutini:** Saat 23:30 olduğunda ➔ *Eğer cihaz şarjdaysa* ➔ Sessiz profile geç, Rahatsız Etmeyin'i aç ve parlaklığı %10'a düşür. +- 🔋 **Tam Şarj Uyarısı:** Pil %100 dolduğunda ➔ *Çevrimdışı sesle* "Pil tamamen doldu, lütfen şarjdan çıkarın" anonsu yap ve bildirim göster. +- 🔕 **Ters Çevir ve Sustur:** Telefon masaya yüzüstü konulduğunda ➔ *Hafif bir titreşim onayıyla* Rahatsız Etmeyin modunu aktif et. + +--- + +## ⚡ 1 Tıkla Hazır Reçeteler + +Günlük yaşamınızı anında kolaylaştıracak yerleşik şablonlarla hemen başlayın: + +| Reçete | Tetikleyici | Başlıca Eylemler | +| :--- | :--- | :--- | +| 🌙 **Gece Rutini** | Saat 23:30 olduğunda | Koyu Temayı açar, Sessiz profile geçer, DND modunu açar, parlaklığı %10 yapar | +| 🔋 **Tam Pil Koruması** | Pil %100'e ulaştığında | Çevrimdışı sesli şarjdan çıkarma uyarısı seslendirir ve bildirim gönderir | +| ⚡ **Acil Pil Tasarrufu** | Pil %15 altına düştüğünde | Pil Tasarrufunu açar, Bluetooth'u kapatır, parlaklığı %15 yapar, Koyu Temaya geçer | +| 🔕 **Ters Çevir ve Sustur** | Telefon yüzüstü konulduğunda | Çift sensör doğrulamasıyla (Yakınlık + Yerçekimi Z-ekseni) DND modunu titreşimle açar | +| 🔦 **Sallayarak Fener Aç** | Cihaz sağlam sallandığında | Kamera flaşını dokunsal geri bildirimle açar veya kapatır | +| 🎬 **Sinema / Gece Okuma** | Ortam ışığı < 5 lüks olduğunda | Parlaklığı minimuma indirir ve sistemi Koyu Temaya geçirir | +| 🚗 **Evden Çıkış Modu** | Ev Wi-Fi bağlantısı koptuğunda | Mobil Veriyi açar (Shizuku), Normal zil sesine geçer, medya sesini %80 yapar | +| 🏠 **Eve Giriş Modu** | Ev Wi-Fi ağına bağlanıldığında | Pil tasarrufu için Mobil Veriyi kapatır (Shizuku) ve dengeli ses ayarlarını geri yükler | +| 📍 **SMS Acil Konum Yanıtlayıcı**| Gizli kelimeli SMS geldiğinde | GPS koordinatlarını alıp harita bağlantısını SMS ile otomatik yanıtlar | + +--- + +## 🎛️ Kabiliyetler Matrisi ### 1. Tetikleyiciler (Olaylar) -FlowPilot, donanım, sistem ve kullanıcı kaynaklı geniş bir olay yelpazesini dinler: -- **Uygulama:** Seçili uygulamanın açılması veya kapanması (`UsageStatsManager` olay geçişleri). -- **Güç & Pil:** Şarj cihazına takılma / çıkarılma, pil yüzdesinin belirlenen eşiğin altına düşmesi veya üstüne çıkması. -- **Ekran & Kilit:** Ekranın açılması / kapanması, kilit ekranının açılması. -- **Zaman & Takvim:** Günlük, hafta içi, hafta sonu veya seçili gün/saatlerde zamanlanmış tetikleme. -- **Bağlantı & Radyo:** Belirli bir Wi-Fi ağına bağlanma veya ayrılma (SSID bazlı), eşleşmiş Bluetooth cihazına bağlanma veya ayrılma. -- **Sensörler & Hareket:** - - **Cihazı Çevirme (Flip):** Telefonun yüzüstü masaya konması veya tekrar kaldırılması (Yakınlık sensörü + Yerçekimi/İvmeölçer Z-ekseni ve 500ms kararlılık filtreleme doğrulaması). - - **Sallama (Shake):** Hassasiyet ayarlı telefon sallama algılaması. - - **Ortam Işığı:** Gerçek zamanlı ışık sensörü ölçümüyle belirlenen lüks (lx) değerinin altına düşmesi veya üstüne çıkması. -- **Konum & Coğrafi Çit (Geofence):** Belirlenen coğrafi alana giriş veya alandan çıkış (`GEOFENCE_ENTER`, `GEOFENCE_EXIT`). Google Play Services `GeofencingClient` donanım geofence altyapısı ile boşta sıfır pil tüketimi ve olay odaklı mimari. DataStore kalıcı olay kuyruğu (50 olaya kadar) sayesinde servis yeniden başlatılsa dahi sınır geçişleri kaybolmaz. Hassas (`ACCESS_FINE_LOCATION`) ve arka plan (`ACCESS_BACKGROUND_LOCATION`) konum izinleri ile sistem konum servisi doğrulaması. Ana ekranda canlı kayıt tanılamaları ve durum gösterimi (`REGISTERED`, `UNREGISTERED`, `TRANSITION_ENTER`, `TRANSITION_EXIT`, hata). Gelen geçiş koordinatları doğrudan konum şablon değişkenlerinde (`${location.lat}`, `${location.lng}`) yeniden kullanılır; yalnızca bildirim içeren geofence kuralları için fazladan GPS sorgusu yapılmaz. -- **Donanım & Etiketler:** NFC etiketi okutulması (hex UID eşleme). -- **İletişim:** - - **Aramalar:** Gelen arama çalıyor, arama yanıtlandı, giden arama başlatıldı ve arama bitti durumları. - - **SMS Mesajları:** Gönderen numaraya ve mesaj içeriğine göre filtreleme (kelime içeriyor, tam eşleşme, ile başlıyor veya Regex). -- **Bildirimler:** Seçili uygulamalardan gelen bildirimler ve isteğe bağlı anahtar kelime filtreleme. +FlowPilot zengin bir donanım, radyo ve sistem olayı yelpazesini dinler: + +- 📱 **Uygulama Döngüsü:** Seçilen uygulamanın açılması veya kapanması (düşük maliyetli `UsageStatsManager` geçişleri). +- 🔌 **Güç & Pil:** Şarja takılma / çıkarılma, pil seviyesinin belirlenen yüzdenin üstüne çıkması veya altına inmesi. +- 💡 **Ekran & Durum:** Ekranın açılması / kapanması, kilit ekranının açılması. +- ⏰ **Zaman & Takvim:** Günlük, hafta içi, hafta sonu veya özel seçili gün ve saatlerde zamanlanmış tetikleme. +- 📶 **Bağlantılar:** Wi-Fi ağına bağlanma / ayrılma (tüm ağlar veya belirli SSID), Bluetooth cihazına bağlanma / ayrılma. +- 🔄 **Sensörler & Hareket:** + - **Cihazı Çevirme:** Yüzüstü masaya konma veya tekrar çevrilme (Yakınlık + Yerçekimi Z-ekseni, 500ms kararlılık filtresi). + - **Sallama:** Hassasiyet ayarlı telefon sallama algılaması. + - **Ortam Işığı:** Lüks değerinin belirlenen sınırın altına düşmesi veya üstüne çıkması. +- 📍 **Donanım Coğrafi Çit (Geofence):** Google Play Services `GeofencingClient` ile belirlenen alana giriş/çıkış. Boşta sıfır pil tüketimi, yeniden başlatmada kaybolmayan 50 olaylık kalıcı kuyruk ve şablon değişkenlerinde doğrudan koordinat kullanımı. +- 🏷️ **NFC Etiketleri:** Fiziksel etiket okutulduğunda anında hex UID eşleşmesi. +- 📞 **Arama & SMS:** Gelen arama çalıyor, yanıtlandı, giden arama başladı, arama bitti; SMS gönderen numaraya ve kelime, önek veya regex kalıbına göre tetikleme. +- 🔔 **Bildirimler:** Seçili uygulamalardan gelen bildirimler ve anahtar kelime filtreleme. --- ### 2. Koşullar (Mantıksal Filtreler) Kurallar yalnızca tüm koşullar aynı anda sağlandığında (VE mantığı) çalıştırılır: -- **Zaman Aralığı (`TIME_BETWEEN`):** Örn: Yalnızca 23:00 - 07:00 saatleri arasında çalış (gece yarısını geçen zaman aralıkları tam desteklenir). -- **Haftanın Günleri (`DAYS_OF_WEEK`):** Hafta içi, hafta sonu veya özel seçili günler. -- **Pil Seviyesi:** Pil seviyesinin belirlenen yüzdenin altında veya üstünde olması koşulu. -- **Şarj Durumu:** Yalnızca şarja takılıyken veya pilde çalışırken. -- **Ekran Durumu:** Yalnızca ekran açıkken veya kilitliyken. -- **Wi-Fi Durumu:** Yalnızca belirli bir Wi-Fi ağına bağlıyken. + +- ⏳ **Zaman Aralığı:** Yalnızca belirlenen saatler arasında çalış (örn: 23:00 - 07:00, gece yarısını geçen aralıklar tam desteklenir). +- 📅 **Haftanın Günleri:** Hafta içi, hafta sonu veya özel seçili günler. +- 🔋 **Pil Seviyesi:** Pilin belirli bir yüzdenin $\ge$ veya $\le$ olması. +- ⚡ **Şarj Durumu:** Cihazın şarjda veya pilde olması koşulu. +- 📲 **Ekran Durumu:** Ekranın açık veya kilitli olması koşulu. +- 📶 **Wi-Fi Ağı:** Yalnızca belirli bir Wi-Fi ağına (SSID) bağlıyken çalış. --- ### 3. Eylemler (İşlemler) -Tek bir kural içerisinde birden fazla eylemi sıralayabilir, sürükleyip bırakarak sırasını değiştirebilir ve her eylem öncesine 0–300 saniye gecikme ekleyebilirsiniz: -- **Bağlantı (Shizuku ile):** Wi-Fi, Mobil Veri, Uçak Modu, Bluetooth ve Konum (GPS) açma/kapatma. -- **Ekran & Araçlar:** El feneri açma/kapatma, Koyu Tema (Shizuku), Ekranı Otomatik Döndürme, Ekran Parlaklığı ayarlama, Ekranı Kilitleme (Shizuku), Uygulamayı Zorla Durdurma (Shizuku). -- **Ses & Uyarılar:** Rahatsız Etmeyin (DND) açma/kapatma, Ses Profilleri (Normal / Titreşim / Sessiz), Medya Sesini Ayarlama (%0–100), Ses Çalma (1–60 sn süre sınırlı sistem sesi veya özel MP3/WAV), Titreşim (Tek darbe, Çift dokunuş, Uyarı, Kalp atışı, Üçlü dokunuş, SOS), Bildirim Gösterme. -- **Metin Okuma (TTS):** Cihazın çevrimdışı motoruyla yazılan metni konuşarak seslendirme (konuşma hızı ayarı ve çevrimdışı ses filtreleme). -- **Saat & Sayaç:** Sistem alarmı kurma, arka planda sessiz sayaç/zamanlayıcı başlatma (1 sn – 24 saat). -- **Uygulama & Web:** Cihazdaki bir uygulamayı açma, web bağlantısı (URL) açma. -- **Telefon & SMS:** Arama ekranını açma, numara çevirme, doğrudan telefon araması başlatma, doğrudan arka planda SMS gönderme, SMS taslağı hazırlama. -- **HTTPS Webhook:** Dinamik şablon değişkenleriyle (`${trigger}`, `${batteryPercent}`, `${isCharging}`, `${wifiSsid}`, `${time}`, `${timestamp}`, `${location.lat}`, `${location.lng}`, `${location.maps_url}`) dış sunuculara HTTPS isteği gönderme (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`). Hassas başlık ve anahtarlar AES-256-GCM Keystore ile cihazda şifrelenir. +Tek bir kuralda birden çok eylemi sürükle-bırak yöntemiyle dilediğiniz sırada çalıştırın ve eylemler arasına gecikme (0–300 sn) ekleyin: + +- 🌐 **Bağlantı Kontrolü (Shizuku ile):** Wi-Fi, Mobil Veri, Uçak Modu, Bluetooth ve GPS Konum açma/kapatma. +- 🖥️ **Ekran & Sistem:** El Feneri açma/kapatma, Koyu Tema (Shizuku), Ekranı Otomatik Döndürme, Parlaklık seviyesi, Ekranı Kilitleme (Shizuku), Uygulamayı Zorla Durdurma (Shizuku). +- 🔊 **Ses & Uyarılar:** Rahatsız Etmeyin (DND) açma/kapatma, Ses Profilleri (Normal / Titreşim / Sessiz), Medya Sesi (%0–100), Özel Ses Çalma (1–60 sn), Titreşim Şablonları (Tek darbe, Çift dokunuş, Uyarı, Kalp atışı, Üçlü dokunuş, SOS) ve Bildirim Gösterme. +- 🗣️ **Çevrimdışı Seslendirme (TTS):** Cihazın yerleşik TTS motoruyla metinleri sesli olarak okuma (konuşma hızı ayarlı). +- ⏱️ **Saat & Sayaç:** Sistem alarmı kurma veya arka planda sessiz zamanlayıcı başlatma (1 sn – 24 saat). +- 🚀 **Uygulama & Web:** Cihazdaki bir uygulamayı açma veya web bağlantısına yönlendirme. +- 💬 **Telefon & SMS:** Arama ekranını açma, doğrudan telefon araması başlatma, doğrudan arka planda SMS gönderme veya SMS taslağı hazırlama. +- 🔗 **HTTPS Webhook:** Canlı şablon değişkenleriyle dış sunuculara güvenli HTTP istekleri (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `HEAD`) gönderme; başlıklar ve anahtarlar AES-256-GCM Keystore ile cihazda şifrelenir: + - `${trigger}`, `${batteryPercent}`, `${isCharging}`, `${wifiSsid}`, `${time}`, `${timestamp}`, `${location.lat}`, `${location.lng}`, `${location.coords}`, `${location.maps_url}` --- -### 4. Hazır Şablonlar (Reçeteler) -Tek tıkla kullanıma hazır popüler senaryolar: -- 🌙 **Gece Rutini:** 23:30'da Koyu Temayı açar, sessiz profile geçer, Rahatsız Etmeyin modunu açar ve parlaklığı %10'a düşürür. -- 🔋 **Tam Pil Koruması (%100):** Şarj tamamlandığında çevrimdışı sesli uyarı verir ve bildirim gösterir. -- ⚡ **Acil Pil Tasarrufu:** Pil %15'in altına indiğinde Pil Tasarrufunu açar, Bluetooth'u kapatır, parlaklığı %15 yapar ve koyu temaya geçer. -- 🔕 **Ters Çevir ve Sustur:** Telefon masaya yüzüstü konulduğunda hafif bir titreşimle Rahatsız Etmeyin moduna geçer. -- 🔦 **Sallayarak Fener Aç:** Telefon sağlam şekilde sallandığında kamera fenerini açar veya kapatır. -- 🎬 **Sinema / Gece Okuma Modu:** Ortam ışığı 5 lüksün altına indiğinde parlaklığı %5 yapar ve koyu temayı açar. -- 🚗 **Evden Çıkış Modu:** Ev Wi-Fi bağlantısı koptuğunda mobil veriyi açar, zil sesini normale alır ve sesi %80 yapar. -- 🏠 **Eve Giriş Modu:** Ev Wi-Fi ağına bağlanıldığında tasarruf için mobil veriyi kapatır ve dengeli ayarlara döner. -- 📍 **SMS Acil Konum Yanıtlayıcı:** Belirlenen gizli kelimeyle SMS geldiğinde GPS uydularına kilitlenir ve canlı Google Haritalar konumunu SMS ile otomatik yanıtlar. +### 4. Akıllı Verimlilik & Kolaylıklar +- **Hızlı Ayarlar Kutusu (Quick Settings Tile):** Otomasyon motorunu bildirim çubuğundan tek dokunuşla açıp kapatabilme veya canlı durumunu görme. +- **Material 3 Ana Ekran Widget'ı:** Aktif kural sayısını gösteren ve tek dokunuşla motoru duraklatıp sürdüren Glance widget'ı. +- **Canlı Eylem Testi:** Bir kuralı kaydetmeden önce oluşturduğunuz eylemleri doğrudan cihazınızda test edebilme. +- **Güvenli Kural Çoğaltma:** Mevcut bir kuralı tek tıkla çoğaltma; webhook şifreleri hedef kopya için Keystore ile yeniden şifrelenir. +- **Çalışma Geçmişi:** Son 100 kural tetiklenmesini, eylem bazında sonuçları ve maskelenmiş güvenli detaylarıyla yerel günlükte saklama. +- **Çakışma Uyarıları:** Birbirine zıt durum eylemleri içeren kurallarda otomatik, engelleyici olmayan akıllı uyarı sistemi. --- -### 5. Hızlı Kontroller & Widget -- **Hızlı Ayarlar Kutusu (Quick Settings Tile):** Bildirim panelinden tek tıkla otomasyon motorunu açıp kapatabilme veya durum izleme. -- **Ana Ekran Widget'ı (Jetpack Glance):** Aktif kural sayısını gösteren ve tek dokunuşla motoru duraklatıp devam ettiren şık Material 3 widget'ı. -- **Canlı Eylem Testi:** Bir kuralı kaydetmeden önce, üzerindeki tüm düzenlemeleri doğrudan cihazda anında test edebilme. -- **Güvenli Kural Çoğaltma:** Liste menüsünden bir kuralı, hemen düzenlenmek üzere devre dışı bir kopyaya çoğaltabilme. Yapılandırma korunur, çalışma durumu sıfırlanır ve webhook sırları yeni Android Keystore şifreli metinleriyle saklanır. -- **Çalışma Geçmişi:** Son 100 kural tetiklenmesini, seçili uygulama dilinde gösterilen eylem sonuçlarıyla kaydeden yerel denetim günlüğü. Kimlik bilgileri ve telefon numaraları gizlenir/maskelenir. -- **Çakışma uyarıları:** Kaydetme veya etkinleştirme öncesinde aynı tetikleyici hedefi ile zıt durum eylemleri muhtemel ya da olası çakışma olarak açıklanır. Uyarı engelleyici değildir, çakışan kurala bağlantı verir ve bilinçli geçersiz kılma ister. Analiz, keyfi koşul/zaman aralığı örtüşmeleri için tam kanıt iddia etmez. +## 🛡️ Shizuku Kurulum Kılavuzu + +FlowPilot, yetkili işlemleri (Mobil Veri, Uçak Modu, GPS, Koyu Tema, Uygulama Kapatma) root gerektirmeden güvenle yürütebilmek için **Shizuku** köprüsünü kullanır. + +1. **Shizuku'yu Yükleyin:** [Google Play](https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api) veya [GitHub](https://shizuku.rikka.app/) üzerinden indirin. +2. **Shizuku Servisini Başlatın:** + - **Android 11 ve üzeri (Kablosuz Hata Ayıklama):** Bilgisayara gerek kalmadan Geliştirici Seçenekleri > Kablosuz Hata Ayıklama üzerinden doğrudan telefonda başlatın. + - **Bilgisayardan (ADB ile):** Şu komutu çalıştırın: + ```bash + adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh + ``` +3. **FlowPilot'a İzin Verin:** FlowPilot'ı açın ve ekranda beliren Shizuku yetkilendirmesini onaylayın. +4. Tüm yetkili işlemler hemen aktif hale gelecek ve sorunsuz çalışacaktır! --- -## 🛠️ Mimari ve Kullanılan Teknolojiler +## 🔒 Gizlilik ve Sıfır-Güven İlkesi + +FlowPilot kullanıcı gizliliğine tavizsiz bir bağlılıkla tasarlanmıştır: + +- 🚫 **Sıfır Telemetri:** Firebase Analytics, Sentry, uzaktan çökme raporlayıcıları veya takip SDK'ları yer almaz. +- 📵 **Bulut Eşitlemesi Yok:** Kurallarınız, günlükleriniz ve anahtarlarınız asla üçüncü taraf bir buluta gönderilmez. +- 🛡️ **Donanım Destekli Keystore:** Webhook şifreleri ve özel başlıklar Android Keystore donanım anahtarlarıyla AES-256-GCM ile korunur. +- 🙈 **Kişisel Veri Maskeleme:** Telefon numaraları, webhook anahtarları ve gizli başlıklar arayüzde ve loglarda maskelenmiş olarak tutulur. + +### Şeffaf İzin Açıklamaları +FlowPilot hassas izinleri yalnızca açık otomasyon özelliklerini yerine getirebilmek için talep eder: +- `QUERY_ALL_PACKAGES`: Android 11+ sürümlerinde Uygulama Tetikleyici ve Uygulama Açıcı listelerini gösterebilmek için gereklidir. +- `RECEIVE_SMS` & `SEND_SMS`: Yalnızca SMS tetikleyicisi ve doğrudan SMS gönderme eylemlerinde kullanılır. +- `ACCESS_BACKGROUND_LOCATION`: Sıfır pil tüketimli donanım geofence takibi (`GeofencingClient`) ve kullanıcının kurguladığı konum şablonları için kullanılır. +- `FOREGROUND_SERVICE_LOCATION`: Android 14+ sürümlerinde geofence ve aktif konum görevlerinin arka planda sorunsuz sürmesi için gereklidir. + +*Not: FlowPilot, bu temel otomasyon izinlerinden feragat etmemek adına Google Play Store dağıtımı hedeflemez. Doğrulanmış APK'ları doğrudan GitHub Releases üzerinden edinebilirsiniz.* + +--- + +## 📦 Yedekleme ve Kurtarma + +| Mod | Biçim | Güvenlik | Ne Zaman Kullanılır? | +| :--- | :--- | :--- | :--- | +| **Temizlenmiş JSON** | Düz Metin JSON | Webhook URL ve hassas kimlik bilgileri çıkarılır | Kuralları arkadaşlarınızla veya toplulukla güvenle paylaşırken | +| **Şifreli Tam Yedek** | Şifreli Paket | **AES-256-GCM + PBKDF2** (100.000 iterasyon, salt + IV) | Tüm webhook sırları, telefon numaraları ve aktiflik durumlarıyla eksiksiz yedek | + +Geri yükleme çok kolaydır: Dosyanızı seçin, parolanızı girin ve **Birleştir** veya **Üzerine Yaz** tercihinizi yapın. İçe aktarılan sırlar hedef cihazın yerel Android Keystore'u ile anında yeniden şifrelenir. + +--- + +## 🛠️ Mimari ve Teknolojiler + +FlowPilot modern Android mimari prensiplerine sadık kalır: ``` FlowPilot ├── app/src/main/java/com/flowpilot/app/ -│ ├── actions/ # Eylem yürütücüleri (Shizuku, TTS, Webhook, Ses, Sistem, Telefon) -│ ├── data/ # Veri modelleri, JSON serileştirme, DataStore deposu, Yedekleme -│ ├── engine/ # Ön plan AutomationService, BroadcastReceiver'lar, Sensör takipçileri -│ ├── glance/ # Jetpack Glance Ana Ekran Widget uygulaması +│ ├── actions/ # Eylem yürütücüleri: Shizuku, Ses, TTS, Webhook, SMS, Sistem +│ ├── analysis/ # Çakışma analizi (AutomationConflictAnalyzer) ve kontroller +│ ├── data/ # Veri modelleri, JSON serileştirme, DataStore depoları, Yedekleme +│ ├── engine/ # Ön plan AutomationService, Alıcılar, Sensör takipçileri +│ ├── glance/ # Jetpack Glance Ana Ekran Widget'ı │ ├── quicksettings/ # Hızlı Ayarlar Servisi (TileService) │ ├── shizuku/ # Shizuku AIDL IPC köprüsü -│ └── ui/ # Jetpack Compose arayüzü (Tema, Ekranlar, Bileşenler, Seçiciler) +│ └── ui/ # Jetpack Compose Arayüzü (Material 3 Tema, Ekranlar, Bileşenler) └── app/src/test/ # Deterministik JUnit birim testleri ``` - **Dil:** Kotlin 2.2.10 - **Arayüz:** Jetpack Compose & Material 3 - **Eşzamanlılık:** Kotlin Coroutines & StateFlow -- **Kalıcılık:** Android Jetpack DataStore (Preferences & JSON) -- **Güvenlik:** Android Keystore (AES-256-GCM şifreleme) -- **Sistem Erişimi:** Shizuku AIDL IPC Köprüsü -- **Widget:** Android Jetpack Glance -- **Uyumluluk:** Minimum Android 8.0 (API 26) — Hedef Android 16 (API 36) +- **Depolama:** Jetpack DataStore (Preferences & JSON) +- **Şifreleme:** Android Keystore (AES-256-GCM) +- **Sistem Köprüsü:** Shizuku AIDL IPC +- **Widget:** Jetpack Glance +- **Hedef SDK:** Android 16 (API 36) • **Minimum SDK:** Android 8.0 (API 26) --- ## 📥 Kaynak Koddan Derleme ### Gereksinimler -- JDK 17 (Eclipse Temurin veya OpenJDK) -- Android SDK (Platform 36 ve Build-Tools 36.0.0+) +- JDK 17 (OpenJDK veya Eclipse Temurin) +- Android SDK (Platform 36, Build-Tools 36.0.0+) - Git -### Derleme Adımları ```bash # Depoyu klonlayın git clone https://github.com/emi-ran/flowpilot.git @@ -176,60 +304,22 @@ cd flowpilot ./gradlew assembleDebug ``` -Derlenen APK şu yolda yer alır: +Derlenen APK çıktısı: ```text app/build/outputs/apk/debug/app-debug.apk ``` -### Yedekleme ve Geri Yükleme - -- **Normal JSON dışa aktarma/paylaşma:** Taşınabilir ve güvenli kural verisi üretir. Webhook URL'si, başlıkları ve gövdesi çıkarılır; normal içe aktarma kuralları Birleştir veya Üzerine Yaz öncesinde devre dışı bırakır. -- **Şifreli tam yedek:** Ayarlar ekranından **Şifreli tam yedek** seçin veya tek kural paylaşırken bu seçeneği kullanın. En az altı karakterlik parola; webhook yapılandırması, telefon/SMS alanları ve etkinlik durumu dahil tüm kural verisini şifreler. -- **Taşınabilir format:** Rastgele salt ve IV ile PBKDF2-HMAC-SHA256 (100.000 iterasyon) anahtar türetme kullanan AES-256-GCM doğrulanmış şifreleme. Yanlış parola veya değiştirilmiş yedek, kurallar değiştirilmeden önce reddedilir. -- **Geri yükleme:** Şifreli yedeği seçin, parolasını girin, sonra Birleştir veya Üzerine Yaz seçin. İçe aktarılan sırlar hedef cihazın Android Keystore'u ile yeniden şifrelenir. -- **Kapsam dışı:** Çalışma geçmişi, geçici geofence tanılama/kuyruk verisi, motor durumu, Android izinleri, Shizuku durumu ve TTS ses önbelleği yedeğe dahil edilmez. - -### Cihaza ADB ile Yükleme +Cihazınıza doğrudan ADB ile yükleyin: ```bash adb install -r app/build/outputs/apk/debug/app-debug.apk ``` --- -## 🛡️ Shizuku Kurulum Kılavuzu - -Mobil Veri, Uçak Modu, GPS ve Koyu Tema kontrolü gibi yetkili eylemler root erişimi olmadan **Shizuku** üzerinden yürütülür: - -1. [Shizuku](https://shizuku.rikka.app/) uygulamasını Google Play veya GitHub üzerinden yükleyin. -2. Shizuku'yu **Kablosuz Hata Ayıklama** (Android 11+) veya bilgisayardan ADB komutuyla başlatın: - ```bash - adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh - ``` -3. **FlowPilot** uygulamasını açın -> İstendiğinde FlowPilot'a Shizuku iznini onaylayın. -4. Tüm yetkili eylemler artık **Kullanılabilir** duruma gelecek ve sorunsuz çalışacaktır. - ---- - -## 🔒 Gizlilik Politikası - -FlowPilot **sıfır-güven (zero-trust)** gizlilik prensibiyle geliştirilmiştir: -- **Telemetri veya Bulut Eşitlemesi Yoktur:** Uygulama içinde çökme raporlayıcıları, analitik kodları, reklam kütüphaneleri veya bulut eşitlemesi bulunmaz. -- **Yapılandırılmış Veri Paylaşımı:** Kullanıcı tarafından yapılandırılan Webhook, SMS eylemleri ve dışa aktarma işlemleri yalnızca seçtiğiniz verileri gönderebilir. -- **Konum Verisi:** Yalnızca yerel olarak bağlı olunan Wi-Fi adını tespit etmek, Google Play Services `GeofencingClient` ile donanım düzeyinde coğrafi çit sınırlarını izlemek ve kullanıcının özel olarak kurguladığı SMS/Webhook şablonlarına koordinat sağlamak için kullanılır. -- **Telefon & SMS:** Yalnızca kuralları tetiklemek için kullanılır; numara ve içerikler geçmişte veya loglarda asla ham halde tutulmaz. - -### Dağıtım ve kısıtlı izinler - -FlowPilot, kullanıcıya gösterilen Uygulama Seçici içinde `PackageManager.getInstalledApplications()` çağırıp başlatılabilir paketleri filtrelediği için `QUERY_ALL_PACKAGES` bildirir. Bu izin kaldırılırsa, paket görünürlüğünün sınırlandığı Android sürümlerinde temel uygulama seçici bozulur. `RECEIVE_SMS`, gelen SMS tetikleyicileri için `SmsReceiver` tarafından; `SEND_SMS`, kullanıcının yapılandırdığı doğrudan SMS eylemleri için `SmsExecutor` tarafından kullanılır. `ACCESS_BACKGROUND_LOCATION`, Google Play Services donanım geofence altyapısının (`GeofencingClient`) sıfır pil tüketimli arka plan sınır takibi yapabilmesi ve etkin kurallar etkinlik görünür değilken koordinat istediğinde `LocationFetcher` tarafından; `FOREGROUND_SERVICE_LOCATION` ise konum ön plan hizmeti alt türünü yetkilendirmek için kullanılır. Kural istemediğinde konum sürekli yoklama ile toplanmaz. - -Bu izinler Google Play'de kısıtlı veya politika açısından hassastır. Bu depo Play uyumluluğu ya da onay garantisi iddia etmez. Kısıtlı izinleri kaldıran Play'e özel bir flavor yoktur; kaldırmak temel özellikleri devre dışı bırakır. Play sürümü için güncel politika incelemesi, gerekli beyanlar, doğru Veri güvenliği açıklamaları ve Google onayı gerekir. Bunlar tamamlanana kadar derlemeleri GitHub sürümleri, F-Droid veya sideloading üzerinden dağıtın. Yalnızca güvendiğiniz kaynaklardan yükleyin. - ---- - ## 🤝 Katkıda Bulunma Hata bildirimleri, öneriler ve kod katkıları memnuniyetle karşılanır! -- Lütfen katkı öncesinde [CONTRIBUTING.md](CONTRIBUTING.md) dosyasını inceleyin. +- Başlamadan önce [CONTRIBUTING.md](CONTRIBUTING.md) dosyasını inceleyebilirsiniz. - Bir sorunla karşılaştıysanız [Hata Bildirimi](https://github.com/emi-ran/flowpilot/issues/new?template=bug_report.md) oluşturabilirsiniz. - Yeni bir tetikleyici veya eylem öneriniz varsa [Özellik İsteği](https://github.com/emi-ran/flowpilot/issues/new?template=feature_request.md) şablonunu kullanabilirsiniz. @@ -237,11 +327,9 @@ Hata bildirimleri, öneriler ve kod katkıları memnuniyetle karşılanır! ## 📄 Lisans -FlowPilot, **GNU General Public License v3.0 (GPL-3.0)** kapsamında lisanslanmış özgür ve açık kaynaklı bir yazılımdır. -Ayrıntılar için [LICENSE](LICENSE) dosyasına göz atabilirsiniz. - ---- +FlowPilot, **[GNU General Public License v3.0 (GPL-3.0)](LICENSE)** kapsamında lisanslanmış özgür ve açık kaynaklı bir yazılımdır.
-Android Güç Kullanıcıları için ❤️ ile Geliştirildi +
+ Android Güç Kullanıcıları için ❤️ ile Geliştirildi