About me

Adil Hanney

Software Engineer

About me

About me

I'm a software engineer with a bachelor's degree in Computer Science with Mathematics from the University of Manchester.

You may know me as the developer of Saber or from my work across various other open source projects. I love all things Flutter, but I'm starting to see the appeal of Rust too 🙃.

Find me on GitHub or LinkedIn.

COSMIC

Qt theming in COSMIC

February 2026

rust

February 2026

I contributed to the COSMIC desktop environment to allow apps written with the Qt framework to conform to the user's theme, including accent colors and light/dark mode.

Without these changes, a good portion of Linux apps would be stuck in their default light mode which can be quite jarring especially at night.

These pull requests have already been released as of COSMIC epoch-1.0.8:

See these screenshots below for gaudy examples of what the user's theme might look like, with a pink-themed dark mode and a green-themed light mode.

NoMoreBackground

NoMoreBackground

October 2025

flutter

October 2025

A tool to manage which apps can run in the background.

You probably don't need some random takeaway app doing anything in the background. And maybe you don't want that mobile game wasting your data when you're not using it.

NoMoreBackground gives you a list of your apps and lets you choose which of them you want having background permissions, all on one screen, to help you get the most out of your battery.

And the best part? When you're done, you can close NoMoreBackground and move on with your life. No need to "optimize" every day like some other tools: set and forget!

Check it out on GitHub or Flathub (the Linux app store).

Upscaled VLC

September 2024

bash

September 2024

A Linux-only wrapper around the VLC media player that automatically upscales videos to your screen resolution using technologies originally intended for gaming including AMD FidelityFXâ„¢ Super Resolution (FSR).

After installing, you can simply open any video file with the "Upscaled VLC" app, no terminal or expertise required.

View installation instructions on GitHub.

tower_war_patched

February 2024

dartapktool

February 2024

An experiment into how far an automated game modder can go.

In comparison to SamsungAppsPatcher, the patching method is far simpler. It looks through all the decompiled methods from the APK and replaces some of them, like making showAd do nothing or making isPremium always return true.

Because of this, the patcher can be (at least partially) effective on any game that contains ads. But in the intended game, the patcher can do even more like reducing the price of chests and upgrades and increasing the quality of the randomized rewards.

See instructions on using the patcher on GitHub.

Saber

Saber

July 2022

flutter

July 2022

Saber is the notes app built for handwriting. It was my first non-trivial Flutter project, and I've been working on it since July 2022.

I'd been writing digital notes since 2020, and the only app that suited my needs was Samsung Notes. Unfortunately, it was only compatible with Samsung's Android devices and select Windows devices. Additionally, it didn't work on Samsung's Android devices with custom firmware, such as LineageOS, which I was using at the time on my Samsung phone. I wanted to be able to access my notes on all my devices, regardless of the operating system or manufacturer.

I'd been wanting to make my own notes app for a while and in the summer holidays of 2022, I restumbled upon Flutter and finally decided to give it a go. Nowadays, Saber has likely* tens of thousands of users, and it's advancing at a rapid pace. (*I don't directly track users, but some partial data is available from various sources.)

Developing Saber was (and is continuing to be) a huge learning experience for me. I've successfully deployed custom GLSL shaders, continual performance optimisations, CI/CD workflows on GitHub Actions, backwards compatibility for new features, adaptive and responsive UIs, reusable packages, and much more. I also made the Saber landing page (GitHub) using Next.js's Static Site Generation (SSG).

Saber is available on all major platforms; find out more at saber.adil.hanney.org or on GitHub.

Ricochlime

Ricochlime

August 2023

flutter

August 2023

Ricochlime is a satisfying slime monster shooter game. The name was originally a portmanteau of "ricochet" and "slime", but I've since had to switch out the graphics for licensing reasons so there aren't any slimes anymore! I developed Ricochlime to experiment with making a game in Flutter using the Flame game engine.

I designed this to be a simple, easy, satisfying game to play. I often like to have something to do with my hands while I'm focusing on something else, and I find that games like this are perfect for that. The music is disabled by default and there are no ads (anymore).

Ricochlime is available on all major platforms and online. View more on GitHub.

Timing Flutter

Timing Trainer

June 2022

flutterpwa

June 2022

Timing Trainer presents you with a blinking square and you guess the time between blinks. As you play, you'll get better at recognizing sub-second intervals.

I first created this game/trainer as a PWA (progressive web app). Later, since it was a very simple app, I made a cross-platform version as my first foray into Flutter.

The Flutter version is available on all major platforms and online. View more on GitHub.

Blackboard Theme

Blackboard Theme

May 2022

scssjs

May 2022

My BlackboardTheme project encompasses a collection of (unofficial) tweaks and improvements to the University of Manchester's websites including Blackboard. It does this with the browser extensions Stylus for styles and Tampermonkey for scripts, which inject my custom CSS and JavaScript into the pages. I've since moved to bundling everything into a single easy-to-install browser extension.

This project was originally only intended to apply Google's Material Design to my university's Blackboard website, but as it grew, I began to theme more of my university's websites and then started adding small scripts to add features or boost usability. Every time I encountered an issue, or saw something that I found difficult to use, I would try to fix it.

One of the most improved areas is the video player. The course content videos were difficult to use as you had to use the mouse to click on the buttons to play/pause, click somewhere on the razor-thin progress bar to rewind, and go through a series of popups and dialogs to configure captions at the start of every video! I emailed the university about this, but didn't get a response, so I decided to fix it myself. I added the standard keyboard shortcuts for play/pause, rewind/fast-forward, volume control, captions, and fullscreen. I also set sensible defaults, including a larger font size, better fonts, and a smaller width so your eyes don't have to move as far to read the captions. I also changed the upscaling algorithm to favour sharpness over smoothness, as the fuzziness of lower quality videos was harder to read.

Another notable area is the course selection screen. The default layout was a compacted list of courses with very long names, which made it difficult to find the course you wanted. I added a grid layout with course cards which stay in the same position over time to help you remember where your courses are. I assigned each of my modules and departments an image which is displayed on the card, and left instructions on how to change the image for your own courses. I also added a feature that dims courses from semester 1 when you're in semester 2, to help you focus on the courses you're currently studying.

It's hard to describe all the changes I've made, so I recommend you check out the GitHub repository which has a more complete list of features, before and after screenshots, and instructions on how to install it.

Nonogram

Nonogram

May 2022

flutterpwa

May 2022

Nonogram (wikipedia) is a puzzle game where you fill in squares on a grid based on the row/column clues.

I created this web app after enjoying the Android 10 Easter egg and my success with Quintle. You can find it at adil.hanney.org/nonogram.

I later made Super Nonogram (available online) which is a rewrite of this app in Flutter with some new features.

One of the game modes in Super Nonogram is procedurally generated puzzles that get harder as you progress.

The other game mode is where you can input any keyword and it will generate a puzzle based on that. It does this by interacting with the Pixabay API to get images based on the keyword and then converting them to puzzles.

Social

Social Media Demo

April 2022

pwa

April 2022

This was a working (though inefficient) social media demo I made after I was frustrated by not being able to access my chats across all my devices.

I wanted to make a proof of concept that it was possible to make a social media app completely in the browser, but that acted like a native app when installed as a PWA.

It had a Snapchat-like layout where you could swipe between the camera, chats, and feed. I only implemented the chat functionality and used it to chat with my friends for a while. I tested it with lots of cat pictures as you can see in the screenshots!

Quintle

Quintle

February 2022

pwa

February 2022

Quintle is my reimplementation of the viral game Wordle from before it was acquired by the New York Times.

The design was inspired by neumorphism, and it's playable offline as a PWA (progressive web app).

The word of the day used to match the official Wordle word, but they've since moved to an API approach where the word is fetched from the server, so I've stuck with the last publicly available word list.

On top of the core functionality, I added a few features:

  • The ability to replay previous days' words
  • A mode for e-paper devices that uses greyscale colours and improved contrast

Quintle is available to play online or through the Google Play Store.

Fabrik

Fabrik

January 2022

js

January 2022

A demo of the Forward And Backward Reaching Inverse Kinematics (FABRIK) algorithm.

In short, it's a way to calculate the joint positions of a chain of bones to reach a given point in space (like your mouse cursor).

I made this to experiment with the algorithm before using it for procedural animation in my A-Level Computer Science project (a multiplayer shooter game).

In the demo, you can customize the number of bones, their length, and whether they're constrained by gravity. You can try it out online.

Clocks

Clocks

November 2021

js

November 2021

A page that contains every analogue clock face.

Every minute, the page will pan over to the next clock face for the current time.

You can try it out online.

Zombies

Zombies

November 2021

python

November 2021

A top-down zombie shooter game I made for a Python coursework in university, featuring auto-save, a leaderboard, a "boss key" to quickly replace the screen with an Excel spreadsheet, and cheat codes.

You'll need Python installed to play.

loffice-365

loffice-365

October 2021

bash

October 2021

An Office 365 integration for Linux that I took over maintaining.

You could open an Office file on your computer, and loffice-365 would upload it to OneDrive to edit with the Office 365 web apps. Then when you're done, loffice-365 would download the edited file back to your computer.

loffice-365 used a tool called nativefier to make the desktop wrappers around the Office web apps. Nativefier is now unmaintained so loffice-365 could no longer be updated.

You can view the source on GitHub.

Samsung Apps Patcher

Samsung Apps Patcher

June 2021

bashapktool

June 2021

A way to get Samsung's wearable apps to work on a rooted phone.

Rooting grants you superuser access to your phone, which can extend its lifespan and unlock new functionality. But Samsung is markedly against this and completely blocks you from using your wearable devices, like smartwatches and earbuds, if your phone is rooted.

SamsungAppsPatcher is a script aiming to bypass this artificial restriction, letting you use the devices you bought again.

It decompiles the relevant apps, patches them, and recompiles them all in one command. Patches include disabling Samsung Attestation Key (SAK), removing Knox and root checks, bypassing certificate checks, unblocking Huawei devices, unblocking tablets, and more.

The project came to an end after I moved on from Samsung devices (in part due to these practices), and since this approach stopped working after they switched their smartwatches from Tizen to Wear OS.

Collatz

Collatz

June 2020

June 2020

An online tool to check the Collatz conjecture against any number.

The Collatz conjecture is an unsolved problem in mathematics claiming that if you apply two simple operations to a number repeatedly, it always ends up at 1.

I made this as part of a presentation I made for A-Level Maths. Check it out online