Skip to content

Adhering to the MVVM architectural pattern, this Java application is built in Android Studio as part of a collaborative effort from all the team at Jenerics Software. Our primary goal: create a responsive UI with an intuitive design. Critical data and services are provided by our own RendezVenue API.

Notifications You must be signed in to change notification settings

Jeneric-Java/RendezVenue-Android

Repository files navigation

xxxhdpi-logobanner@4x (1)

Android Badge


Java Badge Groovy Badge Jetpack Navigation Badge Retrofit Badge Glide Badge


RendezVenue® by Jenerics Software

This is your new go-to app for retrieving, collecting, and curating events on the fly within an Android environment. RendezVenue simplifies the hassle of scouring event content with a targeted search functionality to get the events you want, where and when you need them.

Do you prefer working with Outlook, TimeTree, or maybe even simply Google Calendar? No problem, we’ve got you covered. Effortlessly synchronised to a local calendar app of your choosing, RendezVenue takes a holistic approach with full system integration.

Note

This repository, and any of the files contained within, is part of a larger project.

This Android application relies upon data and services provided to it by the RendezVenue API.

The RendezVenue API exists in a separate repository which you can find here.

Overview

RendezVenue boasts a slick UI experience, with automatic background location filtering kicking in from the get-go, granting instant access to events as far as the eye can see. Entrusting response caching and computationally-demanding processes to the backend keeps the user experience uninterrupted. The frontend team have worked hard on embellishing the visuals with snappy graphics, elegantly designed, laid out, and all carefully chosen to complement the overarching theme.

Table of Contents

User Flow

The application opens up to a carefully considered home page. The bottom menu bar acts as the main point of navigation within the app, with the top bar allowing users consistent access to their calendar throughout the app. The Home page features:

  • A section to display two Events saved by the user
  • A search bar, giving another point of access to the Explore page
  • A selection of buttons, providing quick access to Event listings filtered by the category of event



The RendezVenue Home page



The application allows users to search for events with a range of filtering options. Once an event is found clicking it will open up a more detailed view, allowing a user to add it to their calendar with ease. Creating events is also a breeze with our fillable form, utilising text fields, dropdown menus and picker dialogs to make the process as easy as possible for the user and robust input sanitisation for our API. Once an event is created a pop-up is displayed, asking the user if they wish to also add the event to their own calendar.



                                
Finding Events on RendezVenue                                                    Creating Events on RendezVenue

Technologies/Features

We used Jetpack Navigation for it's robustness, allowing us to give a fluid user experience when navigating between sections of the app. Use of a NavController allowed for smoother navigation between various layers with multiple points of entry. Implementing a NavGraph gave us complete oversight to sensibly structure our navigation paths. It also allowed us to visualise how our data was being passed between fragments, relying on the SafeArgs dependency for inter-fragment type-safe navigation.

NavGraph_RV

We used Glide in our Android frontend to load and display images effectively. Once images are loaded, Glide also facilitates efficient image caching, allowing for a polished and stable user experience while browsing images.

When a user creates an event, we use Dialog boxes and Spinners to help ensure that Date, Time and category related fields were uniformly shaped to work with, not only the internal Calendar Provider API, but also our very own Spring Boot API backend. It is, in fact, through a combination of these dialog's, a helper class (affectionately called the Time Wizard) and the invocation of SafeArgs functions made available via the Jetpack Navigation libraries, that we have been able to format the Date and Time fields differently according to the different funtions.

A Real Team Effort

We worked to a tight MVP, building from a clear concept to a multi-faceted, fully-functioning, and bespokely-crafted implementation. The idea for RendezVenue evolved from a desire to create a product from which all team members would benefit. This was about the group, not the individual; we wanted everyone to feel that the project was as much their own as it was anyone else's.

As the project progressed, it really began to take on a life of its own. With each member taking on a particular area of interest, it is within that defined scope of operations that they were afforded the time and space to carry out targeted research, and so incorporate new technologies thus enhancing their code. This approach not only helped to streamline team resources, but allowed us to build upon existing skillsets to qualify the project with a unique blend of functionalities.

Lifecycle & CI/CD

We were acutely constrained for time, so we introduced agile methodologies early on. Regular stand-ups kept the group informed and aligned, and was the source point for ticket creation within a Kanban-style workflow. Starting from a group Excalidraw, we were able to assess operational and technical feasibilities, relating to risks and legal considerations. It was during this research stage that we were able to distil our project aims down to a discrete set of clear, concise, and testable user stories.

We took the time to structure our CI/CD pipeline appropriately with a standardised set of instructions serving as the common point of reference for all team members. This not only encouraged us to keep our local work states consistent but helped guard against misuse, ensuring that privileged branches were free of unstable, broken or poorly-tested code. We produced most of our work inside of feature branches. These provisional working directories do not track a remote branch. This goes back to our earlier point about guarding against accidental pollution of the parent branches.

Our early sketch-ups

Flowcharts

image

UI Prototypes

image

First Ideas

image

Preserving the Pipeline

image

Security

All data relating to a user's location is AES-256 encrypted for secure transmission. Jenerics Software puts the utmost priority on preserving the confidentiality and integrity of sensitive user-sourced credentials.

For a more in-depth look at how RendezVenue manages end-to-end encryption, please visit our backend, which you can find here.

Future Considerations

  • Compatibility testing: pivoting from local to instrumented testing, assessing the application's performance across many devices and API levels.
  • Expand on the application themes with custom animations between fragments and a broader revision of stylistic choices not adhering to guidelines on accessibility.
  • Loading animation when awaiting a non-cached response to a new GET request, most importantly when a user changes location.
  • Dynamic path handling on denial of permissions to access the user's location.
  • Thorough sanitisation of user input to text fields.
  • Push notifications to remind users of their upcoming events; presently a user can do this via their own calendar.
  • GitHub Actions to automate end-of-pipeline testing and enforce rulesets on staging and production branches.

FAQs

On which external APIs does RendezVenue depend?

Our ethos centres on limiting over-reliance on external APIs. We rely solely on Ticketmaster's Discovery API.

Where can I get RendezVenue?

This is a work in progress. Please be aware that some of the critical files, upon which this app is reliant for encrypting traffic, will not be made available with this release.

Is RendezVenue available in Kotlin?

Not presently. This project was foremost an exercise in developing a full-stack Android application in Java.

How long is a piece of string?

Great question. For an empty string, about 40 bytes, I believe.

Bugs and Contributions

If you find any bugs, please create an issue on the issues page of this repository.

As this project is exclusive to the team at Jenerics Software, we don't plan on accepting any external contributions at this time.

About

Adhering to the MVVM architectural pattern, this Java application is built in Android Studio as part of a collaborative effort from all the team at Jenerics Software. Our primary goal: create a responsive UI with an intuitive design. Critical data and services are provided by our own RendezVenue API.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages