HomeNET, The 4th Year Project
For 4th Year (BTech year), Software Development students had the choice of doing a research based project, or a software development project. I chose to do a software development project because it could be the last year I have freedom developing software – I will enter the workplace, or progress to doing a Masters degree in 2018. What makes 4th year more exciting than the 3rd year project is that everyone works solo – there are no software development groups, like 3rd year. If you can carry yourself from start to end in 4th year, with minimal issues, you did everything right.
Like my 3rd year project, I wanted to do something exciting, challenging and rewarding. It was a struggle coming up with something practical. I thought of a grocery assistant app, but this idea had one major flaw – getting vendor product listings wouldn’t be so easy. After much pondering and consultation with my supervisor, I decided on creating a social networking application that would be like Facebook and Twitter – I call this baby HomeNET.
HomeNET is a social networking application built for Android smartphones and tablets. This application targets Android KitKat (v4.4.4 – API 19) and upwards. Development started end of February and, at the time of writing this post, I am glad to say it is nearing completion (for this year).
HomeNET defines groups of users into Houses. The Administrator accepts and/or rejects requests from other users to join their house(s). Users can see content shared by other users in the house(s) they are subscribed to. In addition to sharing content, users can send announcements (broadcast messages) to all members in the house, and private message other members in subscribed houses. When users create new posts, announcements and messages, push notifications are sent to relevant parties. To be honest, I had fun building this application – it allowed me to push boundaries on what I know about Android Development.
Under the Hood – The Brief Details
HomeNET comprises of a mobile application, a cloud server, a Web API, and a database server. The mobile application is built using Android Studio, which is a mix of Java and XML. The Web API is built using ASP.NET Core 1.0, on Visual Studio 2017. The cloud server is hosted at Host1Plus‘s Chicago data center – at $35.00 USD per month, you get a cloud server that has 6TB bandwidth, 4GB RAM, a dual core Intel Xeon Processor and Windows Server 2016 Standard Edition. I chose to go the cloud server route because it is cheaper to have one outside South Africa, and that there aren’t many hosting companies that support ASP.NET Core 1.0.
The Mobile Application – The Details
As mentioned earlier, the mobile application is built using Java and XML on Android Studio. Apart from the long build times, I had fun building this application. I had more plans, however, due to time constraints, I had to cut them out of the plan (hopefully I add these sometime). My mobile application looks good, feels good, and packed with features thanks to the following 3rd Party libraries which made life easier:
- MPAndroidChart – This is a beautiful, well documented and supported library for creating various graphs. In my application, I used bar graphs due to them being easy to setup, and the data I was wishing to present not being too complex. The bar charts were used to present overview information to the user (how many posts they have made, how many announcements they made, and so forth… nothing too complicated).
- Retrofit 2.0 – This is a powerful, easy to use library for consuming Web API’s. What I did different with this library this time was sending and receiving pictures through the Web API, and passing the JWT token the Web API. All of this was easy to do, thanks to the well written tutorials at FutureStud
- BottomBar – Another great library for creating the bottom navigation bar with ease. In 2016, I struggled getting library to work on my project (I don’t know why 🙁 ). This time round was straightforward – adding the bottom bar and customizing it was a piece of cake.
- Realm – I used this library to store temporary information the application may use – when the application starts for the first time, I need to get a list of all countries and API keys from the Web API. Initially I was using SQLite to store this data, but I decided to switch to Realm because it was easier and cleaner to use (No More SQL 🙂 )
I also had plans of adding push notifications to my project. When the year started, I wasn’t too sure how this would be done. Doing a bit of searching on the internet pointed me to Google Firebase Cloud Messaging. My heart was on fire – incorporating this into my Android project was a piece of cake. Setting up my API so it can call Google’s FCM API and send the data was easy, using RestEase. At the time of writing this post, I am busy making small tweaks on the mobile application so the user can see specific information about a notification, then go to their news feed.
I had fun creating this mobile application – seeing everything come together was the best part.
The News Feed and House Manager
When a user opens the mobile application, the system runs a couple of checks – if the user has houses, is subscribed to houses, and so forth. If the user owns a house but doesn’t have subscriptions to other houses, they are taken to the House Manager – where they can view users in the house, manage posts, and house details. In other cases (where the user is subscribed to one or more houses), a user is taken to their news feed. The news feed has all posts created by other users in the house(s) a user is subscribed to. Users are able to like posts, dislike posts, and comment on posts. Once a comment has been registered, the owner of the post is notified.
The Photo Gallery
Initially I planned on creating functionality that gave users the option of creating photo galleries, but this had to be cut due to time constraints. Instead of creating a full blown function for this, a photo gallery is generated by selecting posts that have pictures. When a user creates a post, they can either specify text alone, or add a photo with text. Photo’s are compressed before they are sent to the Web API for further processing. The Web API renames the file and stores it outside the application’s root directory.
Announcements are broadcast messages sent to everyone subscribed to. Users get push notifications each time a new announcement is made to one or more houses they are subscribed to. Upon receiving the notification, users can add comments to the announcement, if they wish to. (See the screenshots at the end)
Users have the ability of sending private messages to other members one or more houses they are subscribed to. Push notification is sent to the recipient once the message has been sent. At the moment, the conversation thread is limited to the sender and receiver. Replies can be added to messages. (See the screenshots at the end)
Reporting on the Mobile Application
Users can view brief reports on the mobile application. When a user wishes to view their profile, they can see total posts, comments and announcements they have made through all the houses they are subscribed to. Users are also able to view a brief report on house(s) they are subscribed to – total members in the house, total posts and so forth. These reports are presented in the form of a bar chart, thanks to MPAndroidChart.
The Last Few Days
At the time of writing this post, all core functionality had been completed. I am spending the last few days touching up some parts, fixing small issues, and compiling documentation for the final submission. I had a lot of fun creating this app for my 4th year project… hopefully that 75% pops for this project.
Below are some screenshots from the mobile application:
This video was created sometime in August. Changes have been made since then. This does not represent the complete product.