Pocket Studio Academy
HomePart 5
Part 5

Build Three Real Apps

Eighteen chapters, each ending at a checkpoint you can download and build. Dice Duel teaches state and animation. Pocket Notes teaches persistence. Focus Flow ties everything together.

5.1

Dice Duel 1 — project setup and theme

The first sitting of your first real app. You build the project from its foundations, choose a colour palette that will carry the whole game, draw a launcher icon out of shapes, and get a real APK with your own icon onto your phone.

13 min
5.2

Dice Duel 2 — drawing a die face with Canvas

You draw a real die with no picture files at all — a rounded square and up to six pips placed on a 3×3 grid, computed from whatever size the composable is given, so it stays razor sharp from 88dp to 400dp.

15 min
5.3

Dice Duel 3 — rolling, state and randomness

Four remembered values turn a picture into a game. You add the die's face, two scores and whose turn it is, wire a tap straight onto the die, and pick a genuinely random number between one and six.

14 min
5.4

Dice Duel 4 — the roll animation

A counter that only ever goes up, a random tilt, a nine-frame shuffle inside a coroutine and a graphicsLayer. Together they turn a number that changes into a die that is genuinely thrown.

15 min
5.5

Dice Duel 5 — scores, winning and polish

Give the game an ending. A named target, a winner that stops being zero, a banner that springs in over a dimmed board, progress bars on both panels, and one button that puts everything back to nothing.

15 min
5.6

Pocket Notes 1 — model, Room and DAO

Give an app a memory that survives being closed. You describe a note as one Kotlin class and your questions as one interface, and Room writes every line of SQL for you at build time.

16 min
5.7

Pocket Notes 2 — ViewModel and StateFlow

Put two layers between the screen and the database. The repository owns the DAO, the ViewModel owns one state object, and a note saved anywhere appears on screen without a single line of code saying "refresh".

15 min
5.8

Pocket Notes 3 — the note list and the empty state

Turn a plain column of text into a real list: cards, human-readable timestamps, a title that shrinks as you scroll, and the screen everybody forgets to design — the one with nothing on it.

15 min
5.9

Pocket Notes 4 — the editor screen

A second screen, and the road between them. A route is just a piece of text, the + button stops lying, and the editor has no Save button on purpose — leaving it saves, which means catching both ways out.

16 min
5.10

Pocket Notes 5 — swipe to delete, with undo

Drag a card left and the note is gone from SQLite immediately — no timer, no pending state, no "are you sure?". A snackbar with an Undo button puts the very same note back where it was.

15 min
5.11

Pocket Notes 6 — search and final polish

A search box that filters as you type, a second empty state for "found nothing", a live word count, and a keyboard that stops covering the sentence you are writing. Pocket Notes is finished.

14 min
5.12

Focus Flow 1 — navigation skeleton

The last and largest app starts here. You build the project, write a full light and dark colour scheme by hand, draw an adaptive icon as a vector, and wire three tabs together with a bottom navigation bar that has no state of its own.

15 min
5.13

Focus Flow 2 — the timer engine

Build the clock that actually counts. A ViewModel holds every piece of timer state, a coroutine ticks ten times a second without freezing the screen, and the loop measures real elapsed time instead of trusting delay to be exact.

17 min
5.14

Focus Flow 3 — the ring dial on Canvas

Replace the number with a picture of the number. You draw a ring that empties as the phase runs down, plus twelve tick marks placed with a line of trigonometry — all by hand on a Canvas, with no chart library anywhere.

16 min
5.15

Focus Flow 4 — sessions in Room

Give the app a memory. Every finished phase is written into a Room database as a row, and the line under the clock stops counting in memory and starts reading today's real totals straight out of the database — updating itself after every write.

15 min
5.16

Focus Flow 5 — settings with DataStore

Build the Settings tab for real. Focus length, break length and a keep-screen-on switch, stored in DataStore, read as a Flow, and applied to the running timer the moment you change them — but never in the middle of a round you are already in.

14 min
5.17

Focus Flow 6 — notifications

Put the phone face down. A notification fires the moment a phase ends — which needs a channel created before the first post, a permission declared in the manifest, and on Android 13 and newer a runtime request the user is allowed to refuse without breaking anything.

15 min
5.18

Focus Flow 7 — the stats chart

The last chapter. Every session you have saved becomes three totals and a seven-day bar chart, drawn by hand on a Canvas with measured text and rounded bars — plus a proper empty state for the very first run. Focus Flow is finished, and so is Part 5.

17 min