A zero-cloud, 100% offline iOS Reminders recreation for Android, featuring local Room database persistence, ultra-smooth pull-to-refresh interactions, and precision AlarmManager scheduling.
Reminders iOS Offline is a privacy-first task management and reminder client built for Android. It recreates the iconic Apple iOS Reminders aesthetic and organization workflow while guaranteeing complete data sovereignty β all tasks, dates, notes, and completion statuses remain strictly on the user's physical device without requiring an account, network connection, or cloud backend.
By combining modern Android Jetpack libraries (Room ORM, ViewModel, Kotlin Flow, Navigation Component) with custom iOS-styled widgets and smooth pull-to-refresh physics (ultra-ptr), the application offers an ultra-fast, zero-latency daily planning companion.
- 100% Privacy & Data Sovereignty: No sign-in required, zero network permissions needed for data, zero telemetry.
- True iOS Reminders UX: Distinct rounded card tiles for Today, Scheduled, All, Flagged, and Completed, complete with dynamic colored badge counts.
- Precision Local Alarms: Leverages Androidβs
AlarmManagerwithSCHEDULE_EXACT_ALARMto deliver reliable local reminders right on time. - Fluid Micro-Interactions: Enhanced with iOS-like elastic bounce and pull-to-refresh physics.
Reminders iOS Offline strictly adheres to the Android Jetpack MVVM (Model-View-ViewModel) architecture and repository pattern.
flowchart TD
subgraph View_Layer [UI Layer - Jetpack Navigation]
Home[HomeFragment - iOS Dashboard]
Today[TodayFragment]
Scheduled[ScheduledFragment]
All[AllFragment]
Flagged[FlaggedFragment]
Completed[CompletedFragment]
NewReminder[NewReminderFragment]
TaskDetails[TaskDetailsFragment]
end
subgraph State_Layer [ViewModel & State Management]
VM[Task ViewModel]
State[LiveData / StateFlow Streams]
end
subgraph Local_Storage [Data & Persistence Layer]
Repo[Repository]
RoomDB[(Room Local Database\ntasks table)]
DAO[TasksDao]
end
subgraph Alarm_Engine [Alarm Scheduling Infrastructure]
AlarmHelper[AlarmManagerHelper]
AlarmMgr[Android AlarmManager System Service]
Receiver[TaskReminderReceiver]
NotifHelper[Notification System]
end
Home --> VM
Today --> VM
Scheduled --> VM
All --> VM
Flagged --> VM
Completed --> VM
NewReminder --> VM
TaskDetails --> VM
VM --> State
VM --> Repo
Repo <--> DAO
DAO <--> RoomDB
NewReminder --> AlarmHelper
TaskDetails --> AlarmHelper
AlarmHelper --> AlarmMgr
AlarmMgr -.->|Triggers Exact Alarm| Receiver
Receiver --> NotifHelper
- Today: Filters and displays all active reminders due on the current system date.
- Scheduled: Chronological timeline of upcoming tasks with upcoming deadline markers.
- All Incomplete: Comprehensive overview of pending to-do items across all lists.
- Flagged: Priority dashboard highlighting items marked as urgent.
- Completed: Task completion archive tracking completion date timestamps (
dateCompleted) with instant bulk-clear. - Custom Groups: Dedicated views for iCloud and Outlook grouped lists.
- SQLite table schema (
tasks) storing unique auto-generated IDs, title, detailed notes, date, time, time category (morning/afternoon/tonight), timestamp, flag status, and completion state. - Reactive
Flowqueries for live count recalculations across dashboard cards.
- Integrates
AlarmManagerwithPendingIntenttriggers to wake up the broadcast receiver at exact scheduled timestamps. - Native Android notification channel with heads-up alerts and deep-link intent routing directly to task details.
- Utilizes the
ultra-ptrpull-to-refresh library for iOS-inspired gesture physics and smooth list reload transitions. - Custom custom card layouts with rounded corners and typography faithful to iOS Human Interface Guidelines.
| Screen / Component | Class | Description |
|---|---|---|
| Home Dashboard | HomeFragment |
iOS Reminders multi-card dashboard with dynamic live counter badges. |
| New Reminder | NewReminderFragment |
Create task sheet with title, notes, date picker, time picker, and flag toggle. |
| Today View | TodayFragment |
Filtered list of tasks scheduled for today with real-time checkbox toggling. |
| Scheduled View | ScheduledFragment |
Upcoming scheduled tasks filtered by date ranges. |
| All Tasks | AllFragment |
Master list of all active pending tasks. |
| Flagged View | FlaggedFragment |
Priority task list displaying flagged reminders. |
| Completed View | CompletedFragment |
Completed task history with action bar menu to clear all. |
| Task Details | TaskDetailsFragment |
Edit title, modify notes, update due dates/times, and reschedule alarms. |
| Layer / Concern | Technology / Library | Version / Purpose |
|---|---|---|
| Language | Kotlin | 1.9+ |
| Min / Target SDK | Android SDK | minSdk 26 (Android 8.0) / targetSdk 35 (Android 15) / compileSdk 35 |
| Architecture | MVVM + Repository Pattern | Android Jetpack Architecture Components |
| Local Database | Room Persistence Library | SQLite ORM compiled with Kotlin Symbol Processing (KSP) |
| Concurrency | Kotlin Coroutines & Flow | Asynchronous database transactions and reactive UI data streams |
| UI Components | AndroidX, Material Design 3, ViewBinding | Material Components, CardViews, Custom Toolbar, RecyclerViews |
| Pull-to-Refresh | Ultra PTR | iOS-inspired elastic pull-to-refresh physics |
| Scheduling | Android AlarmManager & BroadcastReceiver |
Exact background alarm triggering (SCHEDULE_EXACT_ALARM) |
| Build System | Gradle Kotlin DSL (build.gradle.kts) |
AGP 8.10+ with Version Catalogs (libs.versions.toml) |
to-do-list-offline/
βββ app/
β βββ src/
β β βββ main/
β β β βββ java/com/shayan/remindersios/
β β β β βββ adapters/
β β β β β βββ TaskAdapter.kt # RecyclerView task list adapter
β β β β βββ data/
β β β β β βββ local/
β β β β β β βββ AppDatabase.kt # Room database singleton
β β β β β β βββ dao/TasksDao.kt # Room DAO queries & Flow streams
β β β β β βββ models/Tasks.kt # Room Task data entity
β β β β β βββ repository/Repository.kt # Local database repository
β β β β βββ receivers/
β β β β β βββ TaskReminderReceiver.kt # Exact alarm broadcast receiver
β β β β βββ ui/
β β β β β βββ MainActivity.kt # Host Activity
β β β β β βββ fragments/ # UI navigation destination fragments
β β β β β βββ viewmodel/ViewModel.kt # Shared ViewModel
β β β β βββ utils/
β β β β βββ AlarmManagerHelper.kt # AlarmManager scheduler utility
β β β β βββ Notification.kt # Notification builder helper
β β β β βββ PullToRefreshUtil.kt # Ultra PTR configuration helper
β β β β βββ ToastExtensions.kt # Toast UI extensions
β β β βββ res/
β β β β βββ layout/ # XML layout files
β β β β βββ navigation/nav_graph.xml # Jetpack navigation graph
β β β β βββ values/ # Colors, dimensions, themes
β β β βββ AndroidManifest.xml
β βββ build.gradle.kts
β βββ proguard-rules.pro
βββ screenshots/
β βββ IMG_3339.JPG
β βββ IMG_3340.JPG
β βββ IMG_3343.JPG
βββ gradle/
β βββ libs.versions.toml
βββ build.gradle.kts
βββ LICENSE
βββ README.md
- Android Studio (Hedgehog 2023.1.1 or Ladybug / Koala recommended).
- JDK 11 or JDK 17.
- Physical Android device or Emulator running Android 8.0 (API level 26) or higher.
-
Clone the repository:
git clone https://github.com/shayann07/to-do-list-offline.git cd to-do-list-offline -
Open in Android Studio:
- Open the cloned directory in Android Studio and let Gradle sync complete.
-
Build the APK:
./gradlew assembleDebug
-
Install on Device:
./gradlew installDebug
Note
On Android 12+ (API 31+), verify that the Alarms & Reminders permission is granted under Settings -> Apps -> Reminders iOS -> Alarms & Reminders to ensure exact alarms trigger on time.
This project is licensed under the MIT License β see the LICENSE file for complete details.
Copyright (c) 2026 shayann07