Hi everyone and welcome to month #5 of the 2025 Year of Code! As we’ve done previously, this is the topic to share your May project, which has the theme of Mobile apps.
I’ll start things off with my project which is an app I call Pawz. It consists of separate projects for iOS and Android that displays random cat or dog pictures. More info about this is in the May Year of Code blog post.
Remember: To be entered in the drawings for this month’s prize and the grand prize at the end, you need to share your code, preferably on GitHub. Refer to this blog post if you need help with getting your project on GitHub.
For this month I have written a small app to record energy consumption on a iPhone.
For example, you can read your electricity meter every month and record it in the app. A simple chart shows the monthly consumption. There is still room for optimization here. Currently, two values per month are still required for the calculation. The data can be exported in CSV format using the Share button.
I think it took me most of the time to create a two-column table. It’s so much different than a desktop app. I’m not that familiar with creating Xojo mobile apps. But at least I learned something new.
I have just published a small update. Thanks to ChatGPT, the values for the diagram are now interpolated. It is now sufficient to check the meter reading once a month.
For this month, I have developed an iOS mobile application designed to facilitate the tracking of household items. While I am currently in the process of enhancing its functionality, the application’s GitHub repository can be accessed at the following link: [https://github.com/supcumps/HomeItems](https://github.com/supcumps/HomeItems) `https://github.com/supcumps/HomeItems
Here is my May project, Fridge Planner. We plan one month of meals ahead, print the schedule and attach it to the fridge with magnets.
Because we have a toddler, we only can plan things when she sleeps. And the last thing in the universe we want to do is opening a laptop and design a calendar in Pages or Word, when we have some spare time.
Now we should be able to do all this from our mobile:
If you find it useful, here is the code repository (I don’t know yet if I’ll end up publishing it). I’m sure there are lot of bugs and huge room for improvement. Please feel free to create feature requests or contribute:
I’ve finally wrapped up the basic application. I haven’t changed any of the iPad layouts yet. The project turned out to be a bit more extensive than I expected and is taking up a lot of my time, which I need to send to other projects. There are a few things I could improve, like adding alerts for warranty expiry and reminders to schedule servicing. One cool thing I learned is how to work with multiple tables in an SQLite database. I’ve also improved my programming skills by making this app, so I’d encourage others to give it a go as the year goes on.
I’ve create an MDM (Mobile Device Management) App. It allows you to provision an Android device and control it. I’ll add a desktop app to generate the QR for provisioning. I’ll also add some screenshots of the current system. I have had to remove proprietary code so it is a little bare in its functionality back to the server. I have only included the local capabilities. This project can be easily expanded. It is able to run in the foreground and keep a consistent TCP connection to a server. In my version I also added a periodic API check when the TCP connection is down.
It interfaces with an AAR Library with the following functions;
Device Admin Management:
Enable/disable device admin.
Handle password changes, failures, and expiration.
Manage lock task mode (kiosk mode).
Service Enforcement:
Enforce Wi-Fi, GPS, and mobile data activation.
Periodically check and maintain service states via WorkManager.
Permission Management:
Auto-grant permissions (e.g., location, Wi-Fi, accounts) for device owner apps.
Disable auto-revoke permissions.
Request permissions (e.g., READ_PHONE_STATE).
Policy Enforcement:
Apply policies from JSON (e.g., disable camera, set screen lock timeout, lock/unlock device, wipe data).
Manage kiosk mode (enter/exit).
Install/uninstall apps silently (device owner) or with user prompts.
Configure Wi-Fi networks.
Set password policies (complexity, minimum length).
Hide apps or restrict permissions.
Manage Factory Reset Protection (FRP) with Google account.
Restrict Bluetooth, USB file transfer, or system updates.
Clear notifications.
Lock/unlock screen rotation.
Enable/disable apps.
Enable USB debugging and authorize computers.
Open specific apps or set system theme (dark/light).
Device Information:
Retrieve device serial number (SN) and IMEI with retries.
List installed user apps, filtering MDM-installed apps.
Provisioning:
Handle profile provisioning completion.
Initialize reset password token.
Apply FRP policy during provisioning.
Kiosk Mode:
Launch and exit kiosk mode via dedicated activities (SAKioskLauncherActivity, SAKioskExitActivity).
Persist kiosk settings across reboots.
Installation Management:
Install APKs from URLs with progress tracking.
Handle installation completion (success/failure, user action required).
Manage concurrent installations with a latch mechanism.
Logging and Broadcasting:
Log events and errors to Xojo via broadcastToXojo.
Optionally log to a file.
Security:
Manage reset password tokens for unlocking.
Grant secure settings permissions (e.g., WRITE_SECURE_SETTINGS).
Network and System Settings:
Configure Wi-Fi via suggestions (API 29+).
Set system update policies (freeze or windowed).
Adjust screen timeout and keyguard settings.
User Profile Management:
Log user profiles.
Handle multi-user environments for app visibility.
Added a QR generator desktop app so you can load the app as an admin app via the welcome screen. Select the APK and it’ll generate the QR code. Tap the welcome screen on an Android device 6 times and it’ll open the camera. Scan the QR code and it’ll load the app as an Admin. Change the URL to where the package is located.
Thank you to everyone who participated by sharing your code in May’s Year of Code event. It was a slow start but great to see some new faces! All the participants who posted in this thread with links to their code were entered into a drawing and the winner is @Philip_Cumpston!
To participate in Year of Code, share a project related to each month’s programming theme. Remember, Year of Code is about learning from both the code you write for each month’s project as well as from exploring the code others have shared. You must share a link to your code, preferably on GitHub, be be eligible for prizes and Xojo fame.
We’ll announce the June project soon; stay tuned to the Forum, the Blog and our social media accounts for announcements.