Water Reminder is a full-featured, beautifully designed Android application that helps users stay properly hydrated throughout the day. The app combines a smart, science-backed goal recommendation engine with flexible reminder scheduling, animated circular progress, a home-screen widget, and a rich statistics screen — all packaged in clean, maintainable Java code following Google’s recommended MVVM architecture.
Upon first launch, users are guided through a smooth onboarding flow that collects their name, gender, age, weight, height, activity level, and local weather conditions. The app then calculates a personalised daily water intake goal in real time using an evidence-based formula and lets the user fine-tune it with a slider before saving.
The main dashboard presents a large animated circular progress ring showing how much of the daily goal has been reached, a horizontal scrollable container picker (glass, cup, bottle, mug, flask, custom), a live log of every drink recorded today with swipe-to-delete, a streak card showing consecutive days of goal completion, and a motivational message that updates dynamically throughout the day.
The Reminders screen lets users both manually create individual alarms (with custom label, time, and amount) and auto-generate a full schedule derived from their saved wake-up time, bedtime, and preferred interval — a powerful one-tap setup that eliminates tedious manual entry. All alarms survive device reboots via a BootReceiver and are delivered as high-priority notifications with inline Drink Now and Skip action buttons that log or dismiss the entry without opening the app.
The History screen shows interactive bar charts (via MPAndroidChart) for weekly, monthly, and yearly periods, with goal-achieved bars highlighted in a distinct colour and summary statistics (average, maximum, minimum, and total intake) shown below the chart.
A home-screen widget shows the current intake, goal, percentage progress bar, and a one-tap Drink button — all updated in real time from the Room database without opening the app.
Data safety is covered by a JSON-based backup and restore system that exports all records to the device’s external storage with a timestamped filename, and imports them back with a single file picker. An optional automated backup can be scheduled via WorkManager. The app also sends an end-of-day summary notification and a goal-achieved celebration notification with confetti vibration pattern.
The codebase is clean, fully commented, and ready for immediate branding — just replace the package name, launcher icons, AdMob IDs, and colour palette in a few minutes.
AlarmManager.setExactAndAllowWhileIdle) for reliable deliveryBootReceiverMY_PACKAGE_REPLACEDAndroidManifest.xml — swap one line to go livefindViewById calls| Requirement | Details |
|---|---|
| Language | Java (Android) |
| Minimum Android SDK | Android 6.0 Marshmallow (API 23) |
| Target / Compile SDK | Android 14 (API 34) |
| Build System | Gradle 8.4 with Android Gradle Plugin |
| IDE | Android Studio Hedgehog or newer (any version supporting Gradle 8.x) |
| Java Version | Java 8 (sourceCompatibility / targetCompatibility) |
| Internet | Required for AdMob initialisation; all other features work fully offline |
| Permissions | RECEIVE_BOOT_COMPLETED, SCHEDULE_EXACT_ALARM, USE_EXACT_ALARM, POST_NOTIFICATIONS (Android 13+), VIBRATE, FOREGROUND_SERVICE, INTERNET, ACCESS_NETWORK_STATE, READ_EXTERNAL_STORAGE (≤ API 32), WRITE_EXTERNAL_STORAGE (≤ API 29), READ_MEDIA_IMAGES (API 33+) |
| Key Libraries | Room (database), Lifecycle ViewModel & LiveData, WorkManager, Navigation Component, MPAndroidChart (bar charts), Google AdMob, Material Components, CircularProgressIndicator, AndroidX AppCompat, RecyclerView, DataBinding, ConstraintLayout |
| AdMob | A valid AdMob App ID must be added to AndroidManifest.xml before publishing (test ID is included in the source) |
| Keystore | A release keystore is required to sign the APK / AAB for Play Store distribution |
WaterReminderApp/ folder (the one containing settings.gradle).com.waterreminder.app package in the Project pane → Refactor → Rename to your own package (e.g., com.yourcompany.hydrate). Also update applicationId in app/build.gradle.app_name in res/values/strings.xml (and all values-XX folders).ic_launcher / ic_launcher_round files in the mipmap-* folders, or use File → New → Image Asset in Android Studio.res/values/colors.xml — change colorPrimary and colorSecondary to match your brand palette.AndroidManifest.xml and replace the test AdMob App ID value (ca-app-pub-3940256099942544~3347511713) with your own real App ID from the AdMob console.values-de), Spanish (values-es), French (values-fr), and Hindi (values-hi).values-XX folder (e.g., values-pt) and copy strings.xml from values/, then translate all values.res/values/arrays.xml (arrays language_options and language_codes).values-XX folder and remove its entry from the arrays.ContainerHelper.java.res/drawable/..aab to the Google Play Console.POST_NOTIFICATIONS runtime permission. The request is triggered automatically; users must grant it for reminders to appear.SCHEDULE_EXACT_ALARM permission may also require the user to enable it manually via Settings → Apps → Special app access → Alarms & reminders. The app handles this gracefully.<external storage>/Android/data/<package>/files/WaterReminder/..json file to restore all records.APK: https://www.mediafire.com/file/dvxikdy4oy2ggde/waterreminderav.apk/file
$18 |
Download |
0 average based on 0 ratings.
| Last Update | 2026-04-23 |
| Created | 2026-04-23 |
| Sales | 0 |
| Discussion | Comments |
| Software Version | Kotlin 1.x Android 15.0 Android 12.0 Android 11.0 Android 10.0 Android 9.0 Other |
| Files Included | .db .java .xml Layered PNG |
| Video Preview Resolution |