<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://blogs.mobilebytesensei.com/</loc>
    <lastmod>2026-11-27</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/</loc>
    <lastmod>2026-11-27</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/navigation-migration/</loc>
    <lastmod>2026-11-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/navigation-migration/hero.png</image:loc>
      <image:title>Two navigation systems can share one back stack, which is the only reason this works</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recyclerview-to-lazycolumn/</loc>
    <lastmod>2026-11-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recyclerview-to-lazycolumn/hero.png</image:loc>
      <image:title>Porting a RecyclerView deletes four classes and keeps one idea</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/views-in-compose/</loc>
    <lastmod>2026-11-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/views-in-compose/hero.png</image:loc>
      <image:title>AndroidView has two lambdas, and putting work in the wrong one is the bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compose-in-views/</loc>
    <lastmod>2026-11-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compose-in-views/hero.png</image:loc>
      <image:title>ComposeView is easy; deciding where to put it is the migration</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/common-testing-patterns/</loc>
    <lastmod>2026-11-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/common-testing-patterns/hero.png</image:loc>
      <image:title>What a Compose test suite should actually contain</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/synchronisation/</loc>
    <lastmod>2026-11-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/synchronisation/hero.png</image:loc>
      <image:title>A flaky test is a timing assumption you didn&apos;t know you made</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-apis/</loc>
    <lastmod>2026-11-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-apis/hero.png</image:loc>
      <image:title>Find, act, assert — and the rule that decides which test to write at all</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/semantics-tree-testing/</loc>
    <lastmod>2026-11-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/semantics-tree-testing/hero.png</image:loc>
      <image:title>Your UI tests query the accessibility tree, which is why testTag is a last resort</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/measuring-with-the-tools/</loc>
    <lastmod>2026-11-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/measuring-with-the-tools/hero.png</image:loc>
      <image:title>Four tools, four questions, and none of them answers another&apos;s</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/deferred-reads/</loc>
    <lastmod>2026-11-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/deferred-reads/hero.png</image:loc>
      <image:title>Nine pillars have quietly been teaching you one optimisation</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/baseline-profiles/</loc>
    <lastmod>2026-11-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/baseline-profiles/hero.png</image:loc>
      <image:title>Baseline Profiles fix a problem recomposition counts can&apos;t see</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stability-and-strong-skipping-part-2/</loc>
    <lastmod>2026-11-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stability-and-strong-skipping-part-2/hero.png</image:loc>
      <image:title>Strong skipping made most of yesterday&apos;s advice unnecessary</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/stability-and-strong-skipping-part-1/</loc>
    <lastmod>2026-11-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/stability-and-strong-skipping-part-1/hero.png</image:loc>
      <image:title>The compiler decides your types are unstable, and it writes down why</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/the-three-phases-recap/</loc>
    <lastmod>2026-11-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/the-three-phases-recap/hero.png</image:loc>
      <image:title>Compose performance is one question asked in four places</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/drag-and-drop/</loc>
    <lastmod>2026-11-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/drag-and-drop/hero.png</image:loc>
      <image:title>Drag-and-drop crosses app boundaries, which is why it isn&apos;t just a drag gesture</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/focus/</loc>
    <lastmod>2026-11-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/focus/hero.png</image:loc>
      <image:title>Focus is the input model you don&apos;t test until someone plugs in a keyboard</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/scroll-phases-and-nested-scroll/</loc>
    <lastmod>2026-11-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/scroll-phases-and-nested-scroll/hero.png</image:loc>
      <image:title>Nested scroll is a negotiation, and there are four moments to intervene</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/multi-touch/</loc>
    <lastmod>2026-11-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/multi-touch/hero.png</image:loc>
      <image:title>Pinch, pan and rotate arrive together, and the centroid is what ties them</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/drag-swipe-fling/</loc>
    <lastmod>2026-11-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/drag-swipe-fling/hero.png</image:loc>
      <image:title>Swipe-to-dismiss is a state machine with anchors, not a drag handler</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/tap-and-press/</loc>
    <lastmod>2026-11-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/tap-and-press/hero.png</image:loc>
      <image:title>clickable does six things, and detectTapGestures does one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pointer-input/</loc>
    <lastmod>2026-11-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pointer-input/hero.png</image:loc>
      <image:title>Every gesture in Compose is a coroutine reading a stream of events</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-accessibility/</loc>
    <lastmod>2026-11-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-accessibility/hero.png</image:loc>
      <image:title>Automated checks find the missing labels. They can&apos;t tell you the label is wrong.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/traversal-order/</loc>
    <lastmod>2026-11-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/traversal-order/hero.png</image:loc>
      <image:title>Reading order is layout order, until your layout stops matching your meaning</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/merging-and-clearing-semantics/</loc>
    <lastmod>2026-11-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/merging-and-clearing-semantics/hero.png</image:loc>
      <image:title>One card, four announcements — merging is the fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/semantics-basics/</loc>
    <lastmod>2026-11-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/semantics-basics/hero.png</image:loc>
      <image:title>Compose builds a second tree, and it&apos;s the one your users hear</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/testing-animations/</loc>
    <lastmod>2026-11-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/testing-animations/hero.png</image:loc>
      <image:title>Take the clock away and animations become testable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shared-elements/</loc>
    <lastmod>2026-11-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shared-elements/hero.png</image:loc>
      <image:title>A shared element transition is one element pretending to be two</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/animated-visibility-and-content/</loc>
    <lastmod>2026-10-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/animated-visibility-and-content/hero.png</image:loc>
      <image:title>You cannot fade out something that has already left the composition</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/transitions/</loc>
    <lastmod>2026-10-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/transitions/hero.png</image:loc>
      <image:title>updateTransition is a state machine that happens to animate</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/animate-as-state/</loc>
    <lastmod>2026-10-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/animate-as-state/hero.png</image:loc>
      <image:title>You don&apos;t animate from A to B, you declare B and Compose handles the rest</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/choosing-an-animation-api/</loc>
    <lastmod>2026-10-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/choosing-an-animation-api/hero.png</image:loc>
      <image:title>Compose has a dozen animation APIs and one decision tree</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/bitmap-optimisation/</loc>
    <lastmod>2026-10-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/bitmap-optimisation/hero.png</image:loc>
      <image:title>Four bytes a pixel is the number that decides whether your app gets killed</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shapes-and-shadows/</loc>
    <lastmod>2026-10-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shapes-and-shadows/hero.png</image:loc>
      <image:title>A shadow needs a shape, and Compose won&apos;t guess one for you</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/brush-and-gradients/</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/brush-and-gradients/hero.png</image:loc>
      <image:title>Your gradient is measured in pixels, and that&apos;s the bug</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-painter/</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-painter/hero.png</image:loc>
      <image:title>A Painter is the thing that knows how big it wants to be</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/image-bitmap-vs-image-vector/</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/image-bitmap-vs-image-vector/hero.png</image:loc>
      <image:title>A vector costs CPU once, a bitmap costs memory forever</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/loading-images/</loc>
    <lastmod>2026-10-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/loading-images/hero.png</image:loc>
      <image:title>contentScale and Modifier.size are answering different questions</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/autofill-in-compose/</loc>
    <lastmod>2026-10-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/autofill-in-compose/hero.png</image:loc>
      <image:title>Two lines of autofill are worth more than a week of form polish</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/fonts-and-emoji/</loc>
    <lastmod>2026-10-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/fonts-and-emoji/hero.png</image:loc>
      <image:title>Your custom font has a fallback, and you didn&apos;t choose it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/text-fields-and-state/</loc>
    <lastmod>2026-10-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/text-fields-and-state/hero.png</image:loc>
      <image:title>TextFieldState is a document, and edits are transactions on it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/paragraph-and-layout/</loc>
    <lastmod>2026-10-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/paragraph-and-layout/hero.png</image:loc>
      <image:title>Your list rows are different heights because text measurement is honest</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/displaying-and-styling-text/</loc>
    <lastmod>2026-10-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/displaying-and-styling-text/hero.png</image:loc>
      <image:title>AnnotatedString is why you don&apos;t need three Text composables in a Row</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/new-styles-api/</loc>
    <lastmod>2026-10-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/new-styles-api/hero.png</image:loc>
      <image:title>Compose is growing a styles API, and it&apos;s for the gap theming never covered</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-theming/</loc>
    <lastmod>2026-10-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-theming/hero.png</image:loc>
      <image:title>Extending MaterialTheme beats replacing it, until it doesn&apos;t</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/shape-system/</loc>
    <lastmod>2026-10-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/shape-system/hero.png</image:loc>
      <image:title>Corner radius is a signal, and Material has five of them</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/typography-scale/</loc>
    <lastmod>2026-10-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/typography-scale/hero.png</image:loc>
      <image:title>Fifteen named text styles are fewer decisions than five</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/colour-schemes-dynamic-colour/</loc>
    <lastmod>2026-10-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/colour-schemes-dynamic-colour/hero.png</image:loc>
      <image:title>Dynamic colour takes your brand palette away, and that&apos;s the deal</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/m3-anatomy/</loc>
    <lastmod>2026-10-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/m3-anatomy/hero.png</image:loc>
      <image:title>MaterialTheme is three CompositionLocals and nothing else</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/search-and-chips/</loc>
    <lastmod>2026-10-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/search-and-chips/hero.png</image:loc>
      <image:title>SearchBar has two states, and the second one takes over the screen</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pickers/</loc>
    <lastmod>2026-10-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pickers/hero.png</image:loc>
      <image:title>Date pickers are a timezone bug with a calendar attached</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/progress-and-feedback/</loc>
    <lastmod>2026-10-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/progress-and-feedback/hero.png</image:loc>
      <image:title>The spinner you show for 200ms is worse than no spinner</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/navigation-components/</loc>
    <lastmod>2026-10-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/navigation-components/hero.png</image:loc>
      <image:title>Bar, rail, drawer — the same destinations, chosen by window width</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/dialogs-and-sheets/</loc>
    <lastmod>2026-10-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/dialogs-and-sheets/hero.png</image:loc>
      <image:title>A dialog is state, not a function you call</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/text-fields/</loc>
    <lastmod>2026-10-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/text-fields/hero.png</image:loc>
      <image:title>The TextField overload you&apos;re using is probably the deprecated one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/selection-controls/</loc>
    <lastmod>2026-10-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/selection-controls/hero.png</image:loc>
      <image:title>Checkbox, radio, switch: three controls, three different questions</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/buttons-and-fab/</loc>
    <lastmod>2026-10-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/buttons-and-fab/hero.png</image:loc>
      <image:title>Five buttons, one hierarchy, and the rule that decides which</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/scaffold-and-app-bars/</loc>
    <lastmod>2026-10-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/scaffold-and-app-bars/hero.png</image:loc>
      <image:title>The Scaffold parameter everyone ignores is the one that breaks the layout</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/connected-displays/</loc>
    <lastmod>2026-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/connected-displays/hero.png</image:loc>
      <image:title>An external display is a second window, not a bigger one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/foldables/</loc>
    <lastmod>2026-09-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/foldables/hero.png</image:loc>
      <image:title>A hinge is a physical object, and your layout should know where it is</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/supporting-pane/</loc>
    <lastmod>2026-09-29</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/supporting-pane/hero.png</image:loc>
      <image:title>SupportingPaneScaffold is for content that is about other content</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/list-detail-pane/</loc>
    <lastmod>2026-09-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/list-detail-pane/hero.png</image:loc>
      <image:title>ListDetailPaneScaffold: the back button is the whole reason it exists</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/canonical-layouts/</loc>
    <lastmod>2026-09-27</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/canonical-layouts/hero.png</image:loc>
      <image:title>There are three adaptive layouts, and you probably don&apos;t need a fourth</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/window-size-classes/</loc>
    <lastmod>2026-09-26</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/window-size-classes/hero.png</image:loc>
      <image:title>Screen size is the wrong thing to branch on. Window size is the right one.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/flexbox-alternative/</loc>
    <lastmod>2026-09-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/flexbox-alternative/hero.png</image:loc>
      <image:title>Porting FlexboxLayout: every flex property maps onto something, but not onto one thing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/grid-layout/</loc>
    <lastmod>2026-09-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/grid-layout/hero.png</image:loc>
      <image:title>Sometimes the right grid is a Column of Rows</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/flow-layout/</loc>
    <lastmod>2026-09-23</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/flow-layout/hero.png</image:loc>
      <image:title>FlowRow is the chip group you kept writing a custom Layout for</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/pager/</loc>
    <lastmod>2026-09-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/pager/hero.png</image:loc>
      <image:title>HorizontalPager is a lazy list that snaps — and PagerState is where the bugs live</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lazy-grid/</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lazy-grid/hero.png</image:loc>
      <image:title>A grid is not a list with two columns</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lazy-column/</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lazy-column/hero.png</image:loc>
      <image:title>LazyColumn is not a faster Column, and items(key = …) is not optional</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/custom-modifiers/</loc>
    <lastmod>2026-09-19</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/custom-modifiers/hero.png</image:loc>
      <image:title>Write a custom modifier only after you&apos;ve ruled out a function</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/constraints-and-modifiers/</loc>
    <lastmod>2026-09-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/constraints-and-modifiers/hero.png</image:loc>
      <image:title>Why fillMaxWidth() sometimes does nothing</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/modifiers-part-2-order/</loc>
    <lastmod>2026-09-17</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/modifiers-part-2-order/hero.png</image:loc>
      <image:title>padding().background() and background().padding() are not the same picture</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/modifiers-part-1/</loc>
    <lastmod>2026-09-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/modifiers-part-1/hero.png</image:loc>
      <image:title>A Modifier is a linked list, and that explains almost everything about it</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/layout-basics/</loc>
    <lastmod>2026-09-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/layout-basics/hero.png</image:loc>
      <image:title>Column, Row, Box — and the single-pass rule that makes them fast</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-holders-pattern/</loc>
    <lastmod>2026-09-14</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-holders-pattern/hero.png</image:loc>
      <image:title>Not every state holder is a ViewModel</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/architectural-layering/</loc>
    <lastmod>2026-09-13</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/architectural-layering/hero.png</image:loc>
      <image:title>The UI layer has two halves, and merging them is why screens become untestable</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/compositionlocal/</loc>
    <lastmod>2026-09-12</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/compositionlocal/hero.png</image:loc>
      <image:title>CompositionLocal is not dependency injection, and using it that way hurts later</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/saving-ui-state/</loc>
    <lastmod>2026-09-11</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/saving-ui-state/hero.png</image:loc>
      <image:title>rememberSaveable survives what remember doesn&apos;t — and it isn&apos;t a bigger remember</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-pitfalls/</loc>
    <lastmod>2026-09-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-pitfalls/hero.png</image:loc>
      <image:title>Six parameters deep and none of them are used here</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-in-viewmodel/</loc>
    <lastmod>2026-09-09</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-in-viewmodel/hero.png</image:loc>
      <image:title>The ViewModel is not the default place for state. It&apos;s the place for state that outlives the screen.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/state-hoisting-basics/</loc>
    <lastmod>2026-09-08</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/state-hoisting-basics/hero.png</image:loc>
      <image:title>State hoisting is one question: who else needs to know?</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/three-phases/</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/three-phases/hero.png</image:loc>
      <image:title>Composition, layout, drawing — and why reading a value in the wrong one costs frames</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/side-effects-intro/</loc>
    <lastmod>2026-09-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/side-effects-intro/hero.png</image:loc>
      <image:title>Your composable ran four times. So did your network call.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/lifecycle-of-composables/</loc>
    <lastmod>2026-09-05</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/lifecycle-of-composables/hero.png</image:loc>
      <image:title>A composable&apos;s lifecycle is three events, and none of them is onDestroy</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/recomposition/</loc>
    <lastmod>2026-09-04</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/recomposition/hero.png</image:loc>
      <image:title>Recomposition doesn&apos;t re-run your screen. It re-runs the scopes that read what changed.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/first-composable/</loc>
    <lastmod>2026-09-03</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/first-composable/hero.png</image:loc>
      <image:title>What @Composable actually does to your function</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/thinking-in-compose/</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/thinking-in-compose/hero.png</image:loc>
      <image:title>Thinking in Compose: you can&apos;t reach into the UI any more, and that&apos;s the point</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/setup-and-bom/</loc>
    <lastmod>2026-09-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/setup-and-bom/hero.png</image:loc>
      <image:title>Compose has two version problems, and the BOM only solves one</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/blog/adb-install-r-stale-screenshot/</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://blogs.mobilebytesensei.com/posts/adb-install-r-stale-screenshot/stale-composition.png</image:loc>
      <image:title>adb install -r doesn&apos;t kill your app, so your screenshot is a lie</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/company</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/contact</loc>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/privacy</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/terms</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/refund</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://blogs.mobilebytesensei.com/support</loc>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
