Android App Programming
I started learning to code basic Android apps in 2013. During which, I have released some apps on XDA and ventured into the open-source world.
I eventually found myself developing for the Xposed Framework. (Context: The Xposed Framework gives developers an interface to hook and modify methods and functions at runtime, including system apps, using Reflection). I made quite a number of Xposed modules, mostly experimenting around with Java and how object oriented programming is done.
My Android-Java work can be found by searching my alias “zst123” on Google. XDA Developers forums has also acknowledged my work by giving me the ‘Recognized Developer’ title. (As on my profile)
Taking a look back
Taking a look back at my Xposed module development from mid 2013 to end 2014, this has built up my programming skills significantly. Developing modules for this framework has taught me how Reflection in Java works and deepened my knowledge in the structure of object oriented programming.
As a result of the fragmentation of Android OS, every devices’ OS may have slight differences from one another, even though they are running the same version. These differences are especially so since I am modifying the system code via Xposed Framework. With this, I learned quite a bit of blind coding and workaround solutions (as in XuiMod and XHaloFloatingWindows).
The frustration during post-mortem debugging taught me the unseen hard work put in by developers. This made me aware of my ambiguity in communicating (eg. steps on how to reproduce a bug). In essence, I will take note to relay information in a more concise and detailed manner.
What’s next for me?
I am in the midst of deepening my Java programming skills. I have yet to do projects that utilize test-driven development, concurrency and, with the new Java 8 APIs, functional programming with data.
As mentioned as examples above, these are my most notable projects:
This is a pretty thorough video walkthrough of the features present in my module.
This module has grown to be known as the “all-in-one animation pack”.
This started out as a port of several animation-based mods present in custom ROMs (such as ListView Animations, AOKP Animation Controls, and Windows Transitions). At that time, I owned a Chinese phone which had no custom ROMs. Hence, I decided to port these features to an Xposed module.
The AOKP Animation Controls was also originally for Android 4.3 and above, but due to high demand from my users, I decided to backport it to Android 4.0 and above
For my future reference, these are the GitHub commits of the backport:
However, as the module grew, I eventually invented some of my own features as follows:
Seconds in StatusBar Clock
It can be customized to include date, text and so on. Colors can be set via toggling the HTML mode
There is also a mode to have a multiline clock (As shown in the 1st photo)
Custom IME Animations,
Custom Toast Animations,
Custom Notification Ticker Animations
I noticed that certain custom ROMs have custom animations for the keyboard. This made me wonder why there wasn’t an IME Animation like there is for listview animations.
In the end, I went on to create my own implementation for IME Animations. I asked myself what other aspects of the system could be animated and
IME Animations Video:
Notification Ticker Animation Video:
As a result of my work, some notable custom ROMs have ported it from Xposed into their own ROMs
Please also take a look at the XDA Developers thread for the promotional banner. It will help you to understand the context of what I write below.
This is in fact, this is my largest open-source Android project to date. It was created in August 2013, shortly after I learned Java. Hence, the code contains a lot of code which does not conform to convention *cringes*.
Originally it was a port of HALO popup window from ParanoidAndroid, as shown in Image #1 below, to all ROMs using Xposed Framework.
I am quite impressed, though, I could create something so complex without formally learning OOP. Right now (2015), as I look back, I had utilized OOP practices without myself even knowing it. I think, the best way to learn something is by experimentation and experience. This way, we will be able to understand the patterns and reasons behind certain results.
After some time, I decided to venture further and implement some additional feature. I added my own implementation of movable and resizable windows. It proved to be so successful that many custom ROM teams had kanged it into their own ROMs.
Sadly, because of that, I saw a drop in the users as many people started using these ROMs (natively implemented code is always faster and clean than doing so via Reflection in Xposed). With this, I thought hard of ways to be more unique. I got inspired by Windows AeroSnap and implemented it in. To top it off, Samsung’s multi-window slider will also be an interesting twist. Here is a user’s video on the result: https://www.youtube.com/watch?v=oWALsil6imA
Unfortunately, I stopped developing this module partly to focus on my O Levels and also the fact that Google was adding native multiwindow to Android M and Android N. Also, with such a drastic change to the system code from Android Kitkat to Marshmallow, my module’s core had to be completely rewritten.
Submitted by a user of XHFW, showing that it can be run on HTC stock ROM too.
A promotional screenshot I made after I implemented the Samsung-style multi-window divider. Its color can be customized.
You may see these videos on how it works:
A screenshot showing 2 apps running side by side.
Another of my promotional screenshots. This one shows multiple apps in individual windows. The windows can also be resized and maximized.
This is a rather comprehensive written guide on how to use my module:
This is a new concept I have thought of. Despite my hard work though, this project proved to be a failure and never caught much attention. This was due to many variations in Android ROMs (including SD card restrictions in Android 4.4 & multi-user SD card handling in Android 4.2+)
For my future reference:
My Other (Android Java) Projects?
I have many other projects worth mentioning, but this page will become too long.
A short description of a couple of them:
Last updated in 2015