An open API service indexing awesome lists of open source software.

https://github.com/inkflow59/wakemeup

A mobile app that lets you rest on public transport without missing your stop! Set your GPS alarm and let yourself be lulled until your arrival.
https://github.com/inkflow59/wakemeup

Last synced: 9 months ago
JSON representation

A mobile app that lets you rest on public transport without missing your stop! Set your GPS alarm and let yourself be lulled until your arrival.

Awesome Lists containing this project

README

          

# πŸ“ WakeMeUp - Location-Based Alarm

![Android](https://img.shields.io/badge/Android-21%2B-3DDC84?style=for-the-badge&logo=android&logoColor=white)
![Kotlin](https://img.shields.io/badge/Kotlin-1.9.10-7F52FF?style=for-the-badge&logo=kotlin&logoColor=white)
![OpenStreetMap](https://img.shields.io/badge/OpenStreetMap-Free-7EBC6F?style=for-the-badge&logo=openstreetmap&logoColor=white)
![GPS](https://img.shields.io/badge/GPS-Location-FF6B35?style=for-the-badge&logo=location&logoColor=white)

*Never miss your stop again! Wake up automatically when you approach your destination.*

## 🎯 About

**WakeMeUp** is an innovative Android application that allows you to create alarms based on your geographical location rather than time. Perfect for:

- 🚊 **Public Transportation**: Sleep peacefully, the app wakes you up at your stop
- πŸš— **Car Travel**: Ideal for passengers during long journeys
- ✈️ **Travel**: Never miss your connections or destinations again
- πŸƒ **Sports**: Wake-up calls for your checkpoints during long runs

## ✨ Features

### πŸŽ›οΈ Alarm Management
- **Intuitive Creation**: Simple interface with interactive OpenStreetMap
- **Complete Customization**: Name, position, activation radius (10m - 1km)
- **Flexible Options**: Sound, vibration, enable/disable
- **Address Search**: Easily find your destinations

### πŸ“ Geolocation Technology
- **Continuous Monitoring**: Optimized background service
- **GPS Precision**: Uses fine location services
- **Power Efficient**: Intelligent battery management
- **Offline Operation**: No internet needed once maps are downloaded

### πŸ”” Alert System
- **Push Notifications**: Immediate and visible alerts
- **Alarm Sound**: Loud and customizable ringtone
- **Vibration**: Tactile wake-up even in silent mode
- **Auto-Deactivation**: Alarm deactivates after triggering

### πŸ“± Android Widget
- **Home Screen Widget**: Quick view of active alarms directly on your home screen
- **Real-time Updates**: Widget automatically refreshes when alarms change
- **One-tap Access**: Direct launch to the main app from the widget
- **Compact Display**: Shows essential information without cluttering your screen

### πŸ”„ System Integration
- **Auto-restart**: Automatically restarts monitoring after device reboot
- **Background Persistence**: Maintains alarm monitoring even when app is closed
- **System Broadcasts**: Efficient communication between app components
- **Boot Receiver**: Seamlessly resumes active alarms after system restart

## πŸš€ Installation

### Prerequisites
- **Android 5.0** (API 21) or higher
- **Internet connection** (to download maps)
- **GPS** enabled on device

### Installation Steps

1. **Clone the project**
```bash
git clone https://github.com/your-username/wakemeup.git
cd wakemeup
```

2. **Open in Android Studio**
- Open Android Studio
- File β†’ Open β†’ Select project folder

3. **Build and install**
```bash
./gradlew assembleDebug
./gradlew installDebug
```

**πŸŽ‰ No additional configuration required!** The app uses OpenStreetMap which doesn't require an API key.

## πŸ”§ Configuration

### Required Permissions

The app automatically requests the following permissions:

```xml

```

### Battery Optimization

For optimal operation, disable battery optimization for WakeMeUp:

1. **Settings** β†’ **Battery** β†’ **Battery Optimization**
2. Search for **WakeMeUp**
3. Select **"Don't optimize"**

### Widget Setup

To add the WakeMeUp widget to your home screen:

1. **Long press** on your home screen
2. Select **"Widgets"**
3. Find **"WakeMeUp"** in the list
4. **Drag and drop** to your desired location
5. The widget will automatically show your active alarms

## πŸ“– User Guide

### 1. Create your first alarm

1. **Open the app** and tap the **[+]** button
2. **Name your alarm** (e.g., "ChΓ’telet Stop")
3. **Set the position**:
- πŸ“ Use your current location
- πŸ” Search for an address
- πŸ—ΊοΈ Click directly on the map
4. **Configure the activation radius** (recommended: 100-200m)
5. **Enable sound and/or vibration**
6. **Save**

### 2. Use the alarm

1. **Activate the alarm** in the main list
2. **Start your journey** - the app monitors your position in the background
3. **Get alerted** automatically when you approach the destination
4. **Wake up** thanks to sound and vibration

### 3. Advanced Management

- **✏️ Edit**: Click "Edit" to change settings
- **πŸ”„ Enable/Disable**: Use the switch to temporarily enable/disable
- **πŸ—‘οΈ Delete**: Click "Delete" to permanently remove
- **πŸ“± Widget**: Monitor active alarms directly from your home screen

## πŸ—οΈ Architecture

### Project Structure

```
app/
β”œβ”€β”€ πŸ“± MainActivity.kt # Main screen
β”œβ”€β”€ ✏️ AlarmEditorActivity.kt # Alarm creation/modification
β”œβ”€β”€ πŸ“ LocationService.kt # Geolocation service
β”œβ”€β”€ πŸ’Ύ AlarmRepository.kt # Data management
β”œβ”€β”€ πŸ“‹ AlarmAdapter.kt # List display
β”œβ”€β”€ 🏠 LocationAlarm.kt # Data model
β”œβ”€β”€ πŸŽ›οΈ MainViewModel.kt # Business logic
β”œβ”€β”€ πŸ“± WakeMeUpWidget.kt # Home screen widget
β”œβ”€β”€ πŸ”„ BootReceiver.kt # Auto-restart after reboot
└── πŸ” PermissionManager.kt # Permission management
```

### Technologies Used

- **Language**: Kotlin
- **Architecture**: MVVM (Model-View-ViewModel)
- **Geolocation**: Google Play Services Location
- **Maps**: OpenStreetMap with osmdroid
- **Storage**: SharedPreferences
- **Interface**: Material Design Components
- **Services**: Foreground Service for background operation
- **Widgets**: Android App Widget framework
- **System Integration**: Broadcast Receivers

### Key Components

| Component | Role | Technology |
|-----------|------|-------------|
| `LocationService` | Background GPS monitoring | FusedLocationProviderClient |
| `AlarmRepository` | Data persistence | SharedPreferences |
| `MainActivity` | Main interface | RecyclerView + LiveData |
| `AlarmEditorActivity` | Alarm configuration | OpenStreetMap |
| `WakeMeUpWidget` | Home screen widget | AppWidgetProvider |
| `BootReceiver` | Auto-restart on boot | BroadcastReceiver |

## πŸ”’ Privacy

- **Local Data**: All data is stored locally on your device
- **No Server**: No data is sent to external servers
- **GPS Only**: Only GPS location is used, no other personal data
- **Transparent**: Open source code, auditable

## πŸ› Troubleshooting

### Alarm doesn't trigger

- βœ… Check that the alarm is **enabled** (green switch)
- βœ… Confirm that **location permissions** are granted
- βœ… Disable **battery optimization** for the app
- βœ… Verify that **GPS is enabled** on the device
- βœ… Ensure you're within the **defined zone** (configured radius)

### App closes in background

- βœ… Disable **battery optimization** for WakeMeUp
- βœ… Add the app to **protected applications** (manufacturer dependent)
- βœ… Check in **Settings** β†’ **Apps** β†’ **Special Permissions**

### Widget not updating

- βœ… Ensure the widget has been **added to home screen**
- βœ… Check that the app has **notification permissions**
- βœ… Try **removing and re-adding** the widget
- βœ… Verify that **background app refresh** is enabled

### Alarms don't restart after reboot

- βœ… Grant **"Auto-start"** permission (manufacturer dependent)
- βœ… Ensure **RECEIVE_BOOT_COMPLETED** permission is granted
- βœ… Check that active alarms exist before restart
- βœ… Disable **deep sleep mode** for the app

### Inaccurate GPS

- βœ… Enable **high-precision location**
- βœ… Be in an **open environment** (avoid tunnels/buildings)
- βœ… Increase the **activation radius** if necessary

## 🀝 Contributing

Contributions are welcome! To contribute:

1. **Fork** the project
2. Create a **feature branch** (`git checkout -b feature/new-feature`)
3. **Commit** your changes (`git commit -m 'Add new feature'`)
4. **Push** to the branch (`git push origin feature/new-feature`)
5. Open a **Pull Request**

### Improvement Ideas

- πŸŒ™ **Dark mode** for the interface
- πŸ“Š **Usage statistics** for alarms
- 🎡 **Custom sounds** for alarms
- 🌐 **Multi-language support**
- ⏰ **Combined alarms** (time + location)
- πŸ“ˆ **Advanced widget features** (progress bars, distance indicators)
- πŸ”” **Smart notifications** based on user patterns
- πŸ—ΊοΈ **Offline maps** for better performance

## πŸ“„ License

This project is under MIT License. See the [LICENSE](LICENSE) file for more details.

## πŸ‘¨β€πŸ’» Developer

Developed with ❀️ to make travel more peaceful.

---

**⭐ Don't hesitate to star this project if it helps you! ⭐**

*WakeMeUp - Because your destination matters more than time*