From one prompt to a signed, open-source app running on my POCO M8 in a handful of iterations. Here's what worked, what broke, and what I'd tell anyone building their next app with an AI.
I've always liked the iPhone's Dynamic Island. It's a small black pill around the camera that comes alive when something is happening: music, a call, a timer, a delivery on its way. My phone is a POCO M8 running HyperOS, and it has a perfectly good punch-hole camera doing nothing.
So one Monday I typed this into Claude:
"I want to create an app named Dynamic Island for my Android phone POCO M8 which can deliver the same experience as the iPhone Dynamic Island or what Android Pixel phones provide. Research the features it should carry, best of iPhone and Android, and make it a useful tool for users to get a glimpse of running processes or a message someone wants to preview."
By the end of the day I had a signed, open-source app installed on my phone, with a GitHub repo, a website, and this story. I didn't write the Kotlin by hand. My job was the part AI can't do for you: using the app on a real phone, noticing what felt wrong, and saying so clearly.
Here's how it went, iteration by iteration.
Iteration 1: research → architecture → a real APK
Claude didn't start by writing code. It started by researching:
- what Apple's island shows (calls, music, timers, Face ID, AirPods, charging, Maps, screen recording…) and how you interact with it (tap opens, long-press expands, two activities split into a pill and a bubble)
- Google's Android 16 Live Updates (status-bar chips for rides, deliveries, navigation)
- Xiaomi's own Hyper Island in HyperOS 3, which reportedly isn't available on some budget Redmi models. Good reason not to depend on it.
- my phone's specs: a 6.77″ 120 Hz screen, punch-hole camera, Android 15
Then it chose an architecture that works on stock Android without root:
- a NotificationListenerService reads notifications and media sessions (messages, calls, timers, progress, music)
- an Accessibility overlay window is the only way a normal app can draw above the status bar and lock screen
- a small in-memory repository connects them to one renderer that morphs the island
It also set up an Android build toolchain in its sandbox, compiled the app, ran lint and handed me an installable APK. That first build already had music controls, calls, timers, navigation, message preview with inline quick reply (something neither iPhone nor Pixel does), system glimpses, and a few "island tools" like a flashlight and a pinned note.
Iteration 2: Android said no
I installed it and hit two walls straight away:
- Play Protect blocked the install.
- The notification-access toggle was greyed out: "Controlled by restricted setting."
I asked Claude to "make it secure so Play Protect passes and it isn't restricted." Its answer was honest: no app can switch off either protection. They're Android's defences against malware installed from a file, and only the phone's owner can lift them. Instead of a hack, it did the responsible thing:
- signed the app with my own release key (not the shared debug key)
- removed permissions malware tends to ask for (see-all-apps, ignore battery optimisation)
- confirmed the app has no internet permission, so it can't send anything anywhere
- added a clear "here's what this access is used for" screen
- put the official unlock steps (App info → ⋮ → Allow restricted settings) into the app's first screen, with an ADB fallback
Second install: it worked.
Iteration 3: "Only the call demo works"
The island showed up for calls and for nothing else. I reported exactly that, and it was the key clue. Calls were the one type of activity allowed to show even in full-screen mode. The island's "hide in full-screen apps" check asks Android whether the status bar is visible, and on HyperOS an overlay window is always told it's hidden. So the app thought I was always watching a video.
The fix: turn that guess off by default, only trust it after it has once seen a visible status bar, and add a Diagnostics card to the app that shows the service state, the last notification and why the island is hidden. From then on, one screenshot replaced guessing.
Iteration 4: "It's a big black block"
It worked, but the pill was huge. HyperOS reports the camera cutout as a rectangle as tall as the whole status bar, and the code padded that. Claude rebuilt the sizing from what the phone actually reports (the status-bar height plus a sanity-checked camera size), so it adapts to any phone and to the Display size setting. While we were at it I asked for customisation: width, height, roundness, colour, transparency, glow outline.
Iteration 5: feature parity, and the feature I really wanted
I pasted a MacRumors guide to the iPhone island and said "implement these." Halfway through I interrupted with what I actually wanted: "an option to preview the content of a notification instead of directly opening the app."
Both landed in one build:
- Tap to preview: tapping shows the whole message inside the island, with Reply / Mark read / Open buttons
- an unlock animation (Face ID-style), earbuds + battery, payment confirmations (Google Wallet and UPI apps like GPay, PhonePe and Paytm, which matter in India), Do Not Disturb, offline / back online, hotspot, NFC, a red REC timer for screen and voice recording, and live updates from Cricbuzz, Uber, Ola, Zomato, Swiggy, Blinkit and Zepto
- an honest list of what can't be done on Android (Apple Watch unlock, AirDrop, Find My…)
Iteration 6: invisible at rest
My last design ask: at rest it should be exactly the size of the camera hole, so you can't see it, and it should appear for any notification. I also pointed Claude at a popular island app on the Play Store for inspiration.
Pixel-exact matching is something only your own eyes on your own phone can confirm, so Claude added a Calibrate mode: the resting island turns red, you slide it until it just covers the camera, then turn calibration off and it disappears. The island now grows out of the camera and shrinks back into it. From the other app's ideas it added themes (iPhone Black, Glass, Light, Rose, Ocean, Lavender), per-app on/off and animation speed.
Iteration 7: open source
Finally: "make it public and open source, for any phone, with a website." Claude cleaned the repo (no private notes, no signing keys), added a brand-aware setup screen (Xiaomi, Samsung, OnePlus, OPPO, realme, vivo and more, with links to dontkillmyapp.com), wrote the install guide, privacy policy, architecture notes and contributing guide, rendered illustrations of each island state, built a GitHub Pages site and set up CI.
What I learned about building with an AI pair-programmer
1. Report symptoms precisely, not solutions. "Only the incoming-call demo shows" pointed straight at the bug. "Make it work" wouldn't have.
2. Ask for diagnostics early. The on-screen Diagnostics card turned every later round from guessing into reading.
3. The phone is the test lab. Claude could compile, lint and check everything in its sandbox, but no emulator replaces your hand on your phone. Budget for that loop.
4. Expect honest "no"s. When I asked it to get past Play Protect, the useful answer was "you can't, and here's what to do instead." That made the app more trustworthy.
5. Platform quirks are the real work. Restricted settings, battery killers, oversized camera cutouts, overlays that never see the status bar. None of this is in tutorials. An AI that can research and adapt quickly beats one that only writes fast.
6. Your judgment is the product. "It's a big black block." "Preview before opening." "Invisible at rest." Every one of those came from using the thing. The AI turned taste into code, and the taste still had to come from me.
Try it, fork it, make it better
- Website: https://ajitpal.github.io/dynamic-island-android/
- Source + APK: https://github.com/ajitpal/dynamic-island-android
- Works on Android 12+ phones with a punch-hole or notch. No ads, no tracking, no internet permission. MIT licensed.
If you try it, open a Device report issue with your phone model. That's the fastest way to make it great on every Android phone. And if this story nudges you to build that app you've been putting off: open a chat, describe what you want, and start iterating.
— Ajit Kumar Pal
Top comments (0)