Skip to content

An all-in-one travel planning Android application

Notifications You must be signed in to change notification settings

tsy24/OrbitalLeVoyage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Le Voyage

An all-in-one travel planning application

Proposed level of achievement: Apollo 11

Click here to download the apk

Motivation

When you are trying to plan your own trip, be it overseas or local, you realise you have been switching between numerous websites and applications, picking up bits and pieces of information from various places and trying to put everything together to form your itinerary.

Many may have reached the point where everything feels like a mess as the information you need is scattered around various sources. Furthermore, you don’t know where to get certain information from. So why isn't there a place where you can find and put all the information you need for your trip together, all organised in one place?

Aim

We hope to make trip planning processes simpler by bringing different aspects of trip planning all together in one application.

User Stories

  1. As a person planning my own trip to a country, I would like to know what are the popular attractions and restaurants that I can visit during my trip.
  2. As a person planning my own trip to a country, I would like to plan an itinerary and have a comprehensive schedule that I can refer to.
  3. As a person planning my own trip to a country, I would like to have a place to write down relevant important information that I can refer to together with my itinerary.
  4. As a person planning my own trip to a country, I would like to know about the travelling time needed between locations when planning my itinerary for more efficient allocation of time.
  5. As a tourist guide, I would want to be able to write reviews for hotels, attractions and restaurants.
  6. As a local citizen, I would want to look up the reviews and ratings to decide leisure destinations during short public holidays.
  7. As a frequent traveller, I would like to share my travelling experiences with the public.

Scope of Project

  1. A Scheduler allows users to arrange their itinerary during the trip and will be the main page of the application
  2. A Map feature will be provided for the users to search for locations on the map. Transportation methods will also be shown when searching for directions.
  3. A Hotel Search feature
    • Attached with brief details such as description and address
    • Links to websites for hotel bookings
    • Users can post reviews and ratings of attractions
  4. An Attraction Search feature
    • Attached with brief details such as descriptions and address
    • Users can post reviews and ratings of the attractions
  5. A Restaurant Search feature
    • Attached with brief details such as description and address
    • Users can post reviews and ratings
  6. Checklist feature for users to check their to-do tasks or create a packing list.
  7. Notes provides a platform for users to write down any other information
  8. Displaying 5-day Weather Forecast for an area.

How are we different from similar platforms?

  • Klook and Trip.com:
    • Only shows the booking of different attractions and accommodations, without having a clear visible schedule for reference
    • No link to map to show the location of the place, find directions and compare the distance between accommodations and attractions booked
    • No feature to jot down important notes
  • TripIt: Travel Planner
    • A mobile application that creates itineraries
    • Does not contain features that help users find suitable accommodation, attractions and restaurants

Software Development

Considerations

  • Goals
    • The application should be comprehensive to minimise the need to refer to other applications or websites when planning an itinerary. Thus, the features of the application should include most things that people need when planning an itinerary.
    • User interface should be simple and easy to use.
  • Assumptions
    • It is assummed that the user will have connection to the internet.
  • Constraints
    • We are unable to obtain a datbase of hotels, attractions and restaurants. Thus, an API will be used to obtain information required.

Design

Feature Demo Description
Splash Screen
  • Appears when the application is launched
Account System
  • Users need to create an account to use the application
  • Login screen will appear when the application is launched
  • New users will be directed to the sign up page
Navigation
  • Navigation drawer will be used to navigate between features in the application
  • Logout button will be in the navigation drawer
Home Screen
  • Screen that appears after login or sign up
  • Itinerary screen for a date will be shown after clicking the date on the calendar
Itinerary Screen
  • Displays schedule for a selected date arranged in chronological order
  • Users will be able to add custom events to the itinerary for that date
  • Users will be able to edit event in the itinerary by swiping right and delete event by swiping left
  • Details screen will be shown on click for locations added through the accommodation, attractions or food feature
Search Screen (Accommodation, Attractions, Food features)
  • Users can key in a location to search
  • Displays a list of locations based on the search with brief information such as name, rating, category
  • Users can click on a location to be directed to the details screen
Details screen (Accommodation, Attractions, Food features)
  • Displays details and reviews of the location
  • Users can add reviews for the location
  • Users can add the location to their itinerary
  • Users can view the profile of other users who wrote reviews
Map screen
  • Users can search for a particular location on the map
  • Users can search for directions on the map
Weather screen
  • Displays the current weather and 5-day weather forecast at the user's current location
  • Users can search for the weather forecast for another location
Notes screen
  • Displays list of notes with its titles and date it was last edited
  • Users can create multiple notes
  • Notes content screen will be shown on click
Notes content screen
  • Shows content of notes and title
  • Save button to save changes to notes
Checklist screen
  • List of tasks that users can check
  • Checked tasks will be at the bottom
Profile screen
  • Displays profile information of user: username, email, profile picture
  • Displays reviews written by the user
  • User can edit their profile picture and username

Activity Diagram

Activity Diagram

The activity diagram shows the overview of the actions that users can take at various pages and the relationship between pages in the application.

Walkthrough

Click here to view a walkthrough of the application.

Technical Stack

  • Android Studio
  • Firebase
  • Travel Advisor API
  • Google Maps API
  • OpenWeatherMap API

Implementation

  • Splash screen
    • Delay for 2.5s before starting Login Activity
  • Account System
    • Link to Firebase Authentication: authentication using email and password
    • New users need to set a username during sign up
      • Write profile information to database: Profiles -> userID
    • FirebaseAuth.AuthStateListener: If there is already a user signed in, application will skip login page when launched
  • Navigation drawer
    • Drawer Activity to manage the navigation drawer
    • Features are contained in fragments
    • Header displays profile information
      • Profile picture and username: Read from database Profiles -> userID
      • Email: FirebaseUser.getEmail()
  • Itinerary screen
    • Reads ItineraryItems from Firebase Realtime Database: Users -> userID -> Itinerary -> Date
    • Display ItineraryItems in recycler view
    • Add to itinerary button: add custom event dialog opens
      • Select start and end time with timepicker dialog
      • Check that duration is valid: end time is later than start time
      • Check for overlapping itinerary: open confirmation dialog if there is overlap
      • Write new ItineraryItem to database: Users -> userID -> Itinerary -> Date
    • On click for events added through Accommodation, Attraction and Food features: check type and navigate to corresponding detail fragment
    • On right swipe, users will open edit itinerary dialog
      • Choose new date with DatePickerDialog
      • Choose new timing with TimePickerDialog
      • Cross ImageButton to cancel changes
      • Update button for users to save changes
        • Check that duration is valid: end time is later than start time
        • Check for overlapping itinerary
        • Change in date: get ItineraryItem from old database reference, add to new database reference, update fields and delete ItineraryItem at old reference
        • No change in date: update time values
    • On left swipe, users will open delete event confirmation dialog
      • Confirm button for users to delete event from itinerary: removeValue() from database reference
  • Search screen (AccommodationFragment, AttractionFragment and FoodFragment are subclasses of SearchFragment)
    • SearchView for users to key in query location
    • Make API call with Volley library
    • Call Travel Advisor API location search to obtain a location ID
    • Use ID to call Travel Advisor API hotel/restaurant/attraction list search
    • Create new AccommodationItineraryItem, AttractionItineraryItem, FoodItineraryItem respectively (subclasses of ItineraryItem)
    • Display search results in recycler view
    • On click, corresponding itinerary item is passed to the corresponding details fragment in a bundle
  • Details screen for Accommodation (AccommodationDetailFragment which is a subclass of DetailFragment)
    • Navigation from search fragment:
      • Retrieve AccommodationItineraryItem from bundle
      • Call Travel Advisor API hotel details search using Volley library as there is some information that cannot be obtained from hotel list API call
      • Set information obtained from call to AccommodationItineraryItem and details layout
    • Add to itinerary floating action button: dialog opens
      • Select start and end date with DatePickerDialog
      • Select start and end time with TimePickerDialog
      • Add button:
        • Check that duration is valid: end is later than start
        • Breakdown the time period according to the date: full day is from 00.00am to 11.59pm
        • Check overlap and write AccommodationItineraryItem to database for each date: Users -> userID -> Itinerary -> Date
  • Details screen for Attractions and Food (AttractionDetailFragment and FoodDetailFragment are subclasses of DetailFragment)
    • Navigation from search fragment:
      • Retrieve corresponding itinerary item from bundle
      • Display information on details layout
    • Add to itinerary floating action button: dialog opens
      • Select date with DatePickerDialog
      • Select start and end time with TimePickerDialog
      • Check that duration is valid: end is later than start
      • Check overlap and write corresponding AttractionItineraryItem, FoodItineraryItem (subclasses of ItineraryItem) to database: userID -> Itinerary -> Date
  • Details screen for Accommodation, Attractions and Food
    • Navigation from Itinerary
      • Hide add to itinerary floating action button
      • Read corresponding itinerary item from database: Users -> userID -> Itinerary -> Date
      • Display information on details layout
    • Read ReviewItems from database: Reviews -> locationID
      • Display reviews with recycler view
      • Read username and profile picture of user who wrote the review from database using userID in ReviewItem: Profiles -> userID
      • Click username on review: pass userID in ReviewItem to ProfileFragment in a bundle
    • Add reviews button: open add review dialog
      • Set rating with rating bar
      • Create new ReviewItem
      • Write ReviewItem to database: Reviews -> locationID and Profiles -> userID -> Reviews
  • Map screen
    • SearchView for users to key in query location
    • Call Maps SDK for Android to obtain latitude coordinates for query location
    • Zoom in to location on map
    • When users click the marker, directions button will appear and direct users to google map application to search for directions
  • Notes screen
    • Read NoteItems from database: Users -> userID -> notes
    • Display in recycler view with note title and date it was last saved
    • On click, corresponding NoteItem is passed to the NotesViewFragment in a bundle
    • Add new note floating action button: open dialog
      • User can key in title of new note
      • Create new NoteItem with empty content
      • Pass NoteItem to NotesViewFragment
    • On right swipe: open edit note title dialog
      • Edit button to save changes: update note title in database
    • On left swipe: open delete note confirmation dialog
      • Confirm button for users to delete note: removeValue() from database reference
  • Notes View screen
    • Read note content from database: Users- > userID -> Notes -> noteID
    • Users can edit the text
    • Save floating action button: Update NoteItem content on database
  • Weather screen
    • Get current location coordinates of user with FusedLocationProviderClient
    • Use coordinates to call OpenWeatherMap API current weather data and onecall
    • Display data on layout and 5-day forecast on recycler view
    • Change city button: open change city dialog
      • Call current weather data API with new city name to obtain current weather and coordinates of city
      • Call onecall API with coordinates of city to obtain 5-day forecast
  • Checklist screen
    • Read ChecklistItems from database: Users -> userID -> Checklist
    • Display in recycler view with task and checkbox
      • Sorted with checked tasks at the bottom
    • On change in checkbox status:
      • Update database
      • Sort list of ChecklistItems
    • On right swipe: open edit task dialog
      • Edit button to save changes: update task in database
    • On left swipe: open delete task confirmation dialog
      • Confirm button for users to delete task: removeValue() from database reference
  • Profile screen
    • User viewing their own profile:
      • Read profile picture URL, username and reviews written from database: Profiles -> userID
      • Get email from FirebaseUser
      • Display reviews in recycler view and profile infomration on layout
      • Edit profile button: open edit profile dialog
        • Change profile picture button: launch gallery activity to get image uri
        • Edit button:
          • Save uri to Firebase Storage: images -> userID.jpg
          • Obtain URL from Firebase Storage and save in database: Profiles -> userID -> image
          • Update database with new username: Profiles -> userID -> username
    • User viewing other users' profiles: navigation from review
      • Read profile picture URL, username and reviews written from database: Profiles -> userID
      • Hide user email and edit profile button
      • Display reviews in recycler view

System Flow

Untitled drawing Orbital System Flow (4)

Database Structure

Database ER diagram (3)

The diagram above shows the structure of the Firebase Realtime Database. The main Users branch stores the information of each user: itinerary, notes and checklist. Only the user himself will have read and write access to the information stored in Users under their userID. Users' itineraries are stored as ItineraryItems. AccommodationItineraryItem, AttractionItineraryItem and FoodItineraryItem are subtypes of ItineraryItem and they inherit the fields of ItineraryItem. The Profiles branch stores information about each user that is available to all users. The Reviews branch stores reviews for locations based on their locationID.

Software Testing

System testing was carried out to check for bugs and ensure that the application runs smoothly. Test cases were planned based on the possible usage of the various features in the application.

image image image image

Apart from testing the features, tests for the error messages and error prevention mechanisms were also carried out to ensure that the application runs smoothly. https://docs.google.com/document/d/1fr_anTTLY5FdYji6faao-MRCSdDYTrQDerVoqc1jDtM/edit?usp=sharing

Limitations

  • Travel Advisor API
    • The search results obtained from the accommodation, attractions and food features depend on the Travel Advisor API. The results returned may not be up-to-date and may not be comprehensive. As a result, users might not be able to find some locations on the application. Therefore, there is the option for users to add custom events to their itinerary on the itinerary page.
  • Reviews
    • As we do not have a big user database to write reviews and gather ratings for our reviews database, most of the locations do not have reviews currently. The ratings shown for the locations are currently retrieved from the Travel Advisor API.
  • Directions
    • As we are unable to get access to the Directions API, the application currently does not have a directions feature where users can search for directions in the application. Users will be directed to the maps application on their phones to search for directions.

Possible Future Work

There are some improvements to the application that we thought of and gathered from user feedback. However, due to time constraints, we were unable to work on them.

  • Markings on Calendar to indicate that there is itinerary for that date
  • Directions function
  • Placeholder for empty recycler views in itinerary, notes, checklist and search pages

User Testing

User testing were carried out by us, before letting our friends try out the application. The general idea of the user testing was to have two different user groups, one being a tourist who wishes to use our app for their upcoming trip, and the other being a tour guide planning the trip for his or her tourist group. Reason behind splitting our user groups is that we would like to analyse whether our application is suitable for our different target groups, who have different objectives in mind when using our application. This will allow us to improve our application in a neater fashion, and our blindspots when designing the application could be better discovered when the users are only using the applications for a specific query.

The same apk and questionaire were given out to both groups.

For the "tour guide" group, we made an additional comment saying that they should try to fit in as many travel events as they can, while taking note that none of the events should overlap and they should take the travelling time into consideration by using the map function implemented.

For the "tourist" group, we asked them to pay more attention to the UI design of the application, and whether it was easy for them to execute the tasks that were given to them. A screenshot of the questionaire that was sent to them is attached below.

User Testing Questionarie

Development Plan

Week Tasks
4 (31/5 - 6/6)
  • Home screen: calendar
  • Itinerary page: schedule + adding events
5 (7/6 - 13/6)
  • Accommodation, attractions, food feature
  • Link the accommodation, attractions and food features to itinerary
6 (14/6 - 20/6)
  • Reviews feature (Adding and viewing of reviews)
  • Map feature
7 (21/6 - 27/6)
  • Notes feature
  • Milestone 2 submission preparation
8 (28/6 - 4/7)
  • Checklist feature
  • Further improvement on current features
  • Peer evaluation
9 (5/7 - 11/7)
  • Profile page
  • Improvements based on peer evaluation
10 (12/7 - 18/7)
  • Testing planning
  • Improve app design
11 (19/7 - 25/7)
  • Testing and debugging
  • Milestone 3 submission preparation

About

An all-in-one travel planning Android application

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages