Alex Zhukovich

72 Followers
21 Following
250 Posts

I write about building and testing Android and KMM apps.

https://alexzh.com

2.5 years: 1,000+ hours of writing, 2 full drafts, and over 50,000 words, and that's not even counting the code.

I'm writing a book on Android screenshot testing, and the first release is coming in April 2026.

Here's what it covers ⬇️

The book dives deep into:

• Why screenshot testing matters for mobile apps
• In-depth comparison of frameworks: Android Testify, Dropshots, Paparazzi, Roborazzi, Shot, and Compose Preview Screenshot Testing
• Practical use of ComposablePreviewScanner and AndroidUiTestingUtils

Just found out you can now generate widget previews using Jetpack Compose.

Override "providePreview" in your widget class.

⚠️ Android 15+ only (Glance 1.2.0-rc01).
For older versions, combine with XML (12+) or images as a fallback.

Your date formatter may work locally, but break elsewhere.

SimpleDateFormat(...) and DateTimeFormatter.ofLocalizedDate(...) do not guarantee the result your users expect.

Use DateFormat.getBestDateTimePattern() for the right locale pattern.

The results for the same date across locales:
- English (United States): February 18, 2026
- English (Germany): 18 February 2026

How are you currently handling date formatting in your Android projects?

#AndroidDev

"Just display the number. What could go wrong?"
Localize your app into Arabic and find out.

Instead of using raw numbers in your UI, use NumberFormat.
Not only digits depend on the locale, but also decimal separators, thousand groupings, and many other formatting conventions.

Your future self will thank you.

Last week I published a short article about a small but annoying problem with PreviewParameterProvider in Jetpack Compose.

If you've ever used PreviewParameterProvider, you know the pain: your previews have names like "uiState 0", "uiState 1", "uiState 2".

Here's how to fit ⬇️

How to fix the Compose preview naming problem

If you use PreviewParameterProvider, you've probably struggled with index-based names like "uiState 0" and "uiState 1." Starting with ui-tooling-preview:1.10.0, you can finally add custom display names to your preview states.

Mobile development with Alex

Starting with ui-tooling-preview:1.10.0, you can override "getDisplayName()" in your PreviewParameterProvider to replace index-based naming with meaningful labels.

It takes less than 5 minutes to set up, but it removes the confusion every time you open the preview panel.

If you use PreviewParameterProvider in Jetpack Compose, you know the frustration of seeing index-based preview names, like uiState 1.

Good news: ui-tooling-preview:1.10.0 finally lets you add custom names to your preview states.

Here's how to use it:
https://alexzh.com/how-to-fix-the-compose-preview-naming-problem/

How to fix the Compose preview naming problem

If you use PreviewParameterProvider, you've probably struggled with index-based names like "uiState 0" and "uiState 1." Starting with ui-tooling-preview:1.10.0, you can finally add custom display names to your preview states.

Mobile development with Alex

How many preview functions do you use per component or screen in Jetpack Compose?

If it's more than two, consider using PreviewParameterProvider.

Less code. Same coverage.

#AndroidDev #JetpackCompose