Soosu Studio Blog

Useful apps,
better days.

Practical notes for getting more from the apps you use every day.

Latest field note FlipClock: Turning a Foldable's Inner Screen into Ambient Light Read article

What we write about

작은 도구를
더 잘 쓰는 방법.

The Soosu Studio Blog is an English resource for Android users who want clear explanations of our apps. Each article focuses on one useful workflow: what the app does, when it helps, and how to get started.

Field notes

앱을 더 잘 쓰는
실용적인 기록들.

기록하고, 집중하고, 이동하고, 챙기는 순간까지.
각자의 하루에 맞는 사용법을 전합니다.

AI-generated concept illustration of a foldable phone showing a cover-screen clock and casting warm light from its inner display onto a bedside table
FlipClock Published 5 min read

FlipClock: Turning a Foldable's Inner Screen into Ambient Light

A clock on the cover screen, a soft glow from the inner display. How we brought an iPhone Duo StandBy-inspired idea to supported Android foldables, and why the light does not stay on continuously by default.

FlipClockFoldable PhonesAmbient Light
Download Read
A phone beside a bedside lamp with a quiet notification reminder ready for the morning
NotiAlarm Published 6 min read

NotiAlarm: The Android 14 Upgrade That Turned Alarms Into Banners

A wave of missed-alarm reports traced back to a permission Android 14 stopped granting by default. Here is what we found, the diagnostics we built afterwards, and why we now refuse to call a rule an alarm unless we can prove it is one.

NotiAlarmNotificationsAndroid Update
Download Read
A package label being scanned at a kitchen table beside a handwritten shopping list
QRScanner Published 4 min read

QRScanner: Deciding What Not to Keep

Scan history is easy to build and hard to bound. Which payloads never reach it, how repeated scans of the same label collapse, and why the result screen became a proper step rather than a thing that flashes past.

QRScannerBarcode ScannerScan History
Download Read
A real wardrobe with a jacket, folded clothes, and a phone showing an outfit note
Wheron Published 5 min read

Wheron: Deleting a Jumper Deleted Six Months of Outfits

A garment is referenced by every outfit that used it, so removing one row quietly removes history that has nothing to do with it. What we changed about deletion, and what outfit history is actually good for.

WheronDigital ClosetOutfit Planning
Download Read
A real study session with a timer, pencil, and unfinished notes on a wooden desk
Focus Timer Published 5 min read

Focus Timer: The Session Ended and Nobody Was Told

Android 13 made notifications a runtime permission, and a timer app whose entire output is a notification found out the hard way. Plus the stopwatch mode we added for work that does not fit a preset.

Focus TimerPomodoro TimerProductivity
Download Read
A handwritten phrase list, keyboard, and phone ready for a reusable text shortcut
Text Shortcuts Published 5 min read

Text Shortcuts: Android Turned the Service Off and Told Nobody

An accessibility service can be disabled by the system, by an update, or by a settings review, and there is no callback for it. Detecting that, plus variables, selected-text replacement, and backing up a library full of personal details.

Text ShortcutsText ReplacementAndroid Accessibility
Download Read
A screenshot with part of the content blurred before sharing
ONEShot Published 5 min read

ONEShot: A Blur You Can Undo Is Not a Redaction

Redaction tools have a specific failure mode - the hidden data is still in the file. Two well-known Android bugs made that concrete, and they shaped how ONEShot's blur is applied, flattened, and written to disk.

ONEShotScreenshot EditorPrivacy
Download Read
A rainy evening bus stop with a route map and a phone ready for the next arrival
BusanBus Published 6 min read

BusanBus: One Alert Concept Was Three Different Features

Rebuilding the interface in Compose forced us to look at the alert code, where a single vague notion of an alert had been quietly doing three unrelated jobs badly. Plus what Android 14 foreground service types meant for alighting reminders.

BusanBusBusan TransitAndroid Update
Download Read
A handwritten journal, a phone with a photo, and evening light on a small table
ONEDiary Published 5 min read

ONEDiary: The Formatting Button That Ate Korean Syllables

Adding a markdown toolbar to a text editor means writing into a field while an input method is mid-composition, which is a good way to duplicate or drop characters. Plus what we do when the same entry is edited offline on two devices.

ONEDiaryJournalMarkdown
Download Read
A handwritten event message beside a wide LED display and a phone on a table
SmartLED Published 5 min read

SmartLED: A Preview That Lies Is Worse Than No Preview

The editor preview and the full-screen banner were two separate pieces of rendering code, which meant they disagreed - and the one you checked was not the one your audience saw. Plus what sharing a message as a link actually involves.

SmartLEDLED DisplayAndroid Update
Download Read
A paper receipt being scanned beside a notebook and a phone on a work table
DocScanner Published 5 min read

DocScanner: There Is No Single OCR Model for a Bilingual Receipt

On-device text recognition ships as separate models per script, so a receipt with a Korean address and an English product name has no single right recognizer. What we do instead, and the rotation bug that made everything look broken first.

DocScannerOCRPDF Scanner
Download Read
A paper boarding pass and phone beside a passport and travel notebook
PassWallet Published 5 min read

PassWallet: What Is Actually Inside a .pkpass File

A pass is a signed zip archive with a JSON manifest, a set of images at several densities, and a barcode field with an encoding declaration that catches everybody. A walk through the format and what we can and cannot honour on Android.

PassWalletApple WalletPKPASS
Download Read
An umbrella, jacket, and phone on a windowsill while the sky changes outside
Weather Published 5 min read

Weather: Changing One Widget's Location Changed All of Them

Widget configuration is stored per widget id, and a single shared preference key is the bug that produces a home screen where every widget shows the same city. Plus why a widget cannot refresh whenever it likes.

WeatherAndroid WidgetAir Quality
Download Read
Appliance manuals, a repair receipt, and a phone beside a household utility shelf
HomeCareManager Published 6 min read

HomeCareManager: The Appliance You Deleted Came Back

Sync bugs are rarely about the network. Ours were about deletes that had nothing to represent them, a list that flashed empty during login, and photos that synced on a completely different schedule from the records they belonged to.

HomeCareManagerHome MaintenanceData Sync
Download Read
A train ticket, membership card, and phone on a traveler's desk
ONEWallet Published 5 min read

ONEWallet: Android Has No Idea What a .pkpass File Is

Making a wallet app appear in the Open with list for a pass file sounds like one intent filter. It is closer to six, because file managers, browsers, and mail clients each describe the same file differently and some of them describe it as nothing at all.

ONEWalletPKPASSWalletAndroid Update
Download Read
A phone camera framing a QR code on a printed sheet
QRScanner Published 5 min read

QRScanner: The Analyser That Stopped After Ten Frames

A camera scanner is a frame pipeline, and the two ways it commonly breaks are forgetting to release a frame and firing on every frame that decodes. One stops the app dead, the other buries the user in results.

QRScannerQR CodeBarcode
Download Read
A phone showing a long notification beside a notebook and a cup of coffee
Notic Published 6 min read

Notic: The Notification We Saved Was Empty

A bug report about blank saved notifications led us through Android notification extras, CharSequence versus String, and four different notification styles that each store their body text somewhere else.

NoticNotification HistoryAndroid Update
Download Read
A phone keyboard expanding a short trigger into a longer phrase
Text Shortcuts Published 5 min read

Text Shortcuts: There Is No API for Replacing Part of a Text Field

Android's accessibility action for setting text replaces the entire field. Expanding a trigger means reading the whole thing, rebuilding it, writing it back, and restoring the cursor - and every one of those steps can fail in a different app.

Text ShortcutsTypingProductivity
Download Read
A monthly budget notebook with streaming, music, and cloud service reminders
Subs Published 5 min read

Subs: Never Store Money in a Floating Point Number

A subscription tracker is arithmetic on amounts and dates, and both have a standard way to go wrong. Rounding that does not add up, an annual plan that is not a twelfth of itself each month, and a renewal date in somebody else's timezone.

SubsSubscription TrackerAndroid Widget
Download Read
A phone wallet app open beside physical membership cards
ONEWallet Published 5 min read

ONEWallet: Where Your Card Data Actually Lives

A wallet app is a small database of things people would rather not lose or leak. What we store, what we deliberately do not, which Android backup paths would have carried it off the device, and how to keep the list honest.

ONEWalletWalletCards
Download Read
A flip-style clock display on a phone beside a notebook
FlipClock Published 5 min read

FlipClock: A Clock That Ticks Late Is a Broken Clock

Updating a display once a second sounds like a timer loop. It is not, and the difference shows up as digits that change a fraction late, drift over hours, and a clock that is wrong for a whole minute after a timezone change.

FlipClockFocusDisplay
Download Read
A paused focus timer on a phone next to an open notebook
Focus Timer Published 5 min read

Focus Timer: Pause Is the Hardest Button in a Timer App

A countdown has more states than it looks like, and the interesting bugs all live in the transitions. What a pause means when the process dies, what counts as a completed session, and why we made abandoning one explicit.

Focus TimerPomodoroProductivity
Download Read
A document on a dark surface being framed by a phone camera
DocScanner Published 5 min read

DocScanner: Why Edge Detection Fails on a White Desk

Automatic page detection is a contour-finding problem, and contour finding needs contrast. A walk through how DocScanner decides where a page ends, why it gets it wrong, and the capture routine that stops it mattering.

DocScannerPDFProductivity
Download Read
A phone screen showing notification matching rules
NotiAlarm Published 6 min read

NotiAlarm: Why a Keyword Rule Fires Forty Times at 3 a.m.

Notification matching looks like string comparison until you meet re-posted notifications, Unicode normalisation in Korean text, and apps that move their content into a field your rule never reads.

NotiAlarmNotificationsAutomation
Download Read
A phone notification shade with most alerts cleared away
Notic Published 6 min read

Notic: You Cannot Hide an Android Notification, Only Cancel It

Building a notification filter on Android means working inside NotificationListenerService, where the only real verbs are cancel and snooze - and where group summaries, ongoing flags, and listener rebinds decide whether your app looks reliable.

NoticNotificationsFocus
Download Read
A phone on a desk stand showing a large flip-style clock
FlipClock Published 5 min read

FlipClock: The Reader Who Burned 88:88 Into Their Screen

An always-on clock is an app that deliberately displays the same bright pixels in the same place for hours. On OLED that has consequences, and designing around them changed almost every visual decision in the app.

FlipClockFocusDisplay
Download Read
A washing machine model label being photographed with a phone
HomeCareManager Published 6 min read

HomeCareManager: Designing a Schema for Facts You Do Not Have Yet

Almost every field on an appliance record is something the user might not know when they create it. Requiring any of them produces either empty records or invented data, and we shipped both before working out which mistake we had made.

HomeCareManagerHomeMaintenance
Download Read
A phone showing a long list of saved notifications
Notic Published 6 min read

Notic: What Happened When Users Saved Everything

Unlimited notification history looked like a feature until the databases got big, the list started stuttering, and one-time passcodes were still sitting in storage six months later. Here is what we changed and the retention model we landed on.

NoticNotificationsFocus
Download Read
A paper document being scanned into a PDF on a phone
DocScanner Published 5 min read

DocScanner: Our Five-Page PDF Was Thirty-Eight Megabytes

Android has a built-in PDF writer, and using it the obvious way produces files nobody can email. What we learned about image compression inside PDFs, bitmap memory, and why a scanner app is mostly a memory management problem.

DocScannerPDFProductivity
Download Read
A screenshot being cropped and marked up on a phone
ONEShot Published 5 min read

ONEShot: The Undo Stack That Ran Out of Memory

Keeping a bitmap per undo step is the first thing you write and the fastest way to crash an image editor on a phone. Storing operations instead changed the memory profile, the export path, and what the app can promise about quality.

ONEShotScreenshot EditorImages
Download Read
A diary entry with a photo and a location on a phone screen
ONEDiary Published 5 min read

ONEDiary: A Photo in a Diary Is a Permission That Expires

Attaching an image by reference is the efficient choice and the wrong one. Why old entries lost their photos, what a persistable URI permission does not survive, and where a diary should keep location data.

ONEDiaryJournalMemories
Download Read
A phone showing a short diary entry beside an evening lamp
ONEDiary Published 5 min read

ONEDiary: The Autosave That Erased an Entry

Autosave is supposed to be the feature that means you never lose anything. Ours briefly did the opposite, for a reason that is embarrassing to write down and worth writing down anyway.

ONEDiaryJournalMemories
Download Read
A phone displaying a barcode at a checkout scanner
PassWallet Published 5 min read

PassWallet: Why the Barcode on Your Screen Will Not Scan

Rendering a barcode is drawing black rectangles, and nearly every way of doing it produces something a scanner cannot read. Fractional pixel widths, anti-aliasing, missing quiet zones, and the theme that inverts your code.

PassWalletPassesLoyalty
Download Read
A Busan bus stop sign with a phone showing arrival times
BusanBus Published 6 min read

BusanBus: What Real Time Actually Means in a Bus Arrival Feed

The arrival time on your screen is an estimate derived from a vehicle position that was reported some seconds ago and passed through several systems on its way to you. Here is what BusanBus does with it, and why refreshing faster does not help.

BusanBusTransitBusan
Download Read
A calendar and an air conditioner filter on a table
HomeCareManager Published 6 min read

HomeCareManager: Every Month Is Not Every Thirty Days

Recurring maintenance sounds like adding an interval to a date. Then January 31st plus one month has no obvious answer, a filter change drifts backwards through the calendar, and a reminder fires on the wrong day for anyone who travels.

HomeCareManagerHomeMaintenance
Download Read
Several loyalty cards and a phone showing a stored barcode
PassWallet Published 4 min read

PassWallet: The Same Digits, the Wrong Barcode

Storing a membership number and drawing a barcode from it is not enough. The symbology matters, the check digit matters, and a code that looks right on screen can be a different value to the scanner.

PassWalletPassesLoyalty
Download Read
A QR code sticker on a printed poster being scanned
QRScanner Published 5 min read

QRScanner: A QR Code Can Claim to Be Any Website It Likes

A code is a string, and a string can be a domain that renders identically to one you trust. Why we show the destination instead of opening it, what punycode is doing in your scan results, and which payloads we treat as dangerous.

QRScannerQR CodeBarcode
Download Read
A screenshot being shared from a phone to a messaging app
ONEShot Published 5 min read

ONEShot: The Share Sheet Sent a File That No Longer Existed

Handing an image to another app on Android means handing over a content URI and a permission grant, and then having no idea when the other app is finished with it. Cleaning up too early broke sharing in a way that looked like a network error.

ONEShotScreenshot EditorImages
Download Read
A desk with a phone showing a running focus timer beside notes
Focus Timer Published 5 min read

Focus Timer: The Timer That Reset Every Time You Locked Your Phone

A focus app spends most of its life in the background, which is the one state Android does not guarantee you. What we changed after realising our timer was storing its state in exactly the place the system is most likely to take away.

Focus TimerPomodoroProductivity
Download Read
Clothing items photographed and organised in a wardrobe app
Wheron Published 5 min read

Wheron: Your Navy Jumper Is Black Under a Kitchen Light

Automatic colour detection on clothing photos is mostly a white balance problem, and white balance is decided by the camera before your code sees anything. Why the app asks you to confirm what it worked out.

WheronWardrobeOutfit
Download Read