GrabTrash (EcoTrack) is a modern Android mobile application designed to revolutionize waste management by connecting users with trash pickup services. Schedule pickups, track your orders, and contribute to a cleaner environment!
- Features
- Tech Stack
- Getting Started
- Project Structure
- App Architecture
- API Documentation
- Testing
- Contributing
- Team
- License
| Feature | Description |
|---|---|
| User Authentication | Secure login/registration |
| Security Questions | Password recovery through security questions |
| Order Trash Pickup | Schedule pickups with interactive map location selection |
| Multiple Payments | Pay via GCash or Cash on Hand (Xendit integration) |
| Order History | View past orders and download receipts |
| Push Notifications | FCM-powered notifications for order updates |
| Profile Management | Edit profile, change password, manage settings |
| Collection Schedule | View scheduled garbage collection calendar |
| Cloud Storage | FileLu integration for file uploads and management |
| Feature | Description |
|---|---|
| Driver Dashboard | View and manage assigned job orders |
| Interactive Maps | Navigation with collection point locations |
| Job Status Updates | Update order status (Accept, In-Progress, Complete, Cancelled) |
| Order History | View completed and cancelled job orders |
| Profile Management | Manage driver profile and settings |
| Delivery History | Track all past deliveries and pickups |
| Category | Technologies |
|---|---|
| Language | Kotlin 1.9.x |
| Min SDK | API 24 (Android 7.0 Nougat) |
| Target SDK | API 34 (Android 14) |
| UI Framework | Jetpack Compose + XML Views (Hybrid) |
| Architecture | MVVM with ViewBinding |
| Service | Purpose |
|---|---|
| Firebase Auth | User authentication |
| Firebase Firestore | Database |
| Firebase Cloud Messaging | Push notifications |
| Xendit | Payment processing (GCash) |
| FileLu API | Cloud file storage |
| Library | Version | Purpose |
|---|---|---|
| Jetpack Compose BOM | 2024.02.00 | Modern UI toolkit |
| OSMDroid | 6.1.16 | OpenStreetMap integration |
| Retrofit | 2.9.0 | HTTP client |
| OkHttp | 4.9.0 | Network layer |
| Glide | 4.16.0 | Image loading |
| Coroutines | 1.7.3 | Async operations |
| BCrypt | 0.10.2 | Password hashing |
| kizitonwose/Calendar | 2.5.1 | Calendar view |
Before you begin, ensure you have the following installed:
- Android Studio Hedgehog (2023.1.1) or newer
- Download from developer.android.com
- JDK 8 or higher
- Git for version control
- A physical Android device or emulator (API 24+)
-
Clone the repository
git clone https://github.com/MarckRamon/EcoTrack-Mobile.git cd EcoTrack-Mobile -
Open in Android Studio
- Launch Android Studio
- Select File β Open
- Navigate to the cloned directory and select it
- Wait for Gradle sync to complete
-
Create
local.properties(if not exists)sdk.dir=C:\\Users\\YOUR_USERNAME\\AppData\\Local\\Android\\Sdk
-
Create a Firebase Project
- Go to Firebase Console
- Click "Add project" and follow the wizard
- Enter project name:
EcoTrack, GrabTrash, or Similar
-
Add Android App
- Click "Add app" β Select Android
- Package name:
com.example.grabtrash - App nickname:
EcoTrack Mobile - Register the app
-
Download Configuration
- Download
google-services.json - Place it in the
app/directory
- Download
-
Enable Firebase Services
In Firebase Console, enable the following:
Service Settings Authentication Enable Email/Password sign-in Cloud Firestore Create database in production/test mode Cloud Messaging Enable for push notifications -
Firestore Security Rules (Development)
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }
This project uses OpenStreetMap via the OSMDroid library. No API key is required!
-
Permissions
The following permissions are already configured in
AndroidManifest.xml:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
-
Configuration
OSMDroid is configured in the app with:
- Tile caching for offline support
- Custom user agent for API compliance
- Location services integration
-
Usage
The map is used in:
MapActivity.kt- Location selection for pickupsDriverMapActivity.kt- Driver navigationPrivateEntityMapActivity.kt- Entity location management
π‘ Note: OpenStreetMap is free and open-source. No billing setup required!
# Build debug APK
./gradlew assembleDebug
# Install on connected device
./gradlew installDebug
# Or simply click the Run βΆοΈ button in Android StudioEcoTrack-Mobile/
βββ app/
β βββ src/main/
β β βββ java/com/example/grabtrash/
β β β βββ LoginActivity.kt # User login
β β β βββ RegisterActivity.kt # User registration
β β β βββ HomeActivity.kt # Main home screen
β β β βββ ProfileActivity.kt # User profile
β β β βββ ScheduleActivity.kt # Collection schedule
β β β βββ DriverLoginActivity.kt # Driver authentication
β β β βββ DriverHomeActivity.kt # Driver dashboard
β β β βββ DriverMapActivity.kt # Driver navigation
β β β βββ DriverJobOrderActivity.kt # Job order management
β β β βββ ui/pickup/
β β β β βββ OrderPickupActivity.kt # Order creation
β β β β βββ MapPickerActivity.kt # Location selection
β β β β βββ PaymentMethodActivity.kt # Payment selection
β β β β βββ OrderSuccessActivity.kt # Success screen
β β β β βββ OrderStatusActivity.kt # Order tracking
β β β β βββ OrderReceiptActivity.kt # Receipt display
β β β β βββ model/
β β β β βββ PickupOrder.kt # Order data model
β β β β βββ PaymentMethod.kt # Payment enum
β β β βββ utils/
β β β β βββ FileLuService.kt # Cloud storage API
β β β β βββ EcoTrackFirebaseMessagingService.kt
β β β βββ models/
β β β βββ FileLuModels.kt # FileLu data models
β β βββ res/
β β βββ layout/ # XML layouts
β β βββ drawable/ # Icons, graphics, backgrounds
β β βββ values/ # Strings, colors, dimensions
β β βββ values-night/ # Dark theme resources
β β βββ xml/ # Configurations
β βββ build.gradle.kts # App-level build config
β βββ google-services.json # Firebase config (gitignored)
βββ gradle/ # Gradle wrapper
βββ build.gradle.kts # Project-level build config
βββ settings.gradle.kts # Project settings
βββ README.md # This file
The app follows the MVVM (Model-View-ViewModel) architecture pattern:
flowchart TB
subgraph UI["π₯οΈ UI Layer"]
direction LR
Activities["π± Activities<br/>(XML)"]
Fragments["π§© Fragments<br/>(XML)"]
Compose["β‘ Jetpack Compose<br/>Screens"]
end
subgraph VM["βοΈ ViewModel Layer"]
ViewModels["ViewModels with LiveData / StateFlow"]
end
subgraph Data["πΎ Data Layer"]
direction LR
Firestore["π₯ Firebase<br/>Firestore"]
Retrofit["π Retrofit<br/>(REST API)"]
LocalStorage["π¦ Local Storage<br/>SharedPrefs"]
end
subgraph External["βοΈ External Services"]
direction LR
Auth["π Firebase<br/>Auth"]
FCM["π¨ FCM"]
Xendit["π³ Xendit"]
OSM["πΊοΈ OSM"]
FileLu["π FileLu"]
end
Activities --> ViewModels
Fragments --> ViewModels
Compose --> ViewModels
ViewModels --> Firestore
ViewModels --> Retrofit
ViewModels --> LocalStorage
Firestore --> Auth
Firestore --> FCM
Retrofit --> Xendit
Retrofit --> FileLu
LocalStorage --> OSM
flowchart TD
Login["π Login Screen"]
UserType{"π€ User Type?"}
Login --> UserType
UserType -->|"Regular User"| UserHome["π User Home"]
UserType -->|"Driver"| DriverHome["π Driver Home"]
subgraph UserFlow["π€ User Flow"]
UserHome --> OrderPickup["π¦ Order Pickup"]
UserHome --> Schedule["π
Schedule"]
UserHome --> Profile["π€ Profile"]
UserHome --> Notifications["π Notifications"]
UserHome --> MapPicker["πΊοΈ Map View"]
OrderPickup --> Payment["π³ Payment"]
Payment --> OrderSuccess["β
Order Success"]
OrderSuccess --> OrderStatus["π Order Status"]
end
subgraph DriverFlow["π Driver Flow"]
DriverHome --> AvailableOrders["π Available Orders"]
DriverHome --> DriverMap["πΊοΈ Driver Map"]
DriverHome --> CompletedOrders["β
Completed Orders"]
DriverHome --> DriverProfile["π€ Driver Profile"]
AvailableOrders --> JobOrder["π Job Order Details"]
JobOrder --> |"Accept"| ActiveJob["π Active Job"]
ActiveJob --> |"Complete"| CompletedOrders
end
| Document | Description |
|---|---|
| Implementation Manifest | Detailed screen-by-screen implementation guide |
| FileLu Integration | Cloud storage API integration guide |
| Service | Documentation |
|---|---|
| Firebase | Firebase Android Docs |
| OpenStreetMap | OSMDroid Wiki |
| Xendit | Xendit API Docs |
| FileLu | FileLu API Reference |
# Run unit tests
./gradlew test
# Run instrumented tests
./gradlew connectedAndroidTest
# Run all tests with coverage
./gradlew testDebugUnitTestCoverageapp/src/
βββ test/ # Unit tests
β βββ java/com/example/grabtrash/
β βββ utils/
β βββ FileLuServiceTest.kt
βββ androidTest/ # Instrumented tests
βββ java/com/example/grabtrash/
βββ ExampleInstrumentedTest.kt
We welcome contributions! Please follow these steps:
- Fork the repository
- Clone your fork
git clone https://github.com/YOUR_USERNAME/EcoTrack-Mobile.git
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Commit with a descriptive message
git commit -m "feat: add amazing feature" - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
![]() Marck Ramon Lead Developer |
![]() Mykel Seth Lead Developer |
Thanks to everyone who has contributed to this project!
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2024 GrabTrash Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- Firebase for backend services
- OpenStreetMap for free and open map data
- OSMDroid for the Android map library
- Xendit for payment processing
- FileLu for cloud storage
- All the amazing open-source libraries that made this project possible
GrabTrash Mobile
Made with π for a cleaner environment
β Star us on GitHub if this project helped you!

