Skip to content

Dev Log ยท Fake Chat Video, Compose, Usability, Android

Two screens became one, and three buttons had to go

2 to 8 September 2026:

A page that would not scroll

It started with a user report: "Design cannot be scrolled." The bug was real.

Above the settings sat a preview that collapses as you scroll. Its height lived in a scroll connection that is remembered exactly once, and the remembered value stayed at the full height forever. Every gesture was then measured against a preview that had long since collapsed. The connection spent the whole movement on its own collapsing, and the list below did not move at all.

The fix is three lines. But the bug could only exist because two scrolling systems had to negotiate inside one screen.

Two screens became one

The editor and the chat settings were separate. Writing happened here, adjusting there, and every switch meant leaving one screen for the other. Now the chat is the stage, drawn by the real export renderer at full width, so every change appears in the next frame instead of two navigation steps away. Below it sits a panel with three fixed heights: write a message, the open category, the message list.

There is also a handle that did not exist before. Tap the stage and the setting that owns what you tapped opens up. A calculation turns the tap position back into the status bar, the header, the input bar or one particular bubble. The geometry for it comes from the renderer's own layout pass, so a bubble with an image or a row of reactions sits exactly where the frame will later draw it.

Three rules took several attempts:

  • The stage takes the room the panel leaves. Neither may derive its height from the other.
  • The frame is drawn, not hung in as an image element with an offset. The second version squashes it silently, and then the tap maths points somewhere else.
  • The panel keeps its height when the window changes. If it rebuilds its state, the input bar and the timestamps vanish at exactly the moment the keyboard opens.

A video like a photo

A video can now be dropped into the chat like a photo or a recording. The renderer never opens a video, it draws bitmaps. So the video is taken apart once: a preview frame for the bubble, and the sound track as its own file so it mixes into the export like any other recording. The video file itself is kept, because it belongs to the user.

One detail you only notice on a device: the running time is rounded, not rounded up. A container reports a six second clip as 6,042 milliseconds. Rounded up, the bubble said "0:07" while every gallery on the phone said six.

Three buttons that had to go

After an export there were share buttons for TikTok, Instagram and the rest, plus a field for the caption. On a real device not one of them worked. TikTok and Instagram answered "unknown file type", the generic chooser opened nothing useful, and the prepared caption arrived nowhere. A send action carrying a video address from the media store is not a route those apps accept, and the app cannot make them accept it.

So they are gone, and seven strings in 72 language folders with them. In their place stands the note that the video is in your gallery. That is where a creator uploads it from anyway.

Two promises had to follow

The welcome screen promised "direct share to TikTok, Reels, YouTube Shorts" in 71 languages. It now names the format you actually get.

"What's new" still described the state of 1.0.4 in every language. That text is now generated from the Play release notes, so the two cannot drift apart again.

The website followed in the same session, in 35 languages. While checking it, a landing page turned out to have been advertising a landscape export for months that never existed.

Warm regards from the workshopDigitale Manufaktur Rudolstadt