Internet Speed Checker Project - JimmyBlundell/internet-speed-checker GitHub Wiki

Internet Speed Checker

Description:

Everyone is using the internet nowadays and it is becoming vastly common in our day-to-day life. As the use of the internet is increasing, people want to ensure that they are receiving the connection speeds that they are paying for. Additionally, the usage of the internet with smartphones is becoming nearly universal, especially with advancements in the form of 3G and 4G, and now 5G networks- oftentimes, using a smartphone is faster and easier than one’s home connection. It is imperative that phone users be able to check their speeds to ensure the service they are paying for is not only meeting their needs but also verifying the service has kept the contracted speeds. In addition, as many people still currently do not have unlimited data plans, we wanted to add a feature that showed users their total daily usage across both WiFi networks and cellular data so that they can adjust their usage if needed.

Objectives:

Create an App that has the following features:

  1. Current Connection Speed Test
  2. Monthly Internet Usage Details
  3. Speed Test Charts
  4. Battery Optimization while the app is running in the background
  5. Admob Integration for Google Ads
  6. SQLite integration for local storage to display monthly usage details and test results
  7. Dynamically rendered graphs showing the output of upload and download speeds both during the test and over time if multiple tests are run.

Approaches/methods:

Our primary methods first revolved around creating the UI. This was handled with input from all teammates as we discussed how our application should look, drew up mock-ups, then implemented the UI. In conjunction, we worked on the backend functionalities such as actually getting the connection speeds, as well as setting up SQLite within our application so that we could store the history of tests and data usage. As we would mark complete these tasks, we would then work on integrating them within the UI itself primarily using Adapters (essentially a bridge between the data itself and the UI components) as well as making calls to the database when displaying items in lists (such as test history and data usage).

Workflow:

We did our best to split up the tasks into small chunks that everyone could manage. Of course, there was plenty of discussion across the team whenever an individual needed help implementing certain features. We held weekly/bi-weekly meetings, depending on everyone's schedules, to stay up to date with progress and add any new tasks we deemed necessary. Additionally, there was plenty of chatting on our Discord channel through the week for times we could not meet or for quick questions. Per the standard, when tasks were complete, we would merge code and resolve any conflicts that arose.

Learning outcomes from the lesson

This project gave us an excellent insight into how to develop user-friendly apps that are fully-connected from front-end to back-end (SQLite in our case) and have UI features that are rich and easy to navigate. We kept everything looking as clean as possible and also got to learn how to get graphs dynamically rendered on the page in real-time based on data we were gathering. Through discussions with our professor, we learned further how we could add on to the app to make it even more useful to users, such as providing a summary of data usage and test statistics for each month, rather than strictly listing all the data out in a list. While we feel we made a sufficient application, the learning lessons were great and we have an excellent idea of how to move forward and improve this project such that we could showcase it to employers.

Issues with the lesson

Our primary issues in the beginning largely revolved around getting the speed tests to actually work. Eventually, we were able to gather the logic to send and receive packets to a particular host and use that for calculation, which worked wonderfully. There, of course, were friendly design disagreements towards the beginning stages as well. However, this helped us in seeing potential solutions from different angles, and I believe in the end we did a great job of rounding together and settling on design and architecture decisions thanks to everyone's input.

Screenshots:

Now for some screenshots of our application!

Here we say the main screen of our application. This gives the user a history of all their data usage over the past 30 days, both between cellular and WiFi data. If users do not have unlimited data, they could use this feature to track how much data they use over cellular networks and either adjust accordingly or switch plans.


Next up, the navigation bar which allows the user to access different features of the app.


This page is the initial page for running the speed check. When the user clicks to run a test, you see the following:

This was after a test was already run, but you see the graph views filled out above with upload and download speeds, as well as graphs that correspond to how their speed differed over the time of the test.

We give users a few ways to to visualize their internet speeds. In addition to the graph shown in the previous image, we have another graph that shows internet upload and donwload speeds for tests ran over the last 5 minutes:

The green spikes you see are the speeds detected for two respective tests.

Next, we give users the option to see a history of their tests ran and what the results were. With this, I only have ran 3 tests on the emulator so only 3 results show up, but it will store data for the entire history:

(For what it's worth, the UI does not cut the date off when using an actual Android device. It only seemed to happen in the emulator).

And lastly, the video going over a demo of our application with a bit of insight into the code:
Internet Speed Checker Demo

⚠️ **GitHub.com Fallback** ⚠️