Shrnk

Shrnk Used AI

4 devlogs
26h 31m
•  Ship certified
Created by PawiX25

An intuitive Android application for efficiently compressing images and videos to save storage space. Built with Jetpack Compose and Material 3, it integrates with the Android share menu for easy media import and allows for quick sharing of the compressed result.

Timeline

Ship 1

1 payout of shell 209.0 shells

PawiX25

12 days ago

PawiX25 Covers 4 devlogs and 26h 31m

I've implemented a settings screen, allowing persistent defaults for themes and compression quality via DataStore. The app now integrates with the Android share sheet, letting you send media directly from your gallery or other apps. I've also added the ability to cancel an in-progress compression.
There was a theme flickering bug during the switch from main activity to the settings that always displayed your native android theme for a split sec no matter which theme you selected in the app. I fixed it by ensuring the correct theme is loaded before the UI renders. However, now I'm tackling another issue: the 'Image Quality' slider in the settings screen suffers from input lag and delay.

I've completed the major UI overhaul, fully integrating the compression features into a more intuitive and visually appealing experience.
The old, basic layout has been completely replaced with a modern, Card-based design built on a polished Material 3 theme. For image compression, the new interface now features a live preview of the selected image and a dedicated quality slider, giving you fine-grained control over the output.
For video compression, the technical dropdowns are gone. In their place are user-friendly preset cards, making it easy to choose the right balance of quality and file size. This new UI is fully connected to the recently upgraded backend, leveraging the intelligent image scaling and refined bitrate calculations to give you more effective and accurate compression than before.

Update attachment

I've finished a significant update to the core compression engine. The backend logic is now much smarter: image compression now includes intelligent scaling to reduce file sizes more effectively, and video compression has a refined bitrate calculation that can accurately target a user-specified file size. The system is now fully equipped to handle presets and quality settings from the UI. I'm now in the middle of a complete UI overhaul to make the app more intuitive and visually appealing. As the screenshot shows, I'm replacing the old, basic layout with a modern, Card-based design. For images, this new UI displays a preview and a dedicated quality slider for fine-grained control. The next step is to finish the video compression interface, which will feature user-friendly preset cards instead of technical dropdowns, all built on a new, more polished Material 3 theme.

Update attachment

I began by setting up the bare bones of the application: a new Android project using Kotlin and the modern Jetpack Compose for the UI.

My first real task was to make the app do anything at all xD. I needed to let the user actually select a file from their device to compress. This was the first major step, turning the app from a concept into an interactive tool. Once a file was selected, I made the UI update to show its name

I implemented a straightforward process: decode the source file into a Bitmap, then re-compress it as a JPEG with a lower quality setting. After some research, I decided to use the androidx.media3.transformer library. Getting the transformer to properly re-encode the video to H.264 and resize it to a smaller resolution was tricky. It was an asynchronous process, so I had to hook into its listeners to know when the job was done or if it failed.
Then I added an progress screen with a loading spinner. To make it even better, I added a progress monitoring loop that checks the status of the Transformer, allowing me to display a real-time percentage to the user.

The last thing I did was put the finishing touches on the user experience. I wrapped the whole interface in a Material 3 scaffold.

Update attachment