A Pomodoro-inspired productivity app that helps you study smarter — not longer.
Interval is a native Android application built with Java that implements the Pomodoro technique — a time management method that alternates focused study sessions with short breaks. Users can register an account, create custom study sessions, track their history, and stay on top of their productivity — all backed by a local SQLite database with secure authentication.
- Secure user registration and login
- Passwords hashed using SHA-256 — never stored in plain text
- Session persistence via
SharedPreferences - One-tap logout with confirmation dialog
- Countdown timer with animated circular progress indicator
- Study phase fills progress clockwise; Break phase drains counter-clockwise
- Pause, Resume, Skip, and Stop controls
- Smart battery management — screen only wakes at timer transitions, not throughout
- Haptic feedback on button taps and timer completions
- Create custom sessions with name, study duration, and break duration
- Read — dashboard auto-loads your latest saved session on resume
- Update — rename sessions from history
- Delete — remove sessions with a confirmation dialog
- Every timer run is logged automatically as a history entry
- Grouped by date with smart labels: Today, Yesterday, or full date
- Separated from saved templates — history shows real runs only
- Minimal, clean design with custom typography (
interfont) - Material Design 3 components throughout
- Breathing animation on the dashboard circle
- Real-time input validation with inline error messages
com.example.interval/
│
├── 🔐 Auth
│ ├── login_screen.java # Login with SHA-256 verification + Snackbar errors
│ └── Register_Screen.java # Registration with real-time validation & password strength
│
├── 🏠 Dashboard
│ └── Dashboard_Screen.java # Home screen, loads latest session, starts timer
│
├── ⏱ Timer
│ ├── Study_Running.java # Study countdown, CW progress, logs run to DB
│ └── Break_Running.java # Break countdown, CCW progress, wakes screen on finish
│
├── 📋 Sessions
│ ├── Add_Session.java # Create new session templates
│ ├── Edit_Session.java # Rename existing sessions
│ └── Session_list.java # RecyclerView history with date headers
│
├── 🗄 Data
│ ├── DatabaseHelper.java # SQLite helper — all queries centralised
│ ├── SessionModel.java # Model for dashboard template loading
│ └── SessionListModel.java # Model for history list (includes id + date)
│
├── 🔧 Utilities
│ ├── TimerUtils.java # Haptic feedback utility (tap + finish patterns)
│ └── warning_dialog.java # Reusable custom confirmation dialog
│
└── 🎨 Adapter
└── SessionAdapter.java # RecyclerView adapter with header + item view types
| Column | Type | Description |
|---|---|---|
id |
INTEGER PK | Auto-incremented user ID |
username |
TEXT UNIQUE | Unique username |
password_hash |
TEXT | SHA-256 hashed password |
| Column | Type | Description |
|---|---|---|
id |
INTEGER PK | Auto-incremented session ID |
user_id |
INTEGER FK | References users(id) — cascades on delete |
title |
TEXT | Session name |
focus_time |
INTEGER | Study duration in minutes |
rest_time |
INTEGER | Break duration in minutes |
date |
TEXT | Date of record (yyyy-MM-dd) |
type |
TEXT | 'template' (saved config) or 'run' (actual usage) |
Foreign key enforcement is enabled via
PRAGMA foreign_keys=ON. Users only ever see their own data — every query filters byuser_id.
Login / Register
↓
Dashboard ←──────────────────────────┐
↓ │
[Start Session] │
↓ │
Study Timer ──(finish/skip)──► Break Timer
│ │
└── logs 'run' to DB ────────────►┘
│
[Skip / Finish]
│
Dashboard (onResume refreshes)
| Technology | Usage |
|---|---|
| Java | Primary language |
| Android SDK | Target API 33+, Min API 26 |
| SQLite | Local relational database via SQLiteOpenHelper |
| Material Design 3 | UI components — TextInputLayout, MaterialButton, CircularProgressIndicator, Snackbar |
| CountDownTimer | Timer engine for both study and break phases |
| SHA-256 (MessageDigest) | Password hashing |
| SharedPreferences | Session/login state persistence |
| RecyclerView | Session history list with multiple view types |
| VibrationEffect API | Haptic feedback (supports API 26+) |
| WindowManager Flags | Battery-aware screen wake on timer events |
- Android Studio Hedgehog or later
- Android device or emulator running API 26+
- JDK 11+
- Clone the repository:
git clone https://github.com/NobodydeBunny/Study_Break_Timer.git- Open the project in Android Studio:
File → Open → Select the /Interval folder
-
Let Gradle sync complete.
-
Run on your device or emulator:
Run → Run 'app' (Shift + F10)
No API keys or external services required — everything runs locally on-device.
- Register a new account on the registration screen
- Login with your credentials
- On the Dashboard, tap Add to create a custom study session
- Tap Start Session to begin the study timer
- When the study timer ends, the Break Timer starts automatically
- After the break, you're returned to the dashboard
- View all your past runs under Sessions (history tab)
- Edit session names or Delete entries from history
| Name | Reg No | Index |
|---|---|---|
| Sandakelum Kumarasiri | ICT/2022/136 | 5737 |
| Raashidh Musaj | ICT/2022/135 | 5736 |
| H.A.T.M.Hettiarachchi | ICT/2022/137 | 5738 |
Study_Break_Timer/
├── Interval/ # Android Studio project source
│ ├── app/
│ │ ├── src/main/java/com/example/interval/
│ │ └── src/main/res/
│ └── build.gradle
├── docs/ # Supporting documentation
├── Screenshots/ # Screenshots
└── README.md
| Login | Dashboard | Study Timer | Break Timer | Session History |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Made with lot of ☕ and focused study sessions
Interval — Work hard. Rest smart.




