<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Shreyas Patil&apos;s Blog</title><description>Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI.</description><link>https://blog.shreyaspatil.dev/</link><language>en</language><item><title>Building My Dream Developer Blog with Astro, Cloudflare, and AI</title><link>https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai/</guid><description>How I migrated my 60+ engineering blogs from Hashnode to a custom Astro setup on Cloudflare with the help of Google Antigravity AI.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><author>Shreyas Patil</author><category>blogging</category><category>astro</category><category>cloudflare</category><category>antigravity</category><category>gemini</category></item><item><title>The Future of Android Apps with AppFunctions</title><link>https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions/</guid><description>Explore the potential of Android AppFunctions for AI agents. Learn how apps can share functionality with intelligent assistants using self-describing functions.</description><pubDate>Mon, 30 Mar 2026 04:30:00 GMT</pubDate><author>Shreyas Patil</author><category>app-development</category><category>ai</category><category>android-app-development</category><category>android</category><category>kotlin</category><category>android-apps</category><category>agentic-ai</category></item><item><title>session-bridge: I Made Two Claude Code Sessions Talk to Each Other</title><link>https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other/</guid><description>Building &apos;session-bridge&apos;: A Claude Code plugin that allows separate AI sessions to communicate and share context across different repositories.</description><pubDate>Fri, 20 Mar 2026 13:09:22 GMT</pubDate><author>Shreyas Patil</author><category>plugins</category><category>claudeai</category><category>agentic-ai</category><category>agentic-ai-development</category><category>claude-code</category><category>claude-plugin</category><category>claude-plugin</category></item><item><title>Exploring CompositionLocal API internals in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose/</guid><description>Deep dive into the internals of Jetpack Compose&apos;s CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.</description><pubDate>Mon, 09 Mar 2026 05:19:42 GMT</pubDate><author>Shreyas Patil</author><category>android-development</category><category>android</category><category>kotlin</category><category>jetpack-compose</category></item><item><title>You Can&apos;t Multitask. Your AI Agent Can.</title><link>https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can/</guid><description>Boost your productivity with AI agents. Learn how to delegate complex tasks to AI tools like Claude Code and Gemini to overcome human multitasking limitations.</description><pubDate>Mon, 02 Mar 2026 04:00:00 GMT</pubDate><author>Shreyas Patil</author><category>ai</category><category>productivity</category><category>git</category><category>multitasking</category><category>codex</category><category>ai-agents</category><category>gemini</category><category>vibe-coding</category><category>claude-code</category></item><item><title>DroidCon: Debugging App Performance at Scale</title><link>https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale/</guid><description>Recap of my DroidCon India 2025 talk on debugging Android app performance at scale. Watch the session and learn about performance profiling tools.</description><pubDate>Mon, 19 Jan 2026 04:58:14 GMT</pubDate><author>Shreyas Patil</author><category>app-development</category><category>android-app-development</category><category>performance</category><category>community</category><category>android</category><category>public-speaking</category><category>droidcon</category><category>app-performance</category><category>tech-talk</category><category>droidconindia</category></item><item><title>A Simple key to a Better LazyList in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose/</guid><description>Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.</description><pubDate>Wed, 08 Oct 2025 12:00:28 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>performance</category><category>android</category><category>ui</category><category>kotlin</category><category>kotlin-multiplatform</category><category>jetpack-compose</category><category>compose-multiplatform</category></item><item><title>Exploring PausableComposition internals in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose/</guid><description>Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.</description><pubDate>Mon, 14 Jul 2025 05:34:31 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>performance</category><category>android</category><category>ui</category><category>kotlin</category><category>internals</category><category>performance-optimization</category><category>uiux</category><category>kotlin-multiplatform</category><category>jetpack-compose</category><category>declarative</category></item><item><title>Deep dive into annotations in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose/</guid><description>An extensive deep dive into annotations in Jetpack Compose. Understand how @Composable, @Stable, @ReadOnlyComposable, and others work under the hood.</description><pubDate>Mon, 19 May 2025 05:16:29 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>app-development</category><category>optimization</category><category>android-app-development</category><category>performance</category><category>android</category><category>ui</category><category>kotlin</category><category>jetpack</category><category>jetpack-compose</category></item><item><title>Understanding Dispatchers: Main and Main.immediate</title><link>https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate/</guid><description>A deep dive into Kotlin Coroutine Dispatchers. Understand the subtle but important difference between Dispatchers.Main and Dispatchers.Main.immediate in Android.</description><pubDate>Wed, 02 Apr 2025 12:22:06 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>multithreading</category><category>android</category><category>kotlin</category><category>coroutines</category><category>android-studio</category><category>android-apps</category><category>threads</category><category>kotlin-beginner</category><category>kotlin-multiplatform</category><category>threadpools</category><category>kotlin-coroutines</category><category>coroutines-flow</category><category>Android</category><category>main-thread</category></item><item><title>#51 - My developer blogging journey so far</title><link>https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far/</guid><description>A personal account of my journey as a tech blogger, from my first post in 2019 to becoming a GDE. Insights on English barriers, criticism, and why sharing matters.</description><pubDate>Tue, 18 Feb 2025 14:10:44 GMT</pubDate><author>Shreyas Patil</author><category>writing</category><category>blog</category><category>blogging</category><category>development</category><category>flutter</category><category>developer</category><category>android</category><category>kotlin</category><category>technical-documentation</category><category>journey</category><category>technical-writing-1</category><category>content-creation</category></item><item><title>Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose/</guid><description>Performance benchmarks of direct state propagation vs. lambda-based state in Jetpack Compose. Learn which approach minimizes recompositions for better UI performance.</description><pubDate>Tue, 19 Nov 2024 14:19:27 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>performance</category><category>ux</category><category>android</category><category>ui</category><category>kotlin</category><category>recompose</category><category>android-studio</category><category>android-apps</category><category>jetpack</category><category>jetpack-compose</category><category>kotlin-coroutines</category><category>jetpack-compose-ui-components</category></item><item><title>Skipping the invocation of intermediate composables</title><link>https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables/</guid><description>Learn how Jetpack Compose optimizes UI rendering by skipping intermediate composables. Understand how to design your UI for maximum performance.</description><pubDate>Mon, 11 Nov 2024 13:33:20 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>ux</category><category>android</category><category>reactjs</category><category>ui</category><category>kotlin</category><category>android-studio</category><category>android-apps</category><category>jetpack</category><category>kotlin-multiplatform</category><category>jetpack-compose</category><category>compose-compiler</category></item><item><title>Kotlin Exception Handling: Why Singleton Exceptions are a bad idea</title><link>https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea/</guid><description>Understand why using singleton exceptions in Kotlin can be a bad practice and how it affects stack traces and debugging in your applications.</description><pubDate>Wed, 18 Sep 2024 12:56:49 GMT</pubDate><author>Shreyas Patil</author><category>jvm</category><category>programming-blogs</category><category>mistakes</category><category>java</category><category>android</category><category>coding</category><category>best-practices</category><category>kotlin</category><category>exception-handling</category><category>kotlin-beginner</category><category>programming-tips</category><category>kotlin-multiplatform</category><category>exceptionhandling</category></item><item><title>Effortless Compose Compiler report analysis</title><link>https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis/</guid><description>A guide to analyzing Jetpack Compose compiler reports easily. Learn how to diagnose stability and skippability of your composables for better performance.</description><pubDate>Mon, 20 May 2024 12:30:51 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>performance</category><category>opensource</category><category>android-development</category><category>debugging</category><category>android</category><category>ui</category><category>kotlin</category><category>android-studio</category><category>jetpack</category><category>kotlin-multiplatform</category><category>jetpack-compose</category><category>compose-multiplatform</category></item><item><title>Capturing composable to a bitmap without losing a state</title><link>https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state/</guid><description>Learn how to capture a Jetpack Compose Composable as a Bitmap without losing its current state. A deep dive into capturing high-quality UI screenshots programmatically.</description><pubDate>Wed, 20 Mar 2024 13:58:20 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>mobile-apps</category><category>android-development</category><category>android</category><category>ui</category><category>mobile-development</category><category>kotlin</category><category>android-apps</category><category>screenshot</category><category>jetpack</category><category>jetpack-compose</category><category>capture</category><category>jetpack-compose-layouts-and-modifiers</category></item><item><title>Rich media input from the keyboard in Compose</title><link>https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose/</guid><description>Learn how to handle rich media input (like GIFs and images) from the keyboard in Jetpack Compose, essential for modern chat applications.</description><pubDate>Fri, 01 Mar 2024 12:49:32 GMT</pubDate><author>Shreyas Patil</author><category>compose</category><category>android-app-development</category><category>programming-blogs</category><category>mobile-apps</category><category>android-development</category><category>android</category><category>ui</category><category>mobile-development</category><category>kotlin</category><category>keyboard</category><category>android-apps</category><category>uiux</category><category>jetpack</category><category>jetpack-compose</category></item><item><title>Collecting items from the Flow in chunks💦</title><link>https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks/</guid><description>Learn how to collect Kotlin Flow items in chunks or intervals without losing data. A practical guide to handling high-frequency data streams efficiently.</description><pubDate>Mon, 23 Oct 2023 04:46:23 GMT</pubDate><author>Shreyas Patil</author><category>reactive-programming</category><category>multithreading</category><category>kotlin</category><category>coroutines</category><category>kotlin-coroutines</category></item><item><title>Runtime Surprise: Kotlin Breaks Non-Nullability Promise on Developer Cheating in Field Initialization</title><link>https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/runtime-surprise-kotlin-breaks-non-nullability-promise-on-developer-cheating-in-field-initialization/</guid><description>A cautionary tale about Kotlin&apos;s non-nullability. Discover how incorrect field initialization can lead to unexpected NullPointerExceptions at runtime.</description><pubDate>Wed, 20 Sep 2023 04:33:24 GMT</pubDate><author>Shreyas Patil</author><category>jvm</category><category>java</category><category>android</category><category>kotlin</category><category>kotlin-nullsafety</category></item><item><title>Solving the mystery of recompositions in Compose&apos;s LazyList</title><link>https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/solving-the-mystery-of-recompositions-in-composes-lazylist/</guid><description>Debugging recompositions in Jetpack Compose LazyLists. Learn why your list items might be recomposing unnecessarily and how to fix it.</description><pubDate>Mon, 21 Aug 2023 13:03:59 GMT</pubDate><author>Shreyas Patil</author><category>performance</category><category>android</category><category>ui</category><category>kotlin</category><category>jetpack-compose</category></item><item><title>Sleepless Concurrency: delay() vs. Thread.sleep()</title><link>https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/sleepless-concurrency-delay-vs-threadsleep/</guid><description>Explore the difference between delay() and Thread.sleep() in Kotlin. Understand how non-blocking concurrency works from a platform perspective.</description><pubDate>Mon, 31 Jul 2023 04:39:30 GMT</pubDate><author>Shreyas Patil</author><category>java</category><category>multithreading</category><category>android</category><category>kotlin</category><category>kotlin-coroutines</category></item><item><title>PermissionFlow: A Reactive API for knowing the status of Android app permissions</title><link>https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/permissionflow-a-reactive-api-for-knowing-the-status-of-android-app-permissions/</guid><description>Introduction to PermissionFlow: A reactive API for Android that simplifies tracking permission status changes using Kotlin Coroutines and Flow.</description><pubDate>Mon, 22 May 2023 05:19:08 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android-development</category><category>android</category><category>kotlin</category><category>coroutines</category></item><item><title>Simplifying Redux in Kotlin: &quot;mutating&quot; immutable states with Mutekt</title><link>https://blog.shreyaspatil.dev/simplifying-redux-in-kotlin-mutating-immutable-states-with-mutekt/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/simplifying-redux-in-kotlin-mutating-immutable-states-with-mutekt/</guid><description>Simplify state management in Kotlin with Mutekt. Learn how to write &apos;mutating&apos; syntax for immutable states in Redux-like architectures.</description><pubDate>Fri, 24 Mar 2023 13:00:39 GMT</pubDate><author>Shreyas Patil</author><category>javascript</category><category>android</category><category>redux</category><category>kotlin</category><category>kotlin-multiplatform</category></item><item><title>Mastering Android App Performance: Analyzing Bottlenecks with Perfetto 🚦</title><link>https://blog.shreyaspatil.dev/mastering-android-app-performance-analyzing-bottlenecks-with-perfetto/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/mastering-android-app-performance-analyzing-bottlenecks-with-perfetto/</guid><description>Master Android app performance profiling with Perfetto. Learn how to identify and fix UI janks and bottlenecks using system tracing.</description><pubDate>Mon, 13 Mar 2023 13:00:39 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>performance</category><category>android</category><category>kotlin</category><category>perfetto</category></item><item><title>Leveraging the Snapshot Mutation Policies of Jetpack Compose</title><link>https://blog.shreyaspatil.dev/leveraging-the-snapshot-mutation-policies-of-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/leveraging-the-snapshot-mutation-policies-of-jetpack-compose/</guid><description>Understand Snapshot Mutation Policies in Jetpack Compose. Learn how to control when and how your UI recomposes based on state changes.</description><pubDate>Mon, 30 Jan 2023 13:30:39 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android</category><category>kotlin</category><category>state-management</category><category>jetpack-compose</category></item><item><title>ViewModel: for UI business, not UI operations 😮</title><link>https://blog.shreyaspatil.dev/viewmodel-for-ui-business-not-ui-operations/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/viewmodel-for-ui-business-not-ui-operations/</guid><description>Stop misusing ViewModels! Learn why ViewModels should handle UI business logic, not UI operations like showing toasts or navigation.</description><pubDate>Mon, 19 Dec 2022 12:30:42 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>ux</category><category>android</category><category>kotlin</category><category>state-management</category></item><item><title>Exploring &quot;select&quot; expression of Kotlin coroutines</title><link>https://blog.shreyaspatil.dev/exploring-select-expression-of-kotlin-coroutines/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/exploring-select-expression-of-kotlin-coroutines/</guid><description>Learn how to use the &apos;select&apos; expression in Kotlin Coroutines to await multiple suspending functions and select the first one that completes.</description><pubDate>Tue, 27 Sep 2022 14:29:44 GMT</pubDate><author>Shreyas Patil</author><category>asynchronous</category><category>multithreading</category><category>android</category><category>kotlin</category><category>coroutines</category></item><item><title>Combining StateFlows and transforming it into a StateFlow</title><link>https://blog.shreyaspatil.dev/combining-stateflows-and-transforming-it-into-a-stateflow/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/combining-stateflows-and-transforming-it-into-a-stateflow/</guid><description>Master the art of combining multiple StateFlows into a single transformed StateFlow. Explore utilities and best practices for managing complex states in Kotlin.</description><pubDate>Fri, 24 Jun 2022 12:30:00 GMT</pubDate><author>Shreyas Patil</author><category>multithreading</category><category>android</category><category>kotlin</category><category>coroutines</category><category>stateflow</category></item><item><title>Leveraging the Semaphore concept in Coroutines to limit the parallelism 🔀</title><link>https://blog.shreyaspatil.dev/leveraging-the-semaphore-concept-in-coroutines-to-limit-the-parallelism/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/leveraging-the-semaphore-concept-in-coroutines-to-limit-the-parallelism/</guid><description>Explore the concept of Semaphores in Kotlin Coroutines. Learn how to limit parallelism and manage resource access in concurrent programming.</description><pubDate>Fri, 01 Apr 2022 12:57:35 GMT</pubDate><author>Shreyas Patil</author><category>java</category><category>multithreading</category><category>android</category><category>kotlin</category><category>coroutines</category></item><item><title>Promise compose compiler and imply when you&apos;ll change 🤞</title><link>https://blog.shreyaspatil.dev/promise-compose-compiler-and-imply-when-youll-change/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/promise-compose-compiler-and-imply-when-youll-change/</guid><description>Understand the Compose compiler&apos;s stability promises. Learn how @Stable and @Immutable impact recomposition and how to help the compiler optimize your UI.</description><pubDate>Thu, 10 Mar 2022 12:42:38 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android</category><category>ui</category><category>kotlin</category><category>kotlin-beginner</category></item><item><title>Automate library publishing to Maven Central with GitHub Actions Workflow Dispatch 🤖</title><link>https://blog.shreyaspatil.dev/automate-library-publishing-to-maven-central-with-github-actions-workflow-dispatch/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/automate-library-publishing-to-maven-central-with-github-actions-workflow-dispatch/</guid><description>Step-by-step guide to automating JVM library publishing to Maven Central using GitHub Actions and Workflow Dispatch for one-click releases.</description><pubDate>Fri, 21 Jan 2022 12:49:26 GMT</pubDate><author>Shreyas Patil</author><category>github</category><category>java</category><category>gradle</category><category>android</category><category>kotlin</category></item><item><title>Filtering and modifying text input in Jetpack Compose way</title><link>https://blog.shreyaspatil.dev/filtering-and-modifying-text-input-in-jetpack-compose-way/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/filtering-and-modifying-text-input-in-jetpack-compose-way/</guid><description>Learn how to filter and modify user text input in Jetpack Compose. A guide to implementing input constraints and formatting for TextField.</description><pubDate>Mon, 20 Dec 2021 12:15:05 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>ux</category><category>android</category><category>ui</category><category>kotlin</category></item><item><title>Navigating Screens in Jetpack Compose (DevFest India 2021 - Mobile Track)</title><link>https://blog.shreyaspatil.dev/navigating-screens-in-jetpack-compose-devfest-india-2021-mobile-track/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/navigating-screens-in-jetpack-compose-devfest-india-2021-mobile-track/</guid><description>Recap and resources from my DevFest India 2021 talk on Navigating Screens in Jetpack Compose. Learn the best practices for Compose navigation.</description><pubDate>Tue, 26 Oct 2021 16:03:04 GMT</pubDate><author>Shreyas Patil</author><category>developer</category><category>android</category><category>ui</category><category>kotlin</category><category>navigation</category></item><item><title>🙅‍♂️ Don&apos;t let ViewModel know about framework level dependencies</title><link>https://blog.shreyaspatil.dev/dont-let-viewmodel-knew-about-framework-level-dependencies/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/dont-let-viewmodel-knew-about-framework-level-dependencies/</guid><description>Explore best practices for Android ViewModels. Learn why keeping framework references out of ViewModels is crucial for testing and preventing memory leaks.</description><pubDate>Fri, 17 Sep 2021 12:18:27 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>framework</category><category>software-architecture</category><category>android</category><category>kotlin</category></item><item><title>Observing Live connectivity status in Jetpack Compose way!</title><link>https://blog.shreyaspatil.dev/observing-live-connectivity-status-in-jetpack-compose-way/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/observing-live-connectivity-status-in-jetpack-compose-way/</guid><description>Learn how to observe live network connectivity status in Jetpack Compose. A reactive approach to handling internet availability in your Android app&apos;s UI.</description><pubDate>Tue, 17 Aug 2021 13:22:10 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android</category><category>ui</category><category>kotlin</category><category>networking</category></item><item><title>Composing composable in the Text line with InlineTextContent in Jetpack Compose</title><link>https://blog.shreyaspatil.dev/composing-composable-in-the-text-line-with-inlinetextcontent-in-jetpack-compose/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/composing-composable-in-the-text-line-with-inlinetextcontent-in-jetpack-compose/</guid><description>Learn how to use InlineTextContent in Jetpack Compose to embed Composables directly within text lines for rich, interactive text experiences.</description><pubDate>Fri, 30 Jul 2021 14:08:38 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android</category><category>ui</category><category>ui-design</category><category>kotlin</category></item><item><title>Providing AssistedInject supported ViewModel for Composable using Hilt</title><link>https://blog.shreyaspatil.dev/providing-assistedinject-supported-viewmodel-for-composable-using-hilt/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/providing-assistedinject-supported-viewmodel-for-composable-using-hilt/</guid><description>Learn how to provide Hilt ViewModels with AssistedInject to Jetpack Compose Composables for dynamic dependency injection with runtime parameters.</description><pubDate>Tue, 29 Jun 2021 14:52:48 GMT</pubDate><author>Shreyas Patil</author><category>java</category><category>android</category><category>kotlin</category><category>dependency-injection</category><category>learn-coding</category></item><item><title>Don&apos;t let Kotlin&apos;s single-expression function ruin your business😲</title><link>https://blog.shreyaspatil.dev/dont-let-kotlins-single-expression-function-ruin-your-business/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/dont-let-kotlins-single-expression-function-ruin-your-business/</guid><description>Understand why relying on Kotlin&apos;s automatic type inference in single-expression functions can lead to subtle bugs and business logic failures.</description><pubDate>Mon, 24 May 2021 14:42:29 GMT</pubDate><author>Shreyas Patil</author><category>android</category><category>kotlin</category><category>kotlin-beginner</category><category>programming-tips</category></item><item><title>Hide internal members of Kotlin Module from JVM 🔐</title><link>https://blog.shreyaspatil.dev/hide-internal-members-of-kotlin-module-from-jvm/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/hide-internal-members-of-kotlin-module-from-jvm/</guid><description>Learn how to properly hide internal Kotlin members from JVM to maintain a clean API for Java consumers when developing libraries.</description><pubDate>Mon, 17 May 2021 04:23:42 GMT</pubDate><author>Shreyas Patil</author><category>java</category><category>library</category><category>android</category><category>kotlin</category><category>kotlin-beginner</category></item><item><title>Let your delegates auto-nullify references☠️</title><link>https://blog.shreyaspatil.dev/let-your-delegates-auto-nullify-references/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/let-your-delegates-auto-nullify-references/</guid><description>Learn how to use Kotlin property delegates to automatically nullify references in Android, preventing memory leaks in Fragments and Activities.</description><pubDate>Fri, 12 Mar 2021 13:39:24 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>android</category><category>mobile-development</category><category>kotlin</category><category>kotlin-beginner</category></item><item><title>👨‍🍳 Cooking Tasty code in Kotlin 🍴 — Part 2</title><link>https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-2/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-2/</guid><description>Part 2 of &apos;Cooking Tasty Code&apos;. Dive deeper into Kotlin features like delegation, operator overloading, and more to enhance your coding style.</description><pubDate>Fri, 01 Jan 2021 09:23:42 GMT</pubDate><author>Shreyas Patil</author><category>coding</category><category>kotlin</category><category>programming-languages</category><category>kotlin-beginner</category><category>programming-tips</category></item><item><title>👨‍🍳 Cooking Tasty code in Kotlin 🍴 — Part 1</title><link>https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-1/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/cooking-tasty-code-in-kotlin-part-1/</guid><description>Part 1 of the &apos;Cooking Tasty Code&apos; series. Explore Kotlin&apos;s syntactic sugar and features that help write cleaner, more readable, and idiomatic code.</description><pubDate>Thu, 24 Dec 2020 14:37:40 GMT</pubDate><author>Shreyas Patil</author><category>programming</category><category>android</category><category>coding</category><category>kotlin</category><category>kotlin-beginner</category></item><item><title>🔥 Quickly distribute your app with Firebase App Distribution using GitHub Actions + Fastlane 🚀</title><link>https://blog.shreyaspatil.dev/quickly-distribute-your-app-with-firebase-app-distribution-using-github-actions-fastlane/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/quickly-distribute-your-app-with-firebase-app-distribution-using-github-actions-fastlane/</guid><description>Step-by-step guide to automating Android app distribution with Firebase App Distribution, GitHub Actions, and Fastlane for faster QA cycles.</description><pubDate>Wed, 21 Oct 2020 05:33:17 GMT</pubDate><author>Shreyas Patil</author><category>ci</category><category>github</category><category>firebase</category><category>android</category><category>testing</category></item><item><title>Automate publishing app to the Google Play Store with GitHub Actions⚡+ Fastlane🏃</title><link>https://blog.shreyaspatil.dev/automate-publishing-app-to-the-google-play-store-with-github-actions-fastlane-ac9104712486/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/automate-publishing-app-to-the-google-play-store-with-github-actions-fastlane-ac9104712486/</guid><description>Automate your Android app deployment to Google Play Store using GitHub Actions and Fastlane. Implement a &apos;Code, Push, and Chill&apos; workflow for your projects.</description><pubDate>Fri, 09 Oct 2020 12:33:39 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>deployment</category><category>android</category><category>kotlin</category></item><item><title>DevOps-ify Android libraries with GitHub Actions and Package Registry🚀</title><link>https://blog.shreyaspatil.dev/devops-ify-android-libraries-with-github-actions-and-package-registry-5e7f69a83622/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/devops-ify-android-libraries-with-github-actions-and-package-registry-5e7f69a83622/</guid><description>Learn how to use GitHub Package Registry (GPR) and GitHub Actions to safely publish and consume private or public Android libraries with ease.</description><pubDate>Fri, 02 Oct 2020 10:29:52 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Hello DataStore, Bye SharedPreferences👋 — Android📱 — Part 2: Proto DataStore</title><link>https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-part-2-proto-datastore-2716fbfd4783/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-part-2-proto-datastore-2716fbfd4783/</guid><description>Jetpack DataStore Part 2: Deep dive into Proto DataStore for type-safe data storage in Android using Protocol Buffers.</description><pubDate>Sat, 12 Sep 2020 13:56:18 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Hello DataStore, Bye SharedPreferences👋 — Android📱 — Part 1: Preference DataStore</title><link>https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-f46c610b81d5/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/hello-datastore-bye-sharedpreferences-android-f46c610b81d5/</guid><description>Introduction to Jetpack DataStore Part 1: Learn how to migrate from SharedPreferences to Preference DataStore for better data storage in Android.</description><pubDate>Thu, 03 Sep 2020 15:40:25 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>🕵️ Accessing device location using SIM Card 🗺️📍</title><link>https://blog.shreyaspatil.dev/accessing-device-location-using-sim-card-6cdb15645bef/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/accessing-device-location-using-sim-card-6cdb15645bef/</guid><description>Discover a clever trick to access device location using SIM card info in Android. Learn how to handle mock location scenarios for better location accuracy.</description><pubDate>Tue, 28 Jul 2020 15:07:45 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>tricks</category><category>programming</category><category>android</category><category>google</category></item><item><title>Getting data from Google Sheets📊 → Flutter App📱 — Part 2</title><link>https://blog.shreyaspatil.dev/getting-data-from-google-sheets-flutter-app-part-2-d6e689fdbbed/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/getting-data-from-google-sheets-flutter-app-part-2-d6e689fdbbed/</guid><description>Part 2 of the series: Learn how to fetch and display data from Google Sheets in your Flutter application using Google AppScript as an API.</description><pubDate>Sat, 04 Jul 2020 08:33:27 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>🌊 StateFlow, End of LiveData?</title><link>https://blog.shreyaspatil.dev/stateflow-end-of-livedata-a473094229b3/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/stateflow-end-of-livedata-a473094229b3/</guid><description>Is StateFlow the end of LiveData? An opinionated look at how Kotlin&apos;s StateFlow is replacing LiveData for state management in Android.</description><pubDate>Fri, 22 May 2020 15:49:15 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>🤖 Automate Publishing Android Library to Bintray using GitHub Actions 🚀</title><link>https://blog.shreyaspatil.dev/automate-publishing-android-library-to-bintray-using-github-actions-9b8ad8ab2698/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/automate-publishing-android-library-to-bintray-using-github-actions-9b8ad8ab2698/</guid><description>Learn how to automate the publishing of your open-source Android libraries to Bintray using GitHub Actions CI whenever you create a new release.</description><pubDate>Fri, 01 May 2020 08:47:20 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>🔥Firebase-ing with Kotlin Coroutines + Flow 🌊</title><link>https://blog.shreyaspatil.dev/firebase-ing-with-kotlin-coroutines-flow-dab1bc364816/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/firebase-ing-with-kotlin-coroutines-flow-dab1bc364816/</guid><description>Learn how to integrate Firebase with Kotlin Coroutines and Flow for reactive data streams in your Android applications.</description><pubDate>Thu, 30 Apr 2020 07:35:30 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>🔪 Introduction to Dagger DI 💉 by a Life way!</title><link>https://blog.shreyaspatil.dev/introduction-to-dagger-di-by-a-life-way-d34f62540329/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/introduction-to-dagger-di-by-a-life-way-d34f62540329/</guid><description>Demystifying Dependency Injection with Dagger. Learn DI concepts through real-life analogies and simplify your Android app architecture.</description><pubDate>Sun, 15 Mar 2020 07:54:11 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Update Queries without changing RecyclerView Adapter using FirebaseUI — Android 🔥</title><link>https://blog.shreyaspatil.dev/update-queries-without-changing-recyclerview-adapter-using-firebaseui-android-32098b3082b2/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/update-queries-without-changing-recyclerview-adapter-using-firebaseui-android-32098b3082b2/</guid><description>Learn how to update Firebase queries dynamically without recreating your RecyclerView adapter using the FirebaseUI-Android library.</description><pubDate>Fri, 13 Mar 2020 14:56:59 GMT</pubDate><author>Shreyas Patil</author><category>android-app-development</category><category>firebase</category><category>database</category><category>android</category><category>android-studio</category></item><item><title>Storing data from the Flutter app → Google Sheets 📊 — Part 1</title><link>https://blog.shreyaspatil.dev/storing-data-from-the-flutter-app-google-sheets-e4498e9cda5d/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/storing-data-from-the-flutter-app-google-sheets-e4498e9cda5d/</guid><description>Learn how to use Google Sheets as a database for your Flutter app. A simple and effective way to store and manage app data using Google AppScript.</description><pubDate>Fri, 10 Jan 2020 07:00:44 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>⏰Scheduling FCM Push Notifications🔔 On Device — Android📱</title><link>https://blog.shreyaspatil.dev/scheduling-fcm-push-notifications-on-device-android-2d3bb9653b4d/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/scheduling-fcm-push-notifications-on-device-android-2d3bb9653b4d/</guid><description>Learn how to schedule FCM push notifications on-device in Android without expensive cloud cron jobs, using AlarmManager and WorkManager.</description><pubDate>Thu, 19 Dec 2019 02:44:55 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Making Google-Apps Like NavigationView — Android 📱</title><link>https://blog.shreyaspatil.dev/making-google-apps-like-navigation-drawer-material-design-c8781d9ff8c8/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/making-google-apps-like-navigation-drawer-material-design-c8781d9ff8c8/</guid><description>Step-by-step guide to implementing a Google-style Navigation Drawer in Android using the MaterialNavigationView library for premium UI design.</description><pubDate>Tue, 10 Sep 2019 17:26:01 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Firestore Pagination in Android — Using FirebaseUI Library 🔥</title><link>https://blog.shreyaspatil.dev/firestore-pagination-in-android-using-firebaseui-library-1d7fe1a75704/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/firestore-pagination-in-android-using-firebaseui-library-1d7fe1a75704/</guid><description>Efficiently implement Cloud Firestore pagination in Android using the FirestorePagingAdapter from the FirebaseUI library.</description><pubDate>Sun, 21 Jul 2019 13:00:49 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>Animated Material Dialog — Android 📱 😍🎨</title><link>https://blog.shreyaspatil.dev/implementing-animated-material-dialog-in-android-c4fb35d7d050/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/implementing-animated-material-dialog-in-android-c4fb35d7d050/</guid><description>Learn how to create beautiful, animated Material Design dialogs in Android to enhance your app&apos;s user experience and visual appeal.</description><pubDate>Thu, 13 Jun 2019 08:15:23 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item><item><title>💳UPI Payment Integration in Android with EasyUpiPayment library📱💸</title><link>https://blog.shreyaspatil.dev/implementing-upi-payment-integration-in-android-with-easyupipayment-library-aaf9bea715d9/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/implementing-upi-payment-integration-in-android-with-easyupipayment-library-aaf9bea715d9/</guid><description>A quick guide to integrating UPI payments in your Android app using the EasyUpiPayment library for a seamless checkout experience.</description><pubDate>Fri, 07 Jun 2019 04:33:51 GMT</pubDate><author>Shreyas Patil</author><category>library</category><category>opensource</category><category>android</category><category>ui</category><category>indie-maker</category></item><item><title>Firebase Database Pagination — Android 🔥</title><link>https://blog.shreyaspatil.dev/firebase-database-paging-android-f59e6dd0dc75/</link><guid isPermaLink="true">https://blog.shreyaspatil.dev/firebase-database-paging-android-f59e6dd0dc75/</guid><description>Step-by-step guide to implementing pagination in Firebase Realtime Database using the FirebaseUI-Android library for smooth scrolling.</description><pubDate>Mon, 08 Apr 2019 13:53:22 GMT</pubDate><author>Shreyas Patil</author><category>others</category></item></channel></rss>