TripSync is an Android application developed in Kotlin that allows users to plan, organize, and synchronize trips in an intuitive and collaborative way. It includes features such as itinerary creation, plan sharing, photo management, and offline support.
TripSync was created with travelers in mind who want to easily organize multiple trips in a single location. The application allows:
- Create and edit trips with personalized information
- Add and view photos associated with trips
- Share plans with other users
- Use the application in offline mode, with later synchronization
- Manage multiple trips with a simple and functional interface
TripSync
│
├── UI
│ ├── LoginActivity
│ ├── RegisterActivity
│ ├── HomeActivity (Trip List)
│ ├── CreateTripActivity
│ ├── IntroActivity
│ ├── EditTripActivity
│ ├── EditProfileActivity
│ └── TripPhotosActivity
│
├── Adapters
│ ├── TripAdapter
│ ├── IntroSliderAdapter
│ └── PhotosAdapter
│
├── Models
│ ├── Trip
│ ├── IntroSlide
│ └── TripPhoto
│
├── Utils
│ └── ImageUtils
│
└── Database
├── AppDatabase
├── ImageDao
└── ImageEntity
Communication between different parts of the application follows a layered architecture, facilitating maintenance and separation of concerns:
- UI: Receives user input and displays data received from sources (Firebase/Room).
- Adapters: Bridge the gap between data and visual components like RecyclerView.
- Models: Structures that represent data used locally and remotely.
- Database (Room): Allows saving images locally and accessing them offline.
- Firebase (Firestore/Storage/Auth): Remote data source for synchronization, authentication, and cloud storage.
- Utils: Support for repetitive operations, such as image manipulation or formatting.
-
LoginActivity ↔ Firebase Auth
Allows logging in and authenticating users. On success, redirects to HomeActivity. -
HomeActivity ↔ Firestore
Retrieves trips from the authenticated user and displays them using TripAdapter. -
CreateTripActivity / EditTripActivity ↔ Firestore + Room
Allows creating or modifying trips. Associated images can be saved locally (Room) and in the cloud (Storage). -
TripPhotosActivity ↔ Room + Firebase Storage Shows locally saved images, synchronizes with the cloud, and allows adding new photos from the gallery.
-
Offline: When the user is offline, images are saved in Room and synchronized with Firestore/Storage as soon as there is an internet connection.
This project uses the following libraries:
- Firebase Authentication – User authentication
- Firebase Firestore – Remote data storage
- Firebase Storage – Cloud image storage
- Firebase Crashlytics – Crash reports
- Room Database – Local image storage
- ViewBinding – Safe view access
- Material Components – Modern and consistent interface
- RecyclerView & CardView – Efficient data listing
- Jetpack Libraries – AppCompat, Core, Activity, ConstraintLayout
- Kotlin Coroutines – Asynchronous and reactive
- MockK – Unit and instrumentation testing
- Android Studio Electric Eel or higher
- Minimum SDK: Android 7.1 (API 25)
- Target SDK: Android 14 (API 35)
- Kotlin 1.9.0 or higher
- Java 11
git clone https://github.com/t2ne/tripsync.git- Open Android Studio
- Clone project from a remote repository
- Paste the link https://github.com/t2ne/tripsync.git
- Create the project
- Wait for Gradle synchronization
- Connect a device or emulator
- Run the application
- Log in or create an account
- Create a new trip with title, description, and dates
- Associate locations with the trip
- Add photos directly from the gallery
- Edit or delete trips as needed
- Share plans with other users
- Create, edit, and delete trips
- Add and remove photos associated with trips
- Register and authenticate users with Firebase
- Synchronize data with Firestore (online and offline)
- Save images locally with Room
- Share trips with other users
- The application must work offline with automatic synchronization when online
- Intuitive and responsive interface
- Compatibility with Android API 25+ devices
- Smooth performance without visible delays
- Security guaranteed with Firebase authentication
- Modular and easily maintainable code
The application requires the following permissions, defined in AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />These permissions are used for:
- Internet access (Firebase)
- Access to image gallery (dependent on Android version)