Everyone hates admin, and loves an app that takes all the pain out of filling in details on forms. CubeZoo was commissioned to create just such an app to make the RICA registration process quicker and easier for people buying new SIM cards.
With every SIM card issued in South Africa, the RICA process is mandatory to enable the card to be activated. This is generally done in store or by field agents who sell SIM cards on behalf of the networks, taking customers’ information and using an automated system to activate the SIM card. The most common way to do this is via USSD, but this can take up to 7 minutes.
CubeZoo used Flash to create an almost seamless process to RICA new customers in under 45sec.
CubeZoo’s first step was to convert a normal device running Android software into a barcode scanner. This is generally an easy task, but this scanner needed to be seamless so as to be able to scan one or multiple SIM cards without having any human trigger or confirmation intervention.
After developing, CubeZoo tested, analysed, and tested some more to ensure the app was performing the way it needed to. Unfortunately, the CubeZoo team had done their job too well and the barcode processor didn’t wait for one scan to be completed before starting on the next one.
In order to shorten the queue of frames that needed to be processed, and to save some battery power and keep the CPU from running at maximum capacity, the dev team decided to implement some logic that would only feed frames to the processor after the previous frame has been completed. This keeps the processor’s queue a lot shorter with almost no difference in barcode recognition and read time.
After implementing Firebase ML Kit Vision to allow the app to recognise and read bar codes via the device's camera, the team noticed that the thread that handles the barcode processing was running at full capacity even after the camera was no longer being used. This slowed the device down significantly, especially on older devices.
This was because of the fact that the processor’s multithreading capability was being used. Normally this won't be a problem, as multithreading is great for doing jobs like processing frames in the background while the user continues to use the app. In this case, however, the Firebase ML thread stayed alive until it completed its queue of frames to process.
While this is normal, and exactly how threads have been designed to work, it caused the challenges that required the additional logic to be implemented. With that in place, the app was just as quick to recognise and read a barcode as it was before, with the added benefit of increased battery life.