Android application developed in Android Studio, for the Software Development Methods course taken in the 2nd year at the Faculty of Mathematics and Computer Science from the University of Bucharest, for freelancing purposes, bearing similarities with the Fiverr website.
Freelance4ALL is, as the name suggests, a freelance platform that allows people from around the world to advertise and sell personal services. Every user has a profile (containing info such as: email, profile description, phone number), and can opt between two types of roles: buyer and seller. Sellers can add any new service (consisting of: web design, music making, game development, art, etc) and modify their existent services, while buyers can purchase any service by adding it to a shopping cart and then checking out. In addition, buyers will get notified via a pop-up notification: when they log out and there are services left in their cart, and when the app notifies the sellers that the respective buyers have purchased their services. Moreover, buyers can also visualize the history of their purchases, and offer them a star-based rating.
Our app is meant to promote freelancing, as more and more people are getting tired of the corporate life and wish to have their own little business, while not having to deal with the likes of traveling long distances every day, attending a lot of meetings, dealing with grumpy bosses, and so on.
You can see the demo for our application by clicking the link below: https://youtu.be/06oEPp7oZdM
https://trello.com/b/aCB5CLqO/mds
Conceptual diagram:
UML diagram:
-
As a guest, I want to be able to navigate the app without having a profile, so that I can firstly form an impression about the displayed services.
-
As a guest, I want to be able to see the seller's contact details: e-mail, phone number; so that I can contact them.
-
As a guest, I want to be able to register, so that I can become either a seller(=provider) or a buyer.
-
As a guest, I want to be able to login, so that I can gain the privileges either of a seller or a buyer.
-
As a seller, I want to be able to display a details list of my attributes, so that I can present my; domain of activity, experience, work schedule, working city etc.
-
As a seller, I want to be able to provide personal details about me/my team, so that the buyer can get in touch with me/us more easily.
-
As a buyer, I want to be notified via a pop-up notification: when I log out and there are services left in my cart, and when the app notifies the sellers that I have purchased their services.
-
As a buyer, I want to have a shopping cart, so that I can keep track of the services that I want to purchase.
-
As a buyer, I want to have a history of my purchases, so that I can remember the level of satisfaction that the services gave me.
-
As a logged user, I would like to be able to modify my profile data anytime.
The project was developed using Andorid Studio, which has a Gradle-based building tool.
To build the project in an APK, go to Build -> Build Bundle(s)/APK(s) -> Build APK(s):
To verify if the app has been generated properly, go in the folder of the project and see if these 2 files have been added:
The project respects the Java coding standards (link: https://google.github.io/styleguide/javaguide.html): the names are sugestive, the classes name are nouns starting with upercase letters (e.g. LoginActivity, ServiceAdapter etc), method names are verb-noun combinations or verbs starting with lowercase letters (e.g. insert, checkEmailPass, getServiceById).
We used a singleton approach for database handling for each class, e.g.:
Bug 1
As any simple insert method, register (insert user in database) accepts the same email multiple times.
The solution was to create a method that verifies if an email is already in the database:
Presenting the method
- in Dao:
- in Repository:
- in View:
Bug 2
Every time someone wanted to use a method involving the database, they would get the following error:
The solution to this problem was to add .allowMainThreadQueries() to every database handling initialization:
Bug 3
We wanted to change the project's name using the methods presented on GeeksforGeeks (link: https://www.geeksforgeeks.org/different-ways-to-change-the-project-name-in-android-studio/).
Neither the first, nor the second method worked:
- First method:
- Second method:
The third method was a success:
The result is seen in the application's titlebar:
Bug 4
At first, there could exist more than one city with the same name (ignoring case sensitivity) in the database:
The workaround we came with was to capitalize each city name right before the city's insertion into the database would take place. This way, the program wouldn't insert another city with the same name (ignoring case sensitivity) when it would reach the function named nameExistOrNot:
Sample insertions after the fix:
We have also implemented automatic testing using JUnit5 in order to check whether the Getters and Setters function properly. One such example is shown below:
- Postolache Andreea-Miruna: https://github.com/postolache-andreea-miruna, mirunapami@yahoo.com
- Predescu Denisa: https://github.com/denisapredescu, predescu.denisa2001@gmail.com
- Sandu Raluca-Ioana: https://github.com/ralucsandu, ralucsandu01@gmail.com
- Sasu Alexandru-Cristian: https://github.com/alexsasu, sasualex1@gmail.com