Skip to content

Latest commit

Β 

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Reminders iOS (to-do-list-offline)

Platform Language Architecture Storage Min SDK Target SDK License: MIT

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.


πŸ“– Overview

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.

Why Reminders iOS Offline?

  • 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 AlarmManager with SCHEDULE_EXACT_ALARM to deliver reliable local reminders right on time.
  • Fluid Micro-Interactions: Enhanced with iOS-like elastic bounce and pull-to-refresh physics.

πŸ—οΈ Architecture & Data Flow

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
Loading

✨ Core Features

πŸ—‚οΈ iOS-Inspired Smart Categories

  • 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.

πŸ’Ύ Local Room Database Persistence

  • 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 Flow queries for live count recalculations across dashboard cards.

⏰ Exact Local Notification Scheduling

  • Integrates AlarmManager with PendingIntent triggers 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.

πŸ“± Fluid Micro-Interactions & iOS Pull-to-Refresh

  • Utilizes the ultra-ptr pull-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.

πŸ“± Key Screens & UI Components

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.

πŸ› οΈ Technical Stack Matrix

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)

πŸ“‚ Project Structure

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

πŸš€ Getting Started

Prerequisites

  • 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.

Installation & Build

  1. Clone the repository:

    git clone https://github.com/shayann07/to-do-list-offline.git
    cd to-do-list-offline
  2. Open in Android Studio:

    • Open the cloned directory in Android Studio and let Gradle sync complete.
  3. Build the APK:

    ./gradlew assembleDebug
  4. 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.


πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for complete details.

Copyright (c) 2026 shayann07

About

100% offline, privacy-first iOS Reminders recreation for Android with Room DB persistence, pull-to-refresh physics, and exact AlarmManager alarms.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages